从列表列表中删除空列表

San*_*euw 3 r list

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

我正在尝试的代码是:

lapply(outputfile,function(x){
  if(outputfile != NA){
  test<-lapply(outputfile,unlist)
}})
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

列表列表如下:(随机数据的小例子)

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)))
Run Code Online (Sandbox Code Playgroud)

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

任何帮助表示赞赏

Aru*_*run 7

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

l[!is.na(l)]
Run Code Online (Sandbox Code Playgroud)

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

Filter(function(x) !is.na(x), l)
Run Code Online (Sandbox Code Playgroud)

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

Filter(Negate(is.na), l)
Run Code Online (Sandbox Code Playgroud)

  • 或`过滤器(否定(is.na),l)` (2认同)