检测 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()
我正在计算一些存储在列表中的值,并且该列表被附加到一个已经存在的列表中,称为 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()