3 回答

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

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果要經(jīng)常使用此方法,可以將其創(chuàng)建為單獨(dú)的運(yùn)算符或覆蓋原始的> =函數(shù)(可能不是一個(gè)好主意):
# 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貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊
為了完整起見,我會(huì)指出,在某些情況下,你可以簡(jiǎn)單地舍入到幾個(gè)小數(shù)位(與之前發(fā)布的更好的解決方案相比,這是一種蹩腳的解決方案。)
round(0.58 - 0.08, 2) == 0.5
- 3 回答
- 0 關(guān)注
- 617 瀏覽
添加回答
舉報(bào)