ベストアンサー1
短いものはベクトル化されており、次のようにベクトルを返すことができます。
((-2:2) >= 0) & ((-2:2) <= 0)
# [1] FALSE FALSE TRUE FALSE FALSE
長い形式はそうではないので、(4.3.0 以降) 長さ 1 の入力を指定する必要があります。(やった! 必要なチェックが少なくなりました。以下を参照してください。)
R 4.3.0 までは、長さが 1 を超える && 入力を与えてもエラーは発生しませんでしたが、代わりに各ベクトルの最初の要素のみを調べて左から右に評価されました。そのため、上記の例では次のようになります。
((-2:2) >= 0) && ((-2:2) <= 0)
# [1] FALSE
ヘルプ ページに記載されているように、これにより、長い形式は「プログラミング制御フローに適しており、通常は if 節で好まれます」。
したがって、ベクトルの長さが 1 であることが確実な場合にのみ長い形式を使用する必要があり、4.3.0 以降では、R はこれを強制します。
以前のバージョンを使用している場合、ベクトルの長さが 1 のみであることを絶対に確認する必要があります (長さ 1 のブール値のみを返す関数の場合など)。ベクトルの長さが 1 より大きい可能性がある場合は、短縮形を使用する必要があります。したがって、確信が持てない場合は、最初に確認するか、短縮形を使用してから と を使用してall
長any
さを 1 に短縮し、 などの制御フロー ステートメントで使用する必要がありますif
。
関数およびall
は、any
それぞれ、すべての比較またはいずれかの比較が真であるかどうかを確認するために、ベクトル化された比較の結果に対してよく使用されます。これらの関数の結果は長さが 1 であることが確実なので、if 節で使用するのに適していますが、ベクトル化された比較の結果は適していません。(ただし、これらの結果は で使用するのに適していますifelse
。)
最後の違いは、&&
と は||
必要な数だけ項を評価することです (これはしばしば短絡と呼ばれます)。たとえば、未定義の値 を使用した比較を次に示しますa
。短絡しなかった場合、 と は&
そう|
ではなく、エラーが発生します。
a
# Error: object 'a' not found
TRUE || a
# [1] TRUE
FALSE && a
# [1] FALSE
TRUE | a
# Error: object 'a' not found
FALSE & a
# Error: object 'a' not found
最後に、セクション8.2.17を参照してください。Rインフェルノ、タイトルは「and and andand」。