%,R中
问题描述:
NA比较语义当我R中使用==
这会产生NA
%,R中
> 1==NA
[1] NA
但是比较了多种以NA
,如果我用%in%
> 1 %in% c(NA)
[1] FALSE
什么去这里? %in%
是不是在幕后使用==
?
答
关于比较操作==
,它处理NA
如下:
缺失值(NA)和NaN值被认为是不可比较的,甚至自己解决,所以他们参与的比较总是会导致NA。当字符串进行比较时,也会导致缺少值,而在当前整理语言环境中则有一个值无效。 (见
?`==`
)
而且从?`%in%`
我们学习:
究竟是什么比赛什么是在一定程度上定义的问题。对于所有类型,NA与NA匹配并且没有其他值。对于实数和复数值,NaN值被视为与任何其他NaN值匹配,但不匹配NA。
那%中永远不会返回NA使它在if条件下特别有用。
发生这种情况,因为(如@akrun也在评论中指出)
%in%
是目前被定义为"%in%" <- function(x, table) match(x, table, nomatch = 0) > 0
如果检查功能 ,它是做'比赛即'匹配(x,表,不匹配= 0L)> 0L' – akrun