4

我有一个列表列表,其中一些是NA例如empty lists。我想提取所有填充数据的列表并删除所有empty(NA).

我正在尝试的代码是:

lapply(outputfile,function(x){
  if(outputfile != NA){
  test<-lapply(outputfile,unlist)
}})

但这不起作用。

列表的列表是这样的:(随机数据的小例子)

list(NA, NA, NA, NA, NA, NA, list(c(5, 5, 5, 5, 5, 5, 5, 5, 5, 
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5)))

我只想提取其中包含 5s 的列表。前 6 个列表应被忽略,例如删除。

任何帮助表示赞赏

4

1 回答 1

10

因此,要在第一级删除NA,您可以is.na直接使用:

l[!is.na(l)]

或者,您也可以使用Filterwhich 尝试将评估函数的结果强制为逻辑并返回那些评估为 TRUE 的元素。你可以这样做,例如:

Filter(function(x) !is.na(x), l)

(或)等效地(正如@flodel 在评论下所写)

Filter(Negate(is.na), l)
于 2013-03-08T11:43:00.533 回答