我可以在不使用逆函数的情况下获得 rle 对象的总长度吗?
Can I get the total length of an rle object without using inverse?
假设我有一个像这样的 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
由于 rle
是一个 list
对象,lengths
和 values
作为 list
的元素,我们可以提取 lengths
和 sum
sum(b$lengths)
#[1] 10
关于您的编辑:akrun 的回答 仍然 一般有效,您只需要稍微调整一下以适应您的 Rle
数据类型:
我不知道你在这里使用的是什么功能,但如果这是像 Bioconductor Rle
S4 class 这样的东西,解决方案是
sum(s@lengths)
也就是说,您必须使用 S4 插槽名称 lengths
而不是嵌套名称 lengths
。更一般地说,您可以通过检查找出哪种解决方案有效:
- 对象名称来自
names(obj)
。
- 或者,对于 S4 对象,其槽名称:
slotNames(obj)
。
对于 S4vectors
class Rle
你需要使用方法 runLength
,它没有访问器 $length
.
在我上面的示例中,这变成了 runLength(a[[1]])
。
假设我有一个像这样的 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
由于 rle
是一个 list
对象,lengths
和 values
作为 list
的元素,我们可以提取 lengths
和 sum
sum(b$lengths)
#[1] 10
关于您的编辑:akrun 的回答 仍然 一般有效,您只需要稍微调整一下以适应您的 Rle
数据类型:
我不知道你在这里使用的是什么功能,但如果这是像 Bioconductor Rle
S4 class 这样的东西,解决方案是
sum(s@lengths)
也就是说,您必须使用 S4 插槽名称 lengths
而不是嵌套名称 lengths
。更一般地说,您可以通过检查找出哪种解决方案有效:
- 对象名称来自
names(obj)
。 - 或者,对于 S4 对象,其槽名称:
slotNames(obj)
。
对于 S4vectors
class Rle
你需要使用方法 runLength
,它没有访问器 $length
.
在我上面的示例中,这变成了 runLength(a[[1]])
。