为什么TRUE ==“TRUE”在R中为TRUE?
- 为什么
TRUE == "TRUE"
在R中为TRUE
? - 在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相同)的等价物将具有identical
function:
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隐式强制。 尽pipeT
和F
最初被赋予了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。