【问题标题】:Unlist a list without losing NULL's [duplicate]在不丢失 NULL 的情况下取消列出列表 [重复]
【发布时间】:2020-03-23 11:43:33
【问题描述】:

我有一个将字符向量作为输入并返回不一致结果的函数。如果输入中没有 NA,它将返回一个“已翻译”值的命名向量。如果输入中有 NA,它将返回一个列表。与 NA 对应的列表元素将为 NULL,名称为 NA。

这是一个重新创建的列表:

foo <- list(a=1, b=2, c=NULL)
names(foo) <- c("a", "b", NA)

我希望想要拥有一个缺失值中带有 NA 的向量:

c(1, 2, NA)

然而,一个简单的unlist() 不起作用——NULL 元素消失了。我尝试了以下方法:

foo <- lapply(foo, function(x) if(is.null(x)) NA else x)
names(foo) <- NULL
unlist(foo)

这行得通。但是, foo 非常大(数万个元素),上面的代码似乎相当慢。有没有更好的解决方案?

【问题讨论】:

  • @rajah9:不,这个其他问题没有回答我的问题。
  • 我没有投票关闭;我只编辑了你的问题标题。
  • 啊,对不起,对了!

标签: r


【解决方案1】:

NULL 的长度为 0,所以我们可以使用它:

foo[lengths(foo) == 0] <- NA
unlist(foo, use.names = FALSE)
#[1]  1  2 NA

【讨论】:

    【解决方案2】:

    一个选项可能是:

    foo[sapply(foo, is.null)] <- NA
    unlist(foo, use.names = FALSE)
    
    [1]  1  2 NA
    

    【讨论】:

    • 是的,谢谢,这样好多了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 2018-02-07
    相关资源
    最近更新 更多