2013-03-11 11 views
10

許容値のパラメータall.equalを教えてもらえますか?all.equal()のtoleranceパラメータはどのように機能しますか?

マニュアルは?all.equalを言う:

tolerance:許容値よりも小さい数値≥0の違いは とはみなされません。

scale = NULL(デフォルト)の数値比較は、最初に によって実行され、2つの数値ベクトルの平均絶対差を計算します。 これが公差より小さいか有限でない場合、絶対差は 、それ以外の場合は絶対差で縮尺された相対差は 差です。

例:

all.equal(0.3, 0.26, tolerance=0.1) 

戻りMean relative difference: 0.1333333

なぜここで返さ平均の相対的な違いはありますか? 2つの数値ベクトルの平均絶対差が許容誤差よりも小さいのではないか?

0.3 - 0.26 = 0.04 < 0.1 

ありがとうございます!

答えて

11

targettoleranceより大きい場合は、relative error <= toleranceを確認しているようです。

all.equal(target, current, tolerance) 

EXの場合:targettoleranceよりも小さい場合

all.equal(3, 6, tolerance = 1) 
# TRUE --> abs(6-3)/3 <= 1 

は代わりに、all.equalmean absolute differenceを使用することはabs(current-target)/target <= toleranceで、あります。

all.equal(0.01, 4, tolerance = 0.01) 
# [1] "Mean absolute difference: 3.99" 

all.equal(0.01, 4, tolerance = 0.00999) 
# [1] "Mean relative difference: 399" 

all.equal(4, 0.01, tolerance = 0.01) 
# [1] "Mean relative difference: 0.9975" 

しかし、これはないどのドキュメントの状態です。これが起こっている理由をさらに検索するには、のはall.equal.numericから関連するスニペットを見てみましょう:

# take the example: all.equal(target=0.01, current=4, tolerance=0.01) 
cplx <- is.complex(target) # FALSE 
out <- is.na(target) # FALSE 
out <- out | target == current # FALSE 

target <- target[!out] # = target (0.01) 
current <- current[!out] # = current (4) 

xy <- mean((if(cplx) Mod else abs)(target - current)) # else part is run = 3.99 

# scale is by default NULL 
what <- if (is.null(scale)) { 
    xn <- mean(abs(target)) # 0.01 
    if (is.finite(xn) && xn > tolerance) { # No, xn = tolerance 
     xy <- xy/xn 
     "relative" 
    } 
    else "absolute" # this is computed for this example 
} 
else { 
    xy <- xy/scale 
    "scaled" 
} 

それは上記のコードでチェックされているすべての(OPから例えば必要な部分だけを示す)である:には、すべてのNAを削除し、targetおよびcurrent)の値をtargetおよびcurrentから削除します。次に、targetcurrentの平均絶対差としてxyを計算します。しかし、それがrelativeabsoluteになるかどうかは、部品番号whatによって決まります。そしてここにはxyは条件がありません。これはxnにのみ、mean(abs(target))です。このは(意味、は絶対差を意味する)、絶対、有限の許容値よりも小さいかそうでない場合

:だから、結論で、一部はOP(便宜上ここで貼り付け)で貼り付け

差異が使用され、そうでなければ絶対差の絶対値によって相対的差異が尺度化される。

は間違っている/誤解を招くようです。

+0

+1ほぼ同じことを投稿しようとしていました。 – juba

+0

これは、ドキュメントが正しくないことを意味しますか、ヘルプファイルを間違って読んでいますか? – Roland

+1

@Roland、 'relative'または' absolute'の違いが計算されるかどうかは、少なくともコードからの 'target'に依存するようです。私が間違っているなら、私を訂正してください。私はドキュメントが誤解を招くと思います。私はより明確なコードを追加してさらに明確にします。 – Arun

関連する問題