作为if语句条件的一部分,我尝试在R中比较两个数字:
(a-b) >= 0.5
在这种情况下,a = 0.58,b = 0.08... 但是(a-b) >= 0.5
是false。我知道使用==
进行精确数字比较的危险性,这似乎有关:
(a - b) == 0.5)
是false,而
all.equal((a - b), 0.5)
是true。
我唯一想到的解决方案是有两个条件:(a-b) > 0.5 | all.equal((a-b), 0.5)
。 这可以工作,但这真的是唯一的解决方案吗?我应该永远放弃=
比较运算符家族吗?
编辑以提高清晰度:我知道这是浮点问题。更根本地说,我的问题是:我该怎么办?由于>=
不能真正信任,因此在R中处理大于等于比较的最合理方法是什么?
(a-b) > 0.5 | all.equal((a-b), 0.5)
的解决方案在许多情况下是错误的,因此不能/不应该使用:a <- 4.005; b <- 4.002; a-b > 0.5 | all.equal(a-b, 0.5) # Error in a - b > 0.5 | all.equal(a - b, 0.5) : operations are possible only for numeric, logical or complex types
。原因是:all.equal
会产生逻辑或字符类型。因此,会出现 "逻辑 | 字符" 类型不兼容的问题。我将展示如何防止这种类型不兼容性。 - Erdogan CEVHER