Rプログラミングでは、&と&&の違いは何ですか?vs ||

コンプトロニウム

&&と||の部分を知っています チェーン内で実行するテストの数が最も少なく、チェーンの結果がどうなるかを知るのに十分な情報が得られるとすぐに発生するため、より効率的なコードを作成します。

  • &&がチェーン内でFALSEに達するとすぐに、評価を停止し、チェーン全体に対してFALSEを返します。
  • すぐに|| チェーン内でTRUEにヒットすると、評価が停止し、チェーンに対してTRUEが返されます。

しかし、私はギャレットGrolemundの中で読んで著書「...二重の事業者がどこでも適切でない&&と||は、それらが意味し、ベクトル化されていないことだけオペレータのそれぞれの側に単一の論理テストを扱うことができる...」缶誰かください。強調部分の意味を説明してください。

いくつかの簡単なテストを行い、&が2つの論理ベクトルの対応する要素間で要素ごとの比較を行っている間、&&は最初の要素のみを比較し、演算子がvecorizedされていないためTRUEを返しますか?上記の強調された部分はすべて意味ですか、それともそれ以上のものがありますか?

c(T, F, F, F, F) & c(T, T, F, T, F)
[1]  TRUE FALSE FALSE FALSE FALSE

c(T, F, F, F, F) && c(T, T, F, T, F)
[1] TRUE

c(F, F, F, F, F) && c(T, T, F, T, F)
[1] FALSE

anyを使用して、演算子のいずれかの側のベクトルを1つのブール値に折りたたみallます。

any(T, T, F, F, T) && all(F, F, T, T, T)
[1] FALSE

any(T, T, F, F, T) && any(F, F, T, T, T)
[1] TRUE
ダリオ

オペレーターの両側で1つの論理テストのみを処理できます

a <- c(T, F, F, F)
b <- c(T, F, F, F)
a && b

[1] TRUEを返します

最初の要素だけためaとはbテストされています!

編集:

「回転」ab、各&&テストの後に、次のことを考慮してください

a <- c(T, F, T, F)
b <- c(T, F, F, T)
for (i in seq_along(a)){
  cat(paste0("'a' is: ", paste0(a, collapse=", "), " and\n'b' is: ", paste0(b, collapse=", "),"\n"))
  print(paste0("'a && b' is: ", a && b))
  a <- c(a[2:length(a)], a[1])
  b <- c(b[2:length(b)], b[i])
}

私たちに与える:

'a' is: TRUE, FALSE, TRUE, FALSE and
'b' is: TRUE, FALSE, FALSE, TRUE
[1] "'a && b' is: TRUE"
'a' is: FALSE, TRUE, FALSE, TRUE and
'b' is: FALSE, FALSE, TRUE, TRUE
[1] "'a && b' is: FALSE"
'a' is: TRUE, FALSE, TRUE, FALSE and
'b' is: FALSE, TRUE, TRUE, FALSE
[1] "'a && b' is: FALSE"
'a' is: FALSE, TRUE, FALSE, TRUE and
'b' is: TRUE, TRUE, FALSE, TRUE
[1] "'a && b' is: FALSE"

さらに、、&&||式が明確になるとすぐ停止します。

FALSE & a_not_existing_object
TRUE | a_not_existing_object

戻り値:

Error: object 'a_not_existing_object' not found
Error: object 'a_not_existing_object' not found

だが:

FALSE && a_not_existing_object
TRUE || a_not_existing_object

戻り値:

[1] FALSE

[1]真

ので何もFALSE 何か(およびTRUE OR何かが)なりFALSETRUEそれぞれ

のこの最後の動作は&&||存在しない可能性のある要素の制御フローをチェックインする場合に特に役立ちます。

if (exists(a_not_existing_object) && a_not_existing_object > 42) {...}

このようにして、最初の式が評価された後に評価が停止FALSEし、a_not_existing_object > 42パーツは試行されません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ