为什么TRUE ==“TRUE”在R中为TRUE?
- 为什么
TRUE == "TRUE"
被设定为RTRUE
? - 是否有任何等价物中的R
===
?
这些都返回FALSE
:
TRUE == "True"
TRUE == "true"
TRUE == "T"
唯一TRUE
值是TRUE == "TRUE"
。
与identical()
一切检查的情况下正常工作。
第二次更新:
通过===
操作我的意思是检查价值和数据类型的变量的过程。在这种情况下,我假定==
运营商将只比较值的变量,而不是他们数据类型为好。
根据帮助文件?`==`
:
如果这两个参数是不同类型的原子矢量,一种是强制为其他的类型,优先级分别为字符的(减小)顺序的,复杂的,数字,整数,逻辑和原始。
所以TRUE
被胁迫"TRUE"
(即as.character(TRUE)
),因此平等。
操作者===
的当量(即是两个物体相等,并且在同一类型的)将是功能identical
:
identical(TRUE, "TRUE")
[1] FALSE
真假R.是保留字我不认为是eznme正确的(他的前编辑)时,他说,任何非零值是真实的,因为TRUE == "A"
为FALSE。 (这将解释为什么TRUE == 1
值为TRUE一直是正确的,但不能解释为TRUE == 7
通过plannapus给出的解释是取出描述的as.logical
行为的背景下的产物,它是更接近“真理”,因为它是真由==
运营商创建此结果文字隐含的强制。虽然T
和F
最初给出的真假值,它们可以被重新分配到其他值或类型。
> 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”为逻辑;它实际上是通过返回“TRUE”的as.character(TRUE)。)
前面的引用确实是'as.logical',因为我认为'=='强制为一个普通的类型,我只是假定了一个错误的优先顺序。请参阅我的编辑进行更正。 – plannapus 2013-02-18 08:41:41
'因为TRUE ==“A”的计算结果为FALSE':因为它们是**不同的**值! – 2013-02-18 08:41:59
但是TRUE和“TRUE”也是不同的值,...实际上它们甚至是不同的模式。 – 2013-02-18 08:49:05
除了
TRUE == “TRUE”
这些也是正确的:
- TRUE == 1
- TRUE == 1.0
- TRUE == 1.0000000000000001
- TRUE == 0.99999999999999999 等等,一般来说所有的值也都够接近到1.0为IEEE754-四舍五入到它。
但更重要的是interesing是什么if()
检查:它检查non-false
;其实这个地块!:
if(4.0) plot(1)
我认为不唯一的值触发if()
是0,F,FALSE和“FALSE”他们似乎定义为0完全相同
?“如果”明确指出它的论据被强制逻辑。 – 2013-02-18 09:14:20
所有非虚假的将被强制为真。数据类型宽度在这里并不重要,注意哪些原始值映射为真,哪些为假。 – 2013-02-18 09:15:07
并非所有非FALSE都将被强制为TRUE。 NA会发出错误。 – 2013-02-18 09:21:08
是''===是javascript运算符? [严格平等比较算法?](http://ecma262-5.com/ELS5_HTML.htm#Section_11.9.6) – agstudy 2013-02-18 08:47:49
@agstudy我猜在许多C语言驱动的语法语言中,我们有这个算子的值和数据类型检查在同一时间。我不确定其他语言...... – Mahdi 2013-02-18 08:49:58
TRUE == 1和TRUE == 1.0和TRUE == 1.0000000000000001(和0.99999999999999999)也是如此。一般情况下,所有接近1.0的值都是IEEE754的四舍五入。 – 2013-02-18 08:55:04