当右侧是矢量时,%in%
可用于检查NA
s:
> 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
这是一个错误还是一个功能?这是在文档中描述的吗?
我们可以使用anyNA
anyNA(list(NA, 2))
如果list
的长度> 1的vector
s,那么使用recursive = TRUE
anyNA(list(c(1, 2), c(NA, 1)), recursive = TRUE)
#[1] TRUE
回答我的第二个问题:是的,文档中描述了这种现象(当然):
因素,原始向量和列表转换为字符向量[...]
因此,list(NA, 2)
被强迫给c("NA", "2")
。显然,NA
不在c("NA", "2")
。因此,应该使用anyNA
。
我个人带回家的消息:当右侧由列表组成时,尽量避免使用%in%
。