【发布时间】:2017-01-06 11:14:24
【问题描述】:
我有一个运行长度编码的向量,按顺序表示基因组上每个位置的某个值。作为一个玩具示例,假设我只有一条长度为 10 的染色体,那么我将有一个看起来像这样的向量
library(GenomicRanges)
set.seed(1)
toyData = Rle(sample(1:3,10,replace=TRUE))
我想将其强制转换为 Granges 对象。我能想到的最好的是
gr = GRanges('toyChr',IRanges(cumsum(c(0,runLength(toyData)[-nrun(toyData)])),
width=runLength(toyData)),
toyData = runValue(toyData))
这可行,但速度很慢。有没有更快的方法来构造相同的对象?
【问题讨论】:
-
您可以使用
start(toyData)-1来获取间隔的开始,但它不会提高速度。 -
@NicE 感谢您的提示,即使它不是更快,它也更清晰简洁。
-
start(toyData)-1>
-
@user1356855,您会遇到哪些典型的染色体长度?此外,在您的实际应用程序中,3 是否足够变化(例如,您可以拥有
sample(1:15,10^8,replace=TRUE))吗? -
@JosephWood 是的,与基因组数据一起存储的值通常是实数,所以 3 是不够的......但我几乎可以接受任何答案。最长的基因组:例如 247,249,719? Chr1 人类...
标签: r bioinformatics bioconductor run-length-encoding iranges