NA'lar iç içe geçmiş bir listeden nasıl düzgün biçimde çıkarılabilir?

I'm working with a list of lists - let's call it L - in R, where the sub-lists are all the same length & padded with NAs. Ideally, I'd like to remove just the NA elements from each sublist, and one solution I've come up with is L <- lapply(L, na.omit). It seems to almost work; however, for each sub-list, the behavior is such that, for example,

[[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    

olur

[[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"

Dürüst olmak gerekirse biraz şaşırdım - listemdeki ekstra attr() 'lerin nesi var? Onları listeye eklemeyecek bir çözüm var mı? na.exclude 'ı denedim, ancak aynı sonucu veriyor. Kaçırdığım bir şey mi var? Şimdiden teşekkürler : )

4

2 cevap

Şaşırmana gerek yok ... ? Na.omit 'ın Ayrıntılar bölümü:

‘na.omit’ vakaları kaldırırsa, vakaların satır sayıları   ‘" Na.action "’, "mit" ihmali "sınıfının sonucunun niteliği.

Her bir liste öğesini is.na ile alt ayarlamayı deneyin:

L <- lapply(L, function(x) x[!is.na(x)])
8
katma
D'oh! Teşekkürler - Denerim.
katma yazar a barking spider, kaynak

Daha yüksek dereceli fonksiyonlar kullanan başka bir çözüm

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