3 回答

TA貢獻1864條經驗 獲得超2個贊
我從來都不喜歡all.equal
這樣的事情。在我看來,寬容有時會以神秘的方式起作用。為什么不檢查大于公差小于0.05的東西
tol = 1e-5(a-b) >= (0.05-tol)
一般來說,沒有舍入和只有傳統的邏輯,我發現直接邏輯比all.equal更好
如果x == y
那么x-y == 0
。x-y
對于我使用的這種情況,也許不完全是0
abs(x-y) <= tol
無論如何你必須設置公差all.equal
,這比它更緊湊和簡單all.equal
。

TA貢獻1806條經驗 獲得超5個贊
如果要經常使用此方法,可以將其創建為單獨的運算符或覆蓋原始的> =函數(可能不是一個好主意):
# using a tolerance
epsilon <- 1e-10 # set this as a global setting
`%>=%` <- function(x, y) (x + epsilon > y)
# as a new operator with the original approach
`%>=%` <- function(x, y) (all.equal(x, y)==TRUE | (x > y))
# overwriting R's version (not advised)
`>=` <- function(x, y) (isTRUE(all.equal(x, y)) | (x > y))
> (a-b) >= 0.5
[1] TRUE
> c(1,3,5) >= 2:4
[1] FALSE FALSE TRUE

TA貢獻1874條經驗 獲得超12個贊
為了完整起見,我會指出,在某些情況下,你可以簡單地舍入到幾個小數位(與之前發布的更好的解決方案相比,這是一種蹩腳的解決方案。)
round(0.58 - 0.08, 2) == 0.5
- 3 回答
- 0 關注
- 650 瀏覽
添加回答
舉報