为什么TRUE ==" TRUE" R是真的吗?

时间:2013-02-18 08:20:08

标签: r boolean comparison boolean-logic

  1. 为什么TRUE == "TRUE"在R?
  2. 中是TRUE
  3. R中是否有===的等效词?
  4. 更新

    这些都归还FALSE

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

    唯一TRUE值为TRUE == "TRUE"

    如果使用identical()进行核对,一切正常。

    第二次更新:

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

3 个答案:

答案 0 :(得分:56)

根据帮助文件?`==`

  

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

所以TRUE被强制转移到"TRUE"(即as.character(TRUE)),因此是平等。

运算符===的等价物(即两个对象相等且类型相同)将是函数identical

identical(TRUE, "TRUE")
[1] FALSE

答案 1 :(得分:10)

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”。)

答案 2 :(得分:3)

除了

TRUE ==“TRUE”

这些也是如此:

  • TRUE == 1
  • TRUE == 1.0
  • TRUE == 1.0000000000000001
  • TRUE == 0.99999999999999999 等等,一般来说,所有接近1.0的值都要经过IEEE754四舍五入。

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

if(4.0) plot(1) 

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