測試isTRUE(all.equal(x, y))
和identical(x, y)
有什麼區別嗎?相同(x,y)和isTRUE(all.equal(x,y))之間的R有什麼區別?
幫助頁說:
不要在 '如果' 表現 - 無論是使用 'IsTrue運算(all.equal(....))' 或 使用 'all.equal' 直接'相同'如果適當的話。
但是,「如果合適」讓我有疑問。我如何確定兩者中的哪一個是合適的?
測試isTRUE(all.equal(x, y))
和identical(x, y)
有什麼區別嗎?相同(x,y)和isTRUE(all.equal(x,y))之間的R有什麼區別?
幫助頁說:
不要在 '如果' 表現 - 無論是使用 'IsTrue運算(all.equal(....))' 或 使用 'all.equal' 直接'相同'如果適當的話。
但是,「如果合適」讓我有疑問。我如何確定兩者中的哪一個是合適的?
all.equal
測試爲近乎平等,而identical
更準確(例如,它沒有容差的差異,它比較存儲類型)。從相同:
函數「all.equal」也是 有時用來測試平等這個 方式,而是意的東西 不同:它允許在數字結果小 差異。
而且一個原因,你會在包裝isTRUE
是all.equal
因爲all.equal
將報告差異,而不是簡單地返回FALSE
。
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
除了在數值公差和存儲模式比較的差異,不同於all.equal()
,identical
還測試相關聯的環境的平等。 R中的常規對象通常不具有關聯的環境 - 它們通常與function
和formula
(和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:邏輯表示,如果他們的環境應該忽略時比較關閉。
但由於它僅適用於比較閉包(即函數),所以在這種情況下它沒有區別 - 在比較公式或術語對象時也不會產生差異。
謝謝,'沒有容忍'是關鍵:'all.equal(8.0,9.0,tolerance = 1.0)' – mariotomo 2010-08-03 13:56:34
另一個例子是'same()'會說整數和長整數是不同的,即使它們有相同的值,而'all.equal()'會說他們是平等的。 – smci 2017-02-02 08:27:32