2013-02-18 144 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

相關問題