2010-08-03 92 views

回答

20

all.equal測試爲近乎平等,而identical更準確(例如,它沒有容差的差異,它比較存儲類型)。從相同:

函數「all.equal」也是 有時用來測試平等這個 方式,而是意的東西 不同:它允許在數字結果小 差異。

而且一個原因,你會在包裝isTRUEall.equal因爲all.equal報告差異,而不是簡單地返回FALSE

+2

謝謝,'沒有容忍'是關鍵:'all.equal(8.0,9.0,tolerance = 1.0)' – mariotomo 2010-08-03 13:56:34

+0

另一個例子是'same()'會說整數和長整數是不同的,即使它們有相同的值,而'all.equal()'會說他們是平等的。 – smci 2017-02-02 08:27:32

12

identical更加激動。例如:

> identical(as.double(8), as.integer(8)) 
[1] FALSE 
> all.equal(as.double(8), as.integer(8)) 
[1] TRUE 
> as.double(8) == as.integer(8) 
[1] TRUE 
8

除了在數值公差和存儲模式比較的差異,不同於all.equal()identical還測試相關聯的環境的平等。 R中的常規對象通常不具有關聯的環境 - 它們通常與functionformula(和terms)對象關聯。但要說明這一點,我就舉兩個平凡的對象不同(新建)環境:

x <- 2; environment(x) <- new.env() 
y <- 2; environment(y) <- new.env() 
all.equal(x,y) ## TRUE 
identical(x,y) ## FALSE 

有一種說法ignore.environment

ignore.environment:邏輯表示,如果他們的環境應該忽略時比較關閉。

但由於它僅適用於比較閉包(即函數),所以在這種情況下它沒有區別 - 在比較公式或術語對象時也不會產生差異。

相關問題