检测 R 中的空列表

detect empty lists in R

我正在计算一些存储在列表中的值,并且该列表被附加到一个已经存在的列表中,称为 results。在某些情况下计算returns TRUE。在那种情况下,我想从列表中删除 returned TRUE 的元素:

my_list
$`0`
[1] TRUE

$`1`
[1] TRUE


my_list = lapply(list(my_list), function(x){Filter(Negate(isTRUE), x)})
> my_list
[[1]]
named list()

此 return 一个空列表。现在我要检查:

问题是当我检查

length(my_list) >0
[1] TRUE

如何检测列表是否为空?

试试这个:

#Data
my_list <- list('0'=T,'1'=T)
my_list = lapply(list(my_list), function(x){Filter(Negate(isTRUE), x)})
#Code
lapply(my_list, function(x) length(x)>0)

输出:

lapply(my_list, function(x) length(x)>0)
[[1]]
[1] FALSE

我们可以使用 lengths 来获取每个 list 元素的逻辑输出

my_list[lengths(my_list) > 0]

“空”可能并不总是人们所期望的那样。 rlang is_empty 函数可能有帮助。

length(list()) > 0 给出 FALSE,

length(list(NA)) > 0 给出 TRUE,

然而 length(list(NULL)) > 0 给出 FALSE.

my_list <- list(NA,NULL,list(1,2), function(x){length(x)}, list(), NaN)
lapply(my_list, rlang::is_empty)

输出

[[1]]
[1] FALSE
[[2]]
[1] TRUE
[[3]]
[1] FALSE
[[4]]
[1] FALSE
[[5]]
[1] TRUE
[[6]]
[1] FALSE

也许 Filter 方法适合您

> Filter(length, my_list)
list()