и его применение в биоинформатике
Лекция 14
Анастасия Жарикова
1 декабря 2023
установку пакетов
CRAN
- https://cran.r-project.org/ - install.packages()
Bioconductor
- https://www.bioconductor.org/
Github
- https://github.com/
…
remove.packages("packagename")
- удалить пакет
update.packages()
- обновить все пакеты
library()
- список доступных пакетов
library("packagename")
- загрузить установленный пакет в текущую R сессию
vignette("packagename")
- посмотреть “красивый” мануал по пакету, есть не для всех пакетов
sessionInfo()
- информация о загруженной сессии R
Установить пакет нужно один раз, но подгружать при каждом запуске рабочего сеанса
После уcтановки нужно только подгрузить пакет с помощью library("packagename")
С каждой новой версией R выходит и новая версия Bioconductor с новыми версиями пакетов. Поэтому определенной версии R соотвествует определенная версия пакета из Bioconductor. Посмотреть соответствие версий можно на сайте.
Пакеты из Bioconductor предпочтительнее устанавливать с помощью специальной системы управления пакетами - BiocManager.
[1] '3.18'
* sessionInfo()
R version 4.3.2 (2023-10-31 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19045)
Matrix products: default
locale:
[1] LC_COLLATE=Russian_Russia.utf8 LC_CTYPE=Russian_Russia.utf8
[3] LC_MONETARY=Russian_Russia.utf8 LC_NUMERIC=C
[5] LC_TIME=Russian_Russia.utf8
time zone: Europe/Moscow
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] htmlwidgets_1.6.3 BiocManager_1.30.22 compiler_4.3.2
[4] fastmap_1.1.1 cli_3.6.1 tools_4.3.2
[7] htmltools_0.5.7 rstudioapi_0.15.0 yaml_2.3.7
[10] rmarkdown_2.25 knitr_1.45 jsonlite_1.8.7
[13] xfun_0.41 digest_0.6.33 rlang_1.1.2
[16] evaluate_0.23
Bioconductor version '3.18'
* 1 packages out-of-date
* 0 packages too new
create a valid installation with
BiocManager::install("haven", update = TRUE, ask = FALSE, force = TRUE)
more details: BiocManager::valid()$too_new, BiocManager::valid()$out_of_date
[1] "BSgenome.Mmusculus.UCSC.mm10" "BSgenome.Mmusculus.UCSC.mm10.masked"
[3] "BSgenome.Mmusculus.UCSC.mm39" "BSgenome.Mmusculus.UCSC.mm8"
[5] "BSgenome.Mmusculus.UCSC.mm8.masked" "BSgenome.Mmusculus.UCSC.mm9"
[7] "BSgenome.Mmusculus.UCSC.mm9.masked" "EnsDb.Mmusculus.v75"
[9] "EnsDb.Mmusculus.v79" "PWMEnrich.Mmusculus.background"
[11] "TxDb.Mmusculus.UCSC.mm10.ensGene" "TxDb.Mmusculus.UCSC.mm10.knownGene"
[13] "TxDb.Mmusculus.UCSC.mm39.knownGene" "TxDb.Mmusculus.UCSC.mm39.refGene"
[15] "TxDb.Mmusculus.UCSC.mm9.knownGene"
Можно скачать архив с пакетом из любого репозитория
Сохранить архив
Установить пакет из архива
Локус или набор локусов в конкретном месте генома
Для точного определения геномного интервала нужно знать:
хромосому (имя соответствует таковому в референсном геноме)
начало интервала
конец интервала
цепь: “+” или “-” (может не быть)
версию референсного генома, относительно которого указаны координаты
Пример: chr1:2000000-3000000
Пример: chr1 2000000 3000000 -
Можно дополнительно задавать столбцы с метаданными интервалов
Для работы с геномными интервалами вне R можно использовать
GenomicRanges
GenomicRanges
gr <- GRanges(
seqnames = Rle(c("chrK", "chr2"), c(1, 3)),
ranges = IRanges(101:104, end = 111:114, names = head(letters, 4)),
strand = Rle(strand(c("-", "+", "*")), c(1, 2, 1)),
score = 1:4,
GC = seq(1, 0, length=4))
gr
GRanges object with 4 ranges and 2 metadata columns:
seqnames ranges strand | score GC
<Rle> <IRanges> <Rle> | <integer> <numeric>
a chrK 101-111 - | 1 1.000000
b chr2 102-112 + | 2 0.666667
c chr2 103-113 + | 3 0.333333
d chr2 104-114 * | 4 0.000000
-------
seqinfo: 2 sequences from an unspecified genome; no seqlengths
GenomicRanges
GenomicRanges
GenomicRanges
GenomicRanges
GRanges object with 4 ranges and 3 metadata columns:
seqnames ranges strand | score GC len
<Rle> <IRanges> <Rle> | <integer> <numeric> <integer>
a chrK 101-111 - | 1 1.000000 11
b chr2 102-112 + | 2 0.666667 11
c chr2 103-113 + | 3 0.333333 11
d chr2 104-114 * | 4 0.000000 11
-------
seqinfo: 2 sequences from an unspecified genome; no seqlengths
GenomicRanges
GenomicRanges
GRanges object with 3 ranges and 3 metadata columns:
seqnames ranges strand | score GC len
<Rle> <IRanges> <Rle> | <integer> <numeric> <integer>
b chr2 102-112 + | 2 0.666667 11
c chr2 103-113 + | 3 0.333333 11
d chr2 104-114 * | 4 0.000000 11
-------
seqinfo: 1 sequence from an unspecified genome; no seqlengths
GenomicRanges
GRanges object with 3 ranges and 3 metadata columns:
seqnames ranges strand | score GC len
<Rle> <IRanges> <Rle> | <integer> <numeric> <integer>
b chr2 102-112 + | 2 0.666667 11
c chr2 103-113 + | 3 0.333333 11
d chr2 104-114 * | 4 0.000000 11
-------
seqinfo: 2 sequences from an unspecified genome; no seqlengths
создать набор интервалов без пересечений
пересечь 2 набора интервалов
изменить границы набора интервалов
исследовать покрытие интервалами
найти ближайший участок из другого набора интервалов
многое другое …
GenomicRanges
GRanges object with 2 ranges and 0 metadata columns:
seqnames ranges strand
<Rle> <IRanges> <Rle>
[1] chr2 102-113 +
[2] chr2 104-114 *
-------
seqinfo: 2 sequences from an unspecified genome; no seqlengths
Набор интервалов с учетом направления цепи
Имена хромосом в разметках могут быть представлены в разных стилях:
UCSC
NCBI
Ensembl
Разные консорциумы
“chr1” - “1” - “NC_000001.11”
circular auto sex NCBI UCSC dbSNP Ensembl
1 FALSE TRUE FALSE 1 chr1 ch1 1
2 FALSE TRUE FALSE 2 chr2 ch2 2
3 FALSE TRUE FALSE 3 chr3 ch3 3
4 FALSE TRUE FALSE 4 chr4 ch4 4
5 FALSE TRUE FALSE 5 chr5 ch5 5
circular auto sex NCBI UCSC Ensembl
1 FALSE TRUE FALSE I chrI I
2 FALSE TRUE FALSE II chrII II
3 FALSE TRUE FALSE III chrIII III
4 FALSE TRUE FALSE IV chrIV IV
5 FALSE TRUE FALSE V chrV V
auto
circular
sex
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15"
[16] "16" "17" "18" "19" "20" "21" "22"
[1] "MT"
[1] "X" "Y"
GenomicRanges
+ стильМожно изменить стиль имен хромосом при необходимости
GRanges object with 2 ranges and 0 metadata columns:
seqnames ranges strand
<Rle> <IRanges> <Rle>
[1] chr2 102-113 +
[2] chr2 104-114 *
-------
seqinfo: 2 sequences from an unspecified genome; no seqlengths
GRanges object with 2 ranges and 0 metadata columns:
seqnames ranges strand
<Rle> <IRanges> <Rle>
[1] 2 102-113 +
[2] 2 104-114 *
-------
seqinfo: 2 sequences from an unspecified genome; no seqlengths
GenomicRanges
+ flankОбласть до начала интервала
GRanges object with 2 ranges and 0 metadata columns:
seqnames ranges strand
<Rle> <IRanges> <Rle>
[1] chr2 102-113 +
[2] chr2 104-114 *
-------
seqinfo: 2 sequences from an unspecified genome; no seqlengths
GRanges object with 2 ranges and 0 metadata columns:
seqnames ranges strand
<Rle> <IRanges> <Rle>
[1] chr2 92-111 +
[2] chr2 94-113 *
-------
seqinfo: 2 sequences from an unspecified genome; no seqlengths
GenomicRanges
+ promotersОбласть вокруг начала интервала
GRanges object with 2 ranges and 0 metadata columns:
seqnames ranges strand
<Rle> <IRanges> <Rle>
[1] chr2 102-113 +
[2] chr2 104-114 *
-------
seqinfo: 2 sequences from an unspecified genome; no seqlengths
GRanges object with 2 ranges and 0 metadata columns:
seqnames ranges strand
<Rle> <IRanges> <Rle>
[1] chr2 92-106 +
[2] chr2 94-108 *
-------
seqinfo: 2 sequences from an unspecified genome; no seqlengths
GenomicRanges
+ shiftСдвинуть границы интервалов
GRanges object with 2 ranges and 0 metadata columns:
seqnames ranges strand
<Rle> <IRanges> <Rle>
[1] chr2 102-113 +
[2] chr2 104-114 *
-------
seqinfo: 2 sequences from an unspecified genome; no seqlengths
GRanges object with 2 ranges and 0 metadata columns:
seqnames ranges strand
<Rle> <IRanges> <Rle>
[1] chr2 112-123 +
[2] chr2 114-124 *
-------
seqinfo: 2 sequences from an unspecified genome; no seqlengths
GenomicRanges
+ resizeИзменить размеры интервалов, начиная с start
GRanges object with 2 ranges and 0 metadata columns:
seqnames ranges strand
<Rle> <IRanges> <Rle>
[1] chr2 102-113 +
[2] chr2 104-114 *
-------
seqinfo: 2 sequences from an unspecified genome; no seqlengths
GRanges object with 2 ranges and 0 metadata columns:
seqnames ranges strand
<Rle> <IRanges> <Rle>
[1] chr2 102-201 +
[2] chr2 104-203 *
-------
seqinfo: 2 sequences from an unspecified genome; no seqlengths
gr1 <- GRanges(seqnames = c("chr1", "chr2"), strand = "*",
ranges = IRanges(start = c(2, 6), width = 3))
gr1
GRanges object with 2 ranges and 0 metadata columns:
seqnames ranges strand
<Rle> <IRanges> <Rle>
[1] chr1 2-4 *
[2] chr2 6-8 *
-------
seqinfo: 2 sequences from an unspecified genome; no seqlengths
gr2 <- GRanges(seqnames = c("chr1", "chr2"), strand = "*",
ranges = IRanges(start = c(1, 3), width = 3))
gr2
GRanges object with 2 ranges and 0 metadata columns:
seqnames ranges strand
<Rle> <IRanges> <Rle>
[1] chr1 1-3 *
[2] chr2 3-5 *
-------
seqinfo: 2 sequences from an unspecified genome; no seqlengths
Продемонстрировать результаты, привязанные к геномным координатам
отрисовать покрытие локуса чтениями
сравнить характеристики двух треков по высоте покрытия, количеству вариантов, …
посмотреть характеристики любого заданного локуса
отрисовать особенность генома (GC-состав, покрытие, генную разметку, …) полногеномно
…
выбираем локус, хромосому или несколько хромосом
выбираем, что хотим отрисовать (работает с GRanges объектами)
рисовать можно сверху или снизу хромосомы
karyoploteR
Выбираем две хромосомы
karyoploteR
Можно добавить опорные координаты
karyoploteR
Расположить хромосомы в линию
karyoploteR
В зависимости от выбранного типа графика (plot.type) необходимые треки можно рисовать сверху и/или снизу хромосомы
karyoploteR
покрытиеkaryoploteR
взаимодействияstarts <- sort(createRandomRegions(nregions = 25, length.sd = 8e6))
ends <- sort(createRandomRegions(nregions = 25, length.sd = 8e6))
kp <- plotKaryotype()
kpPlotRegions(kp, starts, r0=0, r1=0.5, col="#ff8d92")
kpPlotRegions(kp, ends, r0=0, r1=0.5, col="#8d9aff")
kpPlotLinks(kp, data=starts, data2=ends, col="#fac7ffaa", r0=0.5)
Gviz
Отдельно создаем необходимые треки
Отрисовываем в желательном типе и порядке
Работает с GRanges объектами
Большое количество референсных геномов
Gviz
Gviz
itrack
миниатюра хромосомы, где красным указан выбранный локус
gtrack
трек с детальной разметкой выбранного локуса
atrack
визуализация CpG островков
Gviz
Отрисовываем все треки через список
Gviz
Добавляем генную разметку
Gviz
Трек с данными (например, варианты)
lim <- c(26700000, 26750000)
coords <- sort(c(lim[1],
sample(seq(from = lim[1], to = lim[2]), 99),
lim[2]))
dat <- runif(100, min = -10, max = 10)
dtrack <- DataTrack(data = dat, start = coords[-length(coords)],
end = coords[-1], chromosome = chr, genome = gen,
name = "Uniform")
plotTracks(list(itrack, gtrack, atrack, grtrack, dtrack),
from = lim[1], to = lim[2])
Gviz
Варианты отображения - гистограмма
Gviz
Варианты отображения
Gviz
zoomУдобный способ приближать данные …
Gviz
zoom… вплоть до нуклеотидов
circlize
circlize
library(circlize)
cell_cycle = data.frame(phase = factor(c("G1", "S", "G2", "M"), levels = c("G1", "S", "G2", "M")),
hour = c(11, 8, 4, 1))
color = c("#66C2A5", "#FC8D62", "#8DA0CB", "#E78AC3")
circos.par(start.degree = 90)
circos.initialize(cell_cycle$phase, xlim = cbind(rep(0, 4), cell_cycle$hour))
circos.track(ylim = c(0, 1), panel.fun = function(x, y) {
circos.arrow(CELL_META$xlim[1], CELL_META$xlim[2],
arrow.head.width = CELL_META$yrange*0.8, arrow.head.length = cm_x(0.5),
col = color[CELL_META$sector.numeric.index])
circos.text(CELL_META$xcenter, CELL_META$ycenter, CELL_META$sector.index,
facing = "downward")
circos.axis(h = 1, major.at = seq(0, round(CELL_META$xlim[2])), minor.ticks = 1,
labels.cex = 0.6)
}, bg.border = NA, track.height = 0.3)
circlize