【问题标题】:detect empty lists in R检测 R 中的空列表
【发布时间】:2021-04-17 11:06:06
【问题描述】:

我正在计算一些存储在列表中的值,并将列表附加到一个已经存在的列表中,称为results。在某些情况下,计算返回TRUE。在这种情况下,我想从列表中删除返回 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()

这将返回一个空列表。现在我想检查一下:

  • 如果列表为空 - 什么也不做
  • 如果列表不为空,则将其附加到结果中

问题是当我检查时

length(my_list) >0
[1] TRUE

如何检测列表是否为空?

【问题讨论】:

  • 在这种情况下,预期的输出是什么。你需要my_list[lengths(my_list) > 0]

标签: r list string-length


【解决方案1】:

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

my_list[lengths(my_list) > 0]

【讨论】:

    【解决方案2】:

    试试这个:

    #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
    

    【讨论】:

      【解决方案3】:

      也许Filter 方法对你有用

      > Filter(length, my_list)
      list()
      

      【讨论】:

        【解决方案4】:

        “空”可能并不总是人们所期望的。 rlang is_empty 功能可能会有所帮助。

        length(list()) &gt; 0FALSE

        length(list(NA)) &gt; 0TRUE

        然而length(list(NULL)) &gt; 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-25
          • 1970-01-01
          相关资源
          最近更新 更多