从列表列表中删除空列表

时间:2013-03-08 11:26:36

标签: r list

我有一个列表列表,其中一些列表是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个列表,例如除去。

感谢任何帮助

1 个答案:

答案 0 :(得分:7)

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

l[!is.na(l)]

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

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

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

Filter(Negate(is.na), l)