2017-08-15 71 views
0

NA比较语义当我R中使用==这会产生NA%,R中

> 1==NA 
[1] NA 

但是比较了多种以NA,如果我用%in%

> 1 %in% c(NA) 
[1] FALSE 

什么去这里? %in%是不是在幕后使用==

+0

如果检查功能 ,它是做'比赛即'匹配(x,表,不匹配= 0L)> 0L' – akrun

回答

3

关于比较操作==,它处理NA如下:

缺失值(NA)和NaN值被认为是不可比较的,甚至自己解决,所以他们参与的比较总是会导致NA。当字符串进行比较时,也会导致缺少值,而在当前整理语言环境中则有一个值无效。 (见?`==`

而且从?`%in%`我们学习:

究竟是什么比赛什么是在一定程度上定义的问题。对于所有类型,NA与NA匹配并且没有其他值。对于实数和复数值,NaN值被视为与任何其他NaN值匹配,但不匹配NA。

那%中永远不会返回NA使它在if条件下特别有用。

发生这种情况,因为(如@akrun也在评论中指出)

%in%是目前被定义为 "%in%" <- function(x, table) match(x, table, nomatch = 0) > 0