2013-02-22 32 views
0

我有两列包含数据。在比较这些列时,我得到了FALSE这一行的返回值,这种难倒我。两个看起来相等的值在等于比较时给出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))的“敏感度”?

+6

'all.equal'有一个'tolerance'说法。增加这项工作吗? – 2013-02-22 15:15:03

+1

只是去显示:阅读帮助页面实际上是有用的:-) – 2013-02-22 16:39:42

回答

6

使用all.equal中的tolerance参数。

此工程在我的机器上:

x <- 0.0000001 
y <- 0.0000002 

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

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