如何检查列表是否包含“NA”?

问题描述 投票:1回答:2

当右侧是矢量时,%in%可用于检查NAs:

> NA %in% c(NA, 2)
[1] TRUE
> NA %in% c(1, 2)
[1] FALSE
> 1 %in% c(NA, 2)
[1] FALSE
> 1 %in% c(1, 2)
[1] TRUE

当右侧是列表时,%in%表现不同:

> NA %in% list(NA, 2)
[1] FALSE
> NA %in% list(1, 2)
[1] FALSE
> 1 %in% list(NA, 2)
[1] FALSE
> 1 %in% list(1, 2)
[1] TRUE

这是一个错误还是一个功能?这是在文档中描述的吗?

r na
2个回答
3
投票

我们可以使用anyNA

anyNA(list(NA, 2))

如果list的长度> 1的vectors,那么使用recursive = TRUE

anyNA(list(c(1, 2), c(NA, 1)), recursive = TRUE)
#[1] TRUE

1
投票

回答我的第二个问题:是的,文档中描述了这种现象(当然):

因素,原始向量和列表转换为字符向量[...]

因此,list(NA, 2)被强迫给c("NA", "2")。显然,NA不在c("NA", "2")。因此,应该使用anyNA

我个人带回家的消息:当右侧由列表组成时,尽量避免使用%in%

© www.soinside.com 2019 - 2024. All rights reserved.