3 回答
TA贡献1951条经验 获得超3个赞
我从来都不喜欢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贡献1868条经验 获得超4个赞
如果要经常使用此方法,可以将其创建为单独的运算符或覆盖原始的> =函数(可能不是一个好主意):
# 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贡献1798条经验 获得超3个赞
为了完整起见,我会指出,在某些情况下,你可以简单地舍入到几个小数位(与之前发布的更好的解决方案相比,这是一种蹩脚的解决方案。)
round(0.58 - 0.08, 2) == 0.5
- 3 回答
- 0 关注
- 496 浏览
添加回答
举报