让我们说我有一个像这样的Rle,长度为10:
b = rle(c("H", "T", "T", "H", "H", "H", "H", "H", "T", "H"))
如何在不使用inverse.rle
的情况下获取此对象的长度?
length(inverse.rle(b))
# 10
我有一些代表染色体的稀疏Rles,它们可以有数亿的长度,所以我宁愿不使用逆。
akruns答案对我的数据不起作用:
> a
$ mydata
numeric-Rle of length 57442693 with 12471 runs
Lengths: 2709826 100 31062 100 ... 2 232 100 47
Values : 0 1 0 1 ... 1 0 1 0
> a$lengths
NULL
答案 0 :(得分:6)
由于rle
是list
对象,lengths
和values
作为list
的元素,我们可以提取lengths
和sum
sum(b$lengths)
#[1] 10
答案 1 :(得分:2)
关于您的修改:akrun的回答Rle
数据类型:
我不知道你在这里使用的是什么函数,但是如果它类似于Bioconductor Rle
S4类,那么解决方案就是
sum(s@lengths)
也就是说,您必须使用S4插槽名称lengths
,而不是嵌套名称lengths
。更一般地说,您可以通过检查找出哪种解决方案有效:
names(obj)
。slotNames(obj)
。答案 2 :(得分:2)
对于S4vectors
类Rle
,您需要使用方法runLength
,它没有访问者$length
。
在上面的示例中,这变为runLength(a[[1]])
。