- 为什么
TRUE == "TRUE"
在TRUE
R 中? - R中是否有任何等价物
===
?
更新:
这些都回来了FALSE
:
TRUE == "True"
TRUE == "true"
TRUE == "T"
唯一的TRUE
值是TRUE == "TRUE"
。
如果检查identical()
一切正常。
第二次更新:
===
操作员是指检查变量的值和数据类型的过程。在这种情况下,我假设操作员只会比较变量的值,而不是它们的数据类型。==
TRUE == "TRUE"
在TRUE
R 中?===
?更新:
这些都回来了FALSE
:
TRUE == "True"
TRUE == "true"
TRUE == "T"
唯一的TRUE
值是TRUE == "TRUE"
。
如果检查identical()
一切正常。
第二次更新:
===
操作员是指检查变量的值和数据类型的过程。在这种情况下,我假设操作员只会比较变量的值,而不是它们的数据类型。==
根据帮助文件?`==`
:
如果这两个参数是不同类型的原子向量,则将一个强制转换为另一个的类型,优先级(递减)顺序为字符、复杂、数字、整数、逻辑和原始。
所以TRUE
被强制为"TRUE"
(ie as.character(TRUE)
),因此相等。
===
其他语言中的运算符的等价物(即两个对象是否相等且类型相同)将是 function identical
:
identical(TRUE, "TRUE")
[1] FALSE
TRUE 和 FALSE 是 R 中的保留字。当他说任何非零值都是 TRUE 时,我认为 eznme 不正确(在他编辑之前),因为TRUE == "A"
计算结果为 FALSE。(这在解释为什么TRUE == 1
评估为 TRUE 时是正确的,但它不能解释结果TRUE == 7
plannapus 给出的解释脱离了描述as.logical
. 它更接近“真相”,因为==
创建此结果的是运算符对字符的 TRUE 隐式强制。尽管T
和F
最初被赋予 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"。)
此外
真 == “真”
这些也是正确的:
但更有趣的是if()
检查:它检查non-false
; 事实上这情节!:
if(4.0) plot(1)
我认为唯一不会触发的值if()
是 0、F、FALSE 和“FALSE”,它们似乎被定义为正好 0。