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

时间:2018-09-10 15:25:05

标签: r na

当右侧为向量时,%in%可用于检查NA

> 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

这是错误还是功能?文档中对此有描述吗?

2 个答案:

答案 0 :(得分:2)

我们可以使用anyNA

anyNA(list(NA, 2))

如果list的{​​{1}}长度大于1,则使用vector

recursive = TRUE

答案 1 :(得分:1)

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

  

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

因此,list(NA, 2)被强制为c("NA", "2")。显然,NA不在c("NA", "2")中。因此,应使用anyNA

我的个人带回家的信息:当右侧包含列表时,请尽量避免使用%in%