我有两列包含数据。在比较这些列时,我得到了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))的“灵敏度”?
答案 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