TRUE == "TRUE"
在R?TRUE
===
的等效词?更新
这些都归还FALSE
:
TRUE == "True"
TRUE == "true"
TRUE == "T"
唯一TRUE
值为TRUE == "TRUE"
。
如果使用identical()
进行核对,一切正常。
第二次更新:
通过===
运算符,我指的是检查变量的值和数据类型的过程。在这种情况下,我假设==
运算符只会比较变量的值,而不是它们的数据类型。
答案 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隐式强制。虽然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”。)
答案 2 :(得分:3)
除了
TRUE ==“TRUE”
这些也是如此:
但更有意思的是 if()
检查:它检查non-false
;事实上这个情节!:
if(4.0) plot(1)
我认为不会触发if()
的唯一值是0,F,FALSE和“FALSE”,它们似乎正好被定义为0.