我有一个函数,它接受字符向量作为输入并返回不一致的结果。如果输入中没有 NA,它将返回“翻译”值的命名向量。如果输入中有 NA,它将返回一个列表。与 NA 对应的列表元素将为 NULL,名称为 NA。
\n\n这是重新创建的列表:
\n\nfoo <- list(a=1, b=2, c=NULL)\nnames(foo) <- c("a", "b", NA)\nRun Code Online (Sandbox Code Playgroud)\n\n我想要的是一个缺失值中包含 NA 的向量:
\n\nc(1, 2, NA)\nRun Code Online (Sandbox Code Playgroud)\n\n然而,简单的unlist()\xe2\x80\x93 不起作用,NULL 元素消失。我尝试了以下方法:
foo <- lapply(foo, function(x) if(is.null(x)) NA else x)\nnames(foo) <- NULL\nunlist(foo)\nRun Code Online (Sandbox Code Playgroud)\n\n这有效。然而, foo 相当大(数万个元素),并且上面的代码似乎相当慢。有更好的解决方案吗?
\nNULL长度为 0,所以我们可以使用它:
foo[lengths(foo) == 0] <- NA
unlist(foo, use.names = FALSE)
#[1] 1 2 NA
Run Code Online (Sandbox Code Playgroud)
一种选择可能是:
foo[sapply(foo, is.null)] <- NA
unlist(foo, use.names = FALSE)
[1] 1 2 NA
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1649 次 |
| 最近记录: |