R 为什么NULL==1返回逻辑(0)而不是FALSE?

R 为什么NULL==1返回逻辑(0)而不是FALSE?,r,null,logical-operators,R,Null,Logical Operators,为什么NULL==1返回逻辑(0)而不是FALSE idential(1,NULL)返回正确的FALSE 我知道=和相同的不能互换使用,但是NULL==1返回逻辑(0)?当两个操作数没有相同的模式时,“==”(或任何其他逻辑运算符)后面有一个隐式类型强制。从?“==”: 如果两个参数是不同类型的原子向量,则一个强制为另一个的类型,优先顺序(递减)为“字符”、“复杂”、“数字”、“整数”、“逻辑”和“原始” 这会给你一些难以置信的结果 "0" == 0 ## TRUE 1L == 1.0 ##

为什么
NULL==1
返回
逻辑(0)
而不是
FALSE

idential(1,NULL)
返回正确的
FALSE


我知道
=
相同的
不能互换使用,但是
NULL==1
返回
逻辑(0)

当两个操作数没有相同的模式时,
“==”
(或任何其他逻辑运算符)后面有一个隐式类型强制。从
?“==”

如果两个参数是不同类型的原子向量,则一个强制为另一个的类型,优先顺序(递减)为“字符”、“复杂”、“数字”、“整数”、“逻辑”和“原始”

这会给你一些难以置信的结果

"0" == 0  ## TRUE
1L == 1.0 ## TRUE
因此,在《完全相同的》
中,有人提到,
“==”
并没有真正做人们认为它应该做的事情

idential
不执行强制。事实上,如果您只看一下
?idential
中的示例,您将看到(我对它们做了一点更改):

NULL
具有惊人的通用性(或模糊性)。看见在
“==”
中发生的情况是
NULL
被强制为
numeric(0)
,因为
模式(1)
“numeric”
,您实际上正在测试

numeric(0) == 1  ## NULL == 1
numeric(0) == c(1, 2)  ## NULL == c(1, 2)
现在的问题是,为什么结果
符合逻辑(0)
?R不适用吗?为什么上面的代码没有转换成下面的代码

rep_len(numeric(0), 1) == 1  ## NA
rep_len(numeric(0), 2) == c(1, 2)  ## NA NA
那么在,据说,

从R1.4.0开始,任何涉及零长度向量的算术运算都会产生零长度结果

哦,太好了;这里没有回收利用。所以我们只得到
logical(0)

,因为
length(NULL)
返回零。要测试
NULL
请使用
is.NULL
,如
is.NULL(1)
中所述。本部分的详细信息
rep_len(numeric(0), 1) == 1  ## NA
rep_len(numeric(0), 2) == c(1, 2)  ## NA NA