对于平等的比较,两个看似相等的值给出了FALSE

时间:2013-02-22 15:12:51

标签: r comparison

我有两列包含数据。在比较这些列时,我得到了FALSE这一行,这让我很难过。

dat[82,"UG_accept_avg_total.x"]
## [1] 1.842105
dat[82,"UG_accept_avg_total.y"]
## [1] 1.842105
dat[82,"UG_accept_avg_total.x"]==dat[82,"UG_accept_avg_total.y"]
## [1] FALSE

我读了this question的答案,这解释了我的问题发生的原因,但答案对我没有多大帮助,因为:

all.equal(dat[82,"UG_accept_avg_total.x"],dat[82,"UG_accept_avg_total.y"])
## "Mean relative difference: 1.427714e-07"
isTRUE(all.equal(dat[82,"UG_accept_avg_total.x"],dat[82,"UG_accept_avg_total.y"]))
## [1] FALSE

我可以在小数点后删除一些数字,因为3可能已经足够了,但是检查我的数据集中的所有数据字段(超过250000)来执行此操作将是相当浪费的资源使用。有人有更好的建议吗?有没有办法降低isTRUE(all.equal(x,y))的“灵敏度”?

1 个答案:

答案 0 :(得分:6)

使用tolerance中的all.equal参数。

这适用于我的机器:

x <- 0.0000001
y <- 0.0000002

isTRUE(all.equal(x, y))
## [1] FALSE

isTRUE(all.equal(x, y, tolerance=10^-7))
## [1] TRUE