3

假设我有一个这样的 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
4

3 回答 3

6

由于rle是一个list对象,其中lengthsvalues是 的元素list,我们可以提取lengthssum

sum(b$lengths)
#[1] 10
于 2016-07-26T08:47:32.190 回答
2

关于您的编辑:akrun 的答案通常仍然有效,您只需要稍微调整它以适应您的Rle数据类型:

我不知道您在这里使用什么功能,但如果这类似于 Bioconductor RleS4 类,解决方案是

sum(s@lengths)

也就是说,lengths您必须使用 S4 插槽名称而不是嵌套名称lengths。更一般地说,您可以通过检查找出哪种解决方案有效:

  1. 对象名称通过names(obj).
  2. 或者,对于 S4 对象,它的插槽名称:slotNames(obj).
于 2016-07-26T09:46:33.803 回答
2

对于您需要使用该方法的S4vectors类,它没有访问器。RlerunLength$length

在我上面的例子中,这变成了runLength(a[[1]]).

于 2016-07-26T09:46:48.927 回答