%在%vs==中,R中的NA比较语义
当我使用%在%vs==中,R中的NA比较语义,r,types,R,Types,当我使用=将一个数字与R中的NA进行比较时,这将产生NA > 1==NA [1] NA 但是,如果我在% > 1 %in% c(NA) [1] FALSE 这是怎么回事?%in%不是在幕后使用了=吗?关于比较运算符=,它处理NA如下: 缺失值(NA)和NaN值被认为是不可比的,甚至与它们本身不可比,因此涉及它们的比较总是会导致NA。比较字符串时,如果其中一个字符串在当前排序规则区域设置中无效,也会导致缺少值。(请参见?`=`) 通过?`%in%`我们了解到: 确切地说,在某种程度
=
将一个数字与R中的NA
进行比较时,这将产生NA
> 1==NA
[1] NA
但是,如果我在%
> 1 %in% c(NA)
[1] FALSE
这是怎么回事?
%in%
不是在幕后使用了=
吗?关于比较运算符=
,它处理NA
如下:
缺失值(NA)和NaN值被认为是不可比的,甚至与它们本身不可比,因此涉及它们的比较总是会导致NA。比较字符串时,如果其中一个字符串在当前排序规则区域设置中无效,也会导致缺少值。(请参见?`=`
)
通过?`%in%`
我们了解到:
确切地说,在某种程度上,什么与什么相匹配是一个定义问题。对于所有类型,NA与NA匹配,没有其他值。对于实值和复值,NaN值被视为匹配任何其他NaN值,但不匹配NA
%in%从不返回NA,这使得它在if条件下特别有用
这是因为(正如@akrun在评论中指出的那样)
%中的%为
目前定义为
“%in%”0
关于比较运算符==
,它处理NA
,如下所示:
缺失值(NA)和NaN值被认为是不可比的,甚至与它们本身不可比,因此涉及它们的比较总是会导致NA。比较字符串时,如果其中一个字符串在当前排序规则区域设置中无效,也会导致缺少值。(请参见?`=`
)
通过?`%in%`
我们了解到:
确切地说,在某种程度上,什么与什么相匹配是一个定义问题。对于所有类型,NA与NA匹配,没有其他值。对于实值和复值,NaN值被视为匹配任何其他NaN值,但不匹配NA
%in%从不返回NA,这使得它在if条件下特别有用
这是因为(正如@akrun在评论中指出的那样)
%
中的%为
目前定义为
“%in%”0
如果您检查功能,它正在执行match
即match(x,table,nomatch=0L)>0L
如果您检查功能,它正在执行match
即match(x,table,nomatch=0L)>0L