我正在使用列表列表 - 我们称之为L
- 在R中,其中子列表的长度和长度都相同。用NA填充。理想情况下,我只想从每个子列表中删除NA元素,我提出的一个解决方案是L <- lapply(L, na.omit)
。它似乎几乎工作;但是,对于每个子列表,行为都是这样的,例如,
[[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
,但它给出了相同的结果。有什么我想念的吗?在此先感谢:)
答案 0 :(得分:8)
没有理由感到困惑...... ?na.omit
的详细信息部分说:
如果'na.omit'删除了案例,则案例的行号构成 '“na.action”'结果的属性,类'“省略”'。
尝试使用is.na
对每个列表元素进行子集化:
L <- lapply(L, function(x) x[!is.na(x)])
答案 1 :(得分:3)
使用更高阶函数的另一种解决方案
lapply(L, Filter, f = Negate(is.na))