isTRUE(all.equal(x, y))
テストとの違いはありますidentical(x, y)
か?
ヘルプページには次のように書かれています。
「if」式で「all.equal」を直接使用しないでください。必要に応じて「isTRUE(all.equal(....))」または「identical」を使用してください。
しかし、その「適切な場合」には疑問が残ります。2つのうちどちらが適切かをどのように判断しますか?
isTRUE(all.equal(x, y))
テストとの違いはありますidentical(x, y)
か?
ヘルプページには次のように書かれています。
「if」式で「all.equal」を直接使用しないでください。必要に応じて「isTRUE(all.equal(....))」または「identical」を使用してください。
しかし、その「適切な場合」には疑問が残ります。2つのうちどちらが適切かをどのように判断しますか?
all.equal
ほぼ等しいかどうかをテストしますidentical
が、より正確です(たとえば、差異に対する許容度がなく、ストレージタイプを比較します)。同一から:
関数'all.equal'は、この方法で同等性をテストするために使用されることもありますが、別の目的で使用されていました。これにより、数値結果にわずかな違いが生じる可能性があります。
そして、あなたがラップall.equal
する理由の1つは、単にを返すのではなく、違いを報告isTRUE
するからです。all.equal
FALSE
では、 とは異なり、数値許容差とストレージ モードの比較の違いに加えてall.equal()
、identical
関連する環境の同等性もテストします。通常、R の通常のオブジェクトには環境が関連付けられていません。最も一般的にはfunction
and formula
(and terms
) オブジェクトに関連付けられています。しかし、説明のために、2 つの単純なオブジェクトに異なる (新しく作成された) 環境を与えます。
x <- 2; environment(x) <- new.env()
y <- 2; environment(y) <- new.env()
all.equal(x,y) ## TRUE
identical(x,y) ## FALSE
引数がありignore.environment
ます:
ignore.environment: クロージャーを比較するときに環境を無視する必要があるかどうかを示す論理。
しかし、これはクロージャー (つまり関数) を比較する場合にのみ適用されるため、この場合は違いがありません。また、式や用語オブジェクトを比較する場合も違いはありません。
identical
面倒です。例えば:
> identical(as.double(8), as.integer(8))
[1] FALSE
> all.equal(as.double(8), as.integer(8))
[1] TRUE
> as.double(8) == as.integer(8)
[1] TRUE