考虑
l1 <- list("a", NA, 1:3, NA)
l2 <- list("a", NULL, 1:3, NULL)
为什么Filter(Negate(is.na), l1)
不能正常工作,而Filter(Negate(is.null), l2)
却可以正常工作(它返回l2
的所有不是NULL
的元素)?
?Filter
的帮助文件说
...请注意,当前可能的NA值始终为false;将来可能会增加对NA处理的控制。
我仍然不太了解这种行为。
答案 0 :(得分:1)
is.na
返回列表中每个元素的向量;您想要anyNA
(或者也许如下定义的exactlyNA
):
l1 <- list("a", NA, 1:3, NA)
l2 <- list("a", NULL, 1:3, NULL)
Filter(Negate(is.na), l1)
#> [[1]]
#> [1] "a"
#>
#> [[2]]
#> [1] 1 2 3
#>
#> [[3]]
#> [1] NA
#>
#> [[4]]
#> NULL
Filter(Negate(anyNA), l1)
#> [[1]]
#> [1] "a"
#>
#> [[2]]
#> [1] 1 2 3
exactlyNA <- function(x) identical(x, NA)
Filter(Negate(exactlyNA), l1)
#> [[1]]
#> [1] "a"
#>
#> [[2]]
#> [1] 1 2 3
由reprex package(v0.2.1)于2018-11-13创建
您的第一个示例有效地尝试选择列表中的第1、3、4和5个元素。与NA
无关。