15

誰かが私に許容パラメータを説明してもらえますall.equalか?

マニュアルには?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

ありがとうございました!

4

1 に答える 1

16

targetがより大きい場合はtolerance、をチェックしているようですrelative error <= tolerance。つまり、abs(current-target)/target <= tolerance次のようになります。

all.equal(target, current, tolerance)

例:

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

代わりに、targetがより小さい場合はtoleranceall.equalを使用しmean absolute differenceます。

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と等しい値(のと)をとから削除することだけです。次に、との平均絶対差として計算します。しかし、それがそうなるのか、それともその部分に依存するのかを決定すること。そして、ここでは条件がチェックされていません。どちらがであるかだけに依存します。targetcurrenttargetcurrentxytargetcurrentrelativeabsolutewhatxyxnmean(abs(target))

したがって、結論として、OPによって貼り付けられた部分(便宜上ここに貼り付けられています):

これ(つまり、平均絶対差)が許容値よりも小さいか、有限でない場合、絶対差が使用されます。それ以外の場合は、相対差が平均絶対差でスケーリングされます。

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

于 2013-03-11T09:11:10.083 に答える