r语言 - 为什么 NULL == 1 返回逻辑 (0) 而不是 FALSE?



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

identical(1, NULL)返回FALSE,这是正确的。

我知道==identical不能互换使用,但是NULL == 1返回logical(0)的背后是什么?

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

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

这可以给你一些令人难以置信的结果!

"0" == 0  ## TRUE
1L == 1.0 ## TRUE

因此,在?identical中,提到"=="并没有真正做人们认为它要做的事情。

identical没有胁迫。事实上,如果你只看?identical中的例子,你会看到(我稍微改变了它们(:

identical(1, NULL) ## FALSE -- don't try this with ==
identical(1, 1L)   ## FALSE, stored as different types (modes)

NULL是惊人的多功能(或模糊(。请参阅此处的详细说明。"=="中发生的事情是,NULL被强制numeric(0),因为mode(1)"numeric",而你实际上是在测试

numeric(0) == 1  ## NULL == 1
numeric(0) == c(1, 2)  ## NULL == c(1, 2)

现在的问题是,为什么结果logical(0)?R的回收规则(R介绍(不适用吗?为什么上面的代码没有转换为以下内容?

rep_len(numeric(0), 1) == 1  ## NA
rep_len(numeric(0), 2) == c(1, 2)  ## NA NA

好吧,在回收规则(R-lang(中,据说:

从 R 1.4.0 开始,任何涉及零长度向量的算术运算都会产生零长度结果。

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

最新更新