2013-02-18 147 views
48
  1. 为什么TRUE == "TRUE"被设定为R TRUE
  2. 是否有任何等价物中的R ===

更新:为什么TRUE ==“TRUE”在R中为TRUE?

这些都返回FALSE

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

唯一TRUE值是TRUE == "TRUE"

identical()一切检查的情况下正常工作。

第二次更新:

通过===操作我的意思是检查价值数据类型的变量的过程。在这种情况下,我假定==运营商将只比较值的变量,而不是他们数据类型为好。

+0

是''===是javascript运算符? [严格平等比较算法?](http://ecma262-5.com/ELS5_HTML.htm#Section_11.9.6) – agstudy 2013-02-18 08:47:49

+0

@agstudy我猜在许多C语言驱动的语法语言中,我们有这个算子的值和数据类型检查在同一时间。我不确定其他语言...... – Mahdi 2013-02-18 08:49:58

+1

TRUE == 1和TRUE == 1.0和TRUE == 1.0000000000000001(和0.99999999999999999)也是如此。一般情况下,所有接近1.0的值都是IEEE754的四舍五入。 – 2013-02-18 08:55:04

回答

53

根据帮助文件?`==`

如果这两个参数是不同类型的原子矢量,一种是强制为其他的类型,优先级分别为字符的(减小)顺序的,复杂的,数字,整数,逻辑和原始。

所以TRUE被胁迫"TRUE"(即as.character(TRUE)),因此平等。

操作者===的当量(即是两个物体相等,并且在同一类型的)将是功能identical

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

感谢您的回答,“相同”工作正常,但“TRUE ==”T“'或'TRUE ==”true“'仍然是'FALSE'。任何想法? – Mahdi 2013-02-18 08:36:36

+2

好吧,我必须编辑我的答案,因为我后面想到它:实际上'=='强制为一个通用类型,优先顺序是字符,复数,数字,整数,逻辑和原始。所以它实际上被强制为“真”而不是相反,这是我的错。 – plannapus 2013-02-18 08:38:49

+0

我认为现在是正确的。 – 2013-02-18 08:51:49

10

真假R.是保留字我不认为是eznme正确的(他的前编辑)时,他说,任何非零值是真实的,因为TRUE == "A"为FALSE。 (这将解释为什么TRUE == 1值为TRUE一直是正确的,但不能解释为TRUE == 7

通过plannapus给出的解释是取出描述的as.logical行为的背景下的产物,它是更接近“真理”,因为它是真由==运营商创建此结果文字隐含的强制。虽然TF最初给出的真假值,它们可以被重新分配到其他值或类型。

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

+0

前面的引用确实是'as.logical',因为我认为'=='强制为一个普通的类型,我只是假定了一个错误的优先顺序。请参阅我的编辑进行更正。 – plannapus 2013-02-18 08:41:41

+0

'因为TRUE ==“A”的计算结果为FALSE':因为它们是**不同的**值! – 2013-02-18 08:41:59

+0

但是TRUE和“TRUE”也是不同的值,...实际上它们甚至是不同的模式。 – 2013-02-18 08:49:05

3

除了

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完全相同

+2

?“如果”明确指出它的论据被强制逻辑。 – 2013-02-18 09:14:20

+0

所有非虚假的将被强制为真。数据类型宽度在这里并不重要,注意哪些原始值映射为真,哪些为假。 – 2013-02-18 09:15:07

+2

并非所有非FALSE都将被强制为TRUE。 NA会发出错误。 – 2013-02-18 09:21:08

相关问题