亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

R中的數字比較難度

R中的數字比較難度

至尊寶的傳說 2019-12-02 08:04:34
R中的數字比較難度我試圖比較R中的兩個數字作為if語句條件的一部分:(a-b) >= 0.5在這個特定的例子中,a = 0.58和b = 0.08 ......但仍然(a-b) >= 0.5是假的。我知道使用==確切數字比較的危險,這似乎有關:(a - b) == 0.5) 是假的,而all.equal((a - b), 0.5) 是真的。我能想到的唯一解決方案是有兩個條件:(a-b) > 0.5 | all.equal((a-b), 0.5)。這有效,但這真的是唯一的解決方案嗎?我應該=永遠宣誓比較運營商的家庭嗎?為清晰起見編輯:我知道這是一個浮點問題。更重要的是,我要問的是:我該怎么做呢?什么是處理R中大于或等于比較的合理方法,因為>=它不能真正被信任?
查看完整描述

3 回答

?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

我從來都不喜歡all.equal這樣的事情。在我看來,寬容有時會以神秘的方式起作用。為什么不檢查大于公差小于0.05的東西

tol = 1e-5(a-b) >= (0.05-tol)

一般來說,沒有舍入和只有傳統的邏輯,我發現直接邏輯比all.equal更好

如果x == y那么x-y == 0x-y對于我使用的這種情況,也許不完全是0

abs(x-y) <= tol

無論如何你必須設置公差all.equal,這比它更緊湊和簡單all.equal



查看完整回答
反對 回復 2019-12-03
?
忽然笑

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



查看完整回答
反對 回復 2019-12-03
?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

為了完整起見,我會指出,在某些情況下,你可以簡單地舍入到幾個小數位(與之前發布的更好的解決方案相比,這是一種蹩腳的解決方案。)

round(0.58 - 0.08, 2) == 0.5


查看完整回答
反對 回復 2019-12-03
  • 3 回答
  • 0 關注
  • 650 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號