2011-10-27 23 views
4

我正在處理一個列表清單 - 我們稱之爲L - 在R中,子清單的所有長度均爲&,填充了NAs。理想情況下,我想刪除每個子列表中的NA元素,我提出的一個解決方案是L <- lapply(L, na.omit)似乎工作;然而,對於每個子列表,其行爲是這樣的,例如,如何正確地從嵌套列表中省略NAs?

[[1]] 
[1] "0"  "12345" "12346" "12347" "12348" "12349" "12340" "12341" "12342" NA  NA   NA  NA  NA  NA  

[16] NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  

成爲

[[1]] 
[1] "0"  "12345" "12346" "12347" "12348" "12349" "12340" "12341" "12342" 
attr(,"na.action") 
[1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 
attr(,"class") 
[1] "omit" 

我有點困惑,說實話 - 這是怎麼回事,具有額外attr()小號這在我的名單?有沒有解決方案不會將它們追加到列表中?我試過na.exclude,但它給出了相同的結果。有什麼我失蹤?在此先感謝:)

回答

8

沒有理由感到困惑......的?na.omit細節部分說:

如果「na.omit」消除的情況下,案件的行數形成 「」結果的'na.action''屬性,''omit''類。

嘗試子集化每個列表元素與is.na:使用

L <- lapply(L, function(x) x[!is.na(x)]) 
+0

D'哦!謝謝 - 我會試試看。 –

3

另一種解決方案高階函數

lapply(L, Filter, f = Negate(is.na))