Hoe NA's van een geneste lijst correct weglaten?

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    

wordt

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

Ik ben een beetje verbijsterd, om eerlijk te zijn - hoe staat het met de extra attr() en dergelijke in mijn lijst? Is er een oplossing die ze niet aan de lijst zal toevoegen? Ik heb na.exclude geprobeerd, maar het geeft hetzelfde resultaat. Is er iets dat ik mis? Bij voorbaat dank : )

4

2 antwoord

Geen reden om verbijsterd te zijn ... het gedeelte Details van ? Na.omit zegt:

Als 'na.omit' cases verwijdert, vormen de rijnummers van de cases de   '"Na.action"' attribuut van het resultaat, van klasse '"weglaten"'.

Probeer elk lijstelement te subseten met is.na :

L <- lapply(L, function(x) x[!is.na(x)])
8
toegevoegd
D'oh! Bedankt - ik zal het uitproberen.
toegevoegd de auteur a barking spider, de bron

Een andere oplossing met behulp van hogere orde functies

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