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