为什么TRUE ==“TRUE”在R中为TRUE?

  1. 为什么TRUE == "TRUE"在R中为TRUE
  2. 在R中是否有任何等价的===

更新:

这些都返回FALSE

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

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

在检查identical()情况下,一切正常。

第二次更新:

通过===运算符我的意思是检查variables数据types的过程。 在这种情况下,我假设==运算符只会比较variables的 ,而不是它们的数据types

根据帮助文件?`==`

如果两个参数是不同types的primefaces向量,则强制转换为另一种types的primefaces向量,优先顺序是字符,复数,数字,整数,逻辑和原始顺序。

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

运算符=== (即两个对象相同且types相同)的等价物将具有identicalfunction:

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

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

Plannapus给出的解释是从描述as.logical行为的as.logical 。 它更接近于“真实”,因为它是由创build这个结果的==运算符对字符的TRUE隐式强制。 尽pipeTF最初被赋予了TRUE和FALSE的值,但是它们可以被重新分配给其他值或types。

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

此外

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。