0

データを含む2つの列があります。これらの列を比較している間、私は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

問題が発生する理由を説明したこの質問への回答を読みましたが、次の理由で回答はあまり役に立ちませんでした。

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))の「感度」を下げる方法はありますか?

4

1 に答える 1

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
于 2013-02-22T15:20:47.603 に答える