57
  1. 为什么TRUE == "TRUE"TRUER 中?
  2. R中是否有任何等价物===

更新:

这些都回来了FALSE

TRUE == "True"
TRUE == "true"
TRUE == "T"

唯一的TRUE值是TRUE == "TRUE"

如果检查identical()一切正常。

第二次更新:

===操作员是指检查变量的数据类型过程。在这种情况下,我假设操作员只会比较变量的,而不是它们的数据类型==

4

3 回答 3

61

根据帮助文件?`==`

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

所以TRUE被强制为"TRUE"(ie as.character(TRUE)),因此相等。

===其他语言中的运算符的等价物(即两个对象是否相等且类型相同)将是 function identical

identical(TRUE, "TRUE")
[1] FALSE
于 2013-02-18T08:31:14.353 回答
12

TRUE 和 FALSE 是 R 中的保留字。当他说任何非零值都是 TRUE 时,我认为 eznme 不正确(在他编辑之前),因为TRUE == "A"计算结果为 FALSE。(这在解释为什么TRUE == 1评估为 TRUE 时是正确的,但它不能解释结果TRUE == 7

plannapus 给出的解释脱离了描述as.logical. 它更接近“真相”,因为==创建此结果的是运算符对字符的 TRUE 隐式强制。尽管TF最初被赋予 TRUE 和 FALSE 的值,但它们可以重新分配给其他值或类型。

> TRUE == as.logical( c("TRUE", "T", "true", "True") )
[1] TRUE TRUE TRUE TRUE

>  TRUE == 7
[1] FALSE
> TRUE == as.logical(7)
[1] TRUE
>  TRUE == as.logical("A")
[1] NA

(我之前错误地写道,由 TRUE == "TRUE" 引起的强制是合乎逻辑的;它实际上是通过 as.character(TRUE) 返回 "TRUE"。)

于 2013-02-18T08:40:32.787 回答
3

此外

真 == “真”

这些也是正确的:

  • 真==1
  • 真==1.0
  • 真==1.0000000000000001
  • TRUE==0.99999999999999999 等,通常所有值都足够接近 1.0 以进行 IEEE754 舍入。

但更有趣的是if()检查:它检查non-false; 事实上这情节!:

if(4.0) plot(1) 

我认为唯一不会触发的值if()是 0、F、FALSE 和“FALSE”,它们似乎被定义为正好 0。

于 2013-02-18T09:06:10.190 回答