r - 在不丢失 NULL 的情况下取消列出列表
问题描述
我有一个将字符向量作为输入并返回不一致结果的函数。如果输入中没有 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 非常大(数万个元素),上面的代码似乎相当慢。有更好的解决方案吗?
解决方案
NULL
长度为 0,所以我们可以使用它:
foo[lengths(foo) == 0] <- NA
unlist(foo, use.names = FALSE)
#[1] 1 2 NA
推荐阅读
- postgresql - 将 PostgreSQL 列转换为存储类型
- vba - 在我的 Do while 循环中遇到问题
- python - 不了解 Pandas 样式器如何用于导出到 excel(.format、.set_properties)
- javascript - 如何扩展文本区域?
- wcf - 带有 ssl 和客户端证书的 Wcf:请求 svc 成功 wcf 调用返回 403.16
- redis - Redis SET 命令不适用于除默认数据库之外的任何数据库
- python - 使用 OR 将 3D 布尔数组缩减为 2D
- python - TypeError: ("cannot do slice indexing on
使用这些索引器 [4] ", '发生在索引 1') - php - 如何使用一个文件从根文件夹和子文件夹中获取 php 文件
- javascript - 范围和嵌套函数