2016-07-26 37 views
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 
+0

啊,有一個rle和一個Rle對象。進一步.... –

回答

6

由於rlelist物體lengthsvalueslist的元素,我們可以提取lengthssum

sum(b$lengths) 
#[1] 10 
2

關於你的編輯:akrun的回答仍然通常工作,你只需要稍微適應你Rle數據類型:

我不知道你正在使用在這裏,但萬一這就像Bioconductor的Rle S4類什麼什麼功能,該解決方案將

sum([email protected]) 

也就是說,代替嵌套的名稱lengths你必須使用S4插槽名稱lengths。更一般地說,您可以通過檢查找出哪個解決方案有效:

  1. 對象名稱通過names(obj)
  2. 或者,在S4對象的情況下,其插槽名稱爲:slotNames(obj)
2

對於S4vectorsRle您需要使用方法runLength,它沒有訪問$length

在我上面的例子中,這成爲runLength(a[[1]])

相關問題