[解決済み】ブール演算子 && と || について
質問
によると
R言語定義
とは異なります。
&
と
&&
(対応する
|
と
||
) は、前者がベクトル化されているのに対し、後者はベクトル化されていない。
によると ヘルプテキスト この違いは、「"And" と "AndAlso" (対応する "Or" と "OrElse" )の違いに似ていると思うのですが...」。 意味は 必要がなければすべての評価を行わないこと(例:Aが真であればAまたはBまたはCは常に真なので、Aが真であれば評価を停止する)
どなたか、ここに光を当てていただけませんか? また、RにAndAlsoとOrElseはあるのでしょうか?
どのように解決するのですか?
短いものはベクトル化されているので、このようにベクトルを返すことができます。
((-2:2) >= 0) & ((-2:2) <= 0)
# [1] FALSE FALSE TRUE FALSE FALSE
長い方の形式は、各ベクトルの最初の要素だけを調べて左から右に評価するので、上記のようになります。
((-2:2) >= 0) && ((-2:2) <= 0)
# [1] FALSE
ヘルプにあるように、この長い形式はプログラミングの制御フローに適しており、if節では一般的に好まれます。
ですから、長い形式を使うのは、ベクトルの長さが1であることが確実な場合だけにしてください。
にする必要があります。
絶対に
例えば、長さ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インフェルノ というタイトルがつけられています。
関連
-
[解決済み】「次のオブジェクトは 'package:xxx' からマスクされています」とはどういう意味ですか?
-
[解決済み】Rのメモリ管理/サイズn Mbのベクトルを割り当てられない
-
[解決済み】「Error in stripchart.default(x1, ...) : invalid plotting method」エラーを回避する方法は?
-
[解決済み】R 置換する項目数が置換長の倍数でない/しかし結果は正しい
-
[解決済み] JavaScriptで文字列をbooleanに変換するにはどうしたらいいですか?
-
[解決済み] グループ化関数(tapply、by、aggregate)と*applyファミリ
-
[解決済み] Rの代入演算子"="と"<-"の違いは何ですか?
-
[解決済み】Bashの簡単な論理演算子
-
[解決済み】||と!||の演算子で、あらゆる論理式が可能か?
-
[解決済み】DOSバッチでの論理演算子("and"、"or")について
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】'builtin'型のオブジェクトはsubsetableではない【重複
-
[解決済み】エラー。Rの次元数が正しくない
-
[解決済み】scale_color_manual()が動作しない件
-
[解決済み】reshape2 meltの警告メッセージ
-
[解決済み】データのマージ - fix.by(by.x, x)のエラー)
-
[解決済み】エラー - replacement has [x] rows, data has [y].
-
[解決済み】Rで結果の行数がベクトル長(arg 2)の倍数でない件
-
[解決済み] テスト
-
[解決済み】dplyr: "Error in n(): 関数は直接呼ばれるべきではありません"
-
[解決済み】Rで「中断されたプロミスの評価を再開する」という警告を回避する