target
がtolerance
より大きい場合は、relative error <= tolerance
を確認しているようです。
all.equal(target, current, tolerance)
EXの場合:target
がtolerance
よりも小さい場合
all.equal(3, 6, tolerance = 1)
# TRUE --> abs(6-3)/3 <= 1
は代わりに、all.equal
はmean 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
から削除します。次に、target
とcurrent
の平均絶対差としてxy
を計算します。しかし、それがrelative
かabsolute
になるかどうかは、部品番号what
によって決まります。そしてここにはxy
は条件がありません。これはのxn
にのみ、mean(abs(target))
です。このは(意味、は絶対差を意味する)、絶対、有限の許容値よりも小さいかそうでない場合
:だから、結論で、一部はOP(便宜上ここで貼り付け)で貼り付け
差異が使用され、そうでなければ絶対差の絶対値によって相対的差異が尺度化される。
は間違っている/誤解を招くようです。
+1ほぼ同じことを投稿しようとしていました。 – juba
これは、ドキュメントが正しくないことを意味しますか、ヘルプファイルを間違って読んでいますか? – Roland
@Roland、 'relative'または' absolute'の違いが計算されるかどうかは、少なくともコードからの 'target'に依存するようです。私が間違っているなら、私を訂正してください。私はドキュメントが誤解を招くと思います。私はより明確なコードを追加してさらに明確にします。 – Arun