45. 《Bioinformatics Data Skills》
2021-07-14 本文已影响0人
DataScience
今天完成IRanges包最后一部分的学习。
slice函数
我们之前简单模拟了基因组测序并计算了各个位点的覆盖度:
> library(IRanges)
> set.seed(1234)
> rngs <- IRanges(start = sample(seq_len(60), 20), width = 7)
> rngs_cov <- coverage(rngs)
通过rngs_cov > 3
只能看到每个run的深度是否大于3的逻辑值:
> rngs_cov > 3
logical-Rle of length 65 with 7 runs
Lengths: 8 2 28 2 1 3 21
Values : FALSE TRUE FALSE TRUE FALSE TRUE FALSE
如果我们关心哪些区域的深度大于3,可以使用slice
函数:
> min_cov3 <- slice(rngs_cov, lower = 3)
> min_cov3
Views on a 65-length Rle subject
views:
start end width
[1] 6 11 6 [3 3 3 4 4 3]
[2] 15 20 6 [3 3 3 3 3 3]
[3] 28 28 1 [3]
[4] 38 45 8 [3 4 4 3 4 4 4 3]
[5] 47 48 2 [3 3]
[6] 59 63 5 [3 3 3 3 3]
slice
的参数为Rle
对象(rngs_cov
)与深度的阈值(>3X),结果为views对象(范围与Rle
向量的结合),表明深度大于3的范围及各个位点深度。
可以提取views
对象底层的范围:
> ranges(min_cov3)
IRanges object with 6 ranges and 0 metadata columns:
start end width
<integer> <integer> <integer>
[1] 6 11 6
[2] 15 20 6
[3] 28 28 1
[4] 38 45 8
[5] 47 48 2
[6] 59 63 5
slice
函数非常重要,可以帮助我们确定高深度的区域,进而关注这些区域是否拥有重要的生物学特征。
Views
我们已经知道slice
函数会返回views
对象,这里进一步地了解一下views
。
views
拥有一系列的总结函数,包括viewMeans
, ViewMaxs
, 甚至可以自定义的viewApply
函数(通过help(viewMeans)
查看所有相关函数),通过这些函数对每个区域信息进行总结,例如:
> viewMeans(min_cov3) # 查看各个区域深度平均值
[1] 3.333333 3.000000 3.000000 3.625000 3.000000 3.000000
> viewMaxs(min_cov3) # 查看各个区域深度最大值
[1] 4 3 3 4 3 3
> viewApply(min_cov3, median) # 查看各个区域深度中位值
[1] 3 3 3 4 3 3
使用Views
还可以将基因组划分为小的窗口片段,这是因组分析常用的手段。例如我们将rngs_cov
涉及的基因组划分成多个窗口,每个窗口包括5个位点:
> length(rngs_cov)
[1] 65
> bwidth <- 5L
> end <- floor(length(rngs_cov)/bwidth) * bwidth
> windows <- IRanges(start = seq(1, end, bwidth), width = bwidth)
> head(windows)
IRanges object with 6 ranges and 0 metadata columns:
start end width
<integer> <integer> <integer>
[1] 1 5 5
[2] 6 10 5
[3] 11 15 5
[4] 16 20 5
[5] 21 25 5
[6] 26 30 5
这里涉及到一些数学计算,rngs_cov
包括65个位点,刚好划分为13个区域。通常会遇到最后一个区域元素不足5的情况,为了避免异常结果会忽略最后一个窗口的的元素(这是我们使用floor
函数的原因)。
使用Views
函数将序列深度信息映射到各个窗口上:
> cov_by_wnd <- Views(rngs_cov, windows)
> head(cov_by_wnd)
Views on a 65-length Rle subject
views:
start end width
[1] 1 5 5 [0 0 0 1 2]
[2] 6 10 5 [3 3 3 4 4]
[3] 11 15 5 [3 2 1 2 3]
[4] 16 20 5 [3 3 3 3 3]
[5] 21 25 5 [2 2 1 1 1]
[6] 26 30 5 [2 2 3 2 2]
计算各个窗口平均的read深度(可以根据需要使用任意的总结函数):
> viewMeans(cov_by_wnd)
[1] 0.6 3.4 2.2 3.0 1.4 2.2 1.6 2.8 3.6 2.4 0.6 1.8 2.4
至此,我们学完了IRange包的基本思想与用法,后面会继续学习GenomicRanges包,它的函数与用法与IRange包基本一致,但是会进一步考虑多条染色体与链信息。