2017-08-23 4 views
1

私は、2つのベクトルがallとall.equalの両方を使って等しいことをテストしようとしていますが、それらは異なる結果をもたらします。R:all.equal vsすべて

> x = seq(0,1,by=0.2) 
> x 
[1] 0.0 0.2 0.4 0.6 0.8 1.0 
> y = c(0.0, 0.2, 0.4, 0.6, 0.8, 1.0) 
> all(x == y) 
[1] FALSE 
> all.equal(x, y) 
[1] TRUE 
+0

。 – coffeinjunky

+0

関連性があるかもしれません:https://stackoverflow.com/questions/9508518/why-are-these-numbers-not-equal – coffeinjunky

+1

'=='は完全な等価性をテストしますが、 'all.equal'は「近い」等価性をテストします浮動小数点エラーの場合 – alistaire

答えて

3

あなたが期待通りに浮動小数点数が動作しませんfirst circle of R hell、に落ちたようです。

不正行為のペアは、x [4] & y [4](上記のcoffeeinjunkyのコメントによると)です。密接にそれらを見てください:

> print(c(x[4], y[4])) 
[1] 0.6 0.6 
> print(c(x[4], y[4]), digits = 16) 
[1] 0.6000000000000001 0.6000000000000000 

all.equalは1.5E-8の周囲に、デフォルトの許容レベルを持って、このしきい値以下&違いは報告されていません。このため、all.equal(x, y)はTRUEを返し、all(x==y)はFALSEを返します。

この投稿は、より詳細に問題を説明します。それは `のx == y`利回り` [1] TRUE TRUE TRUE FALSE TRUE true`のように思えるNumeric comparison difficulty in R

関連する問題