ベクトル化された論理 パート2
CoddyのRジャーニー「基礎」セクションの一部 — レッスン 21/78。
ANDやORにベクトル化されたバージョンがあるのと同様に、NOT演算子もベクトルに対して要素ごとに動作します。論理値のベクトルに ! を適用すると、各要素が個別に反転されます。
passed <- c(TRUE, FALSE, TRUE, FALSE)
!passed # FALSE TRUE FALSE TRUE各TRUEはFALSEになり、各FALSEはTRUEになります。これは、特定の条件を満たさない要素を見つけたい場合に特に便利です:
temperatures <- c(18, 25, 30, 15, 22)
# 20度を超えない(NOT above 20)温度を見つける
!(temperatures > 20) # TRUE FALSE FALSE TRUE FALSEベクトル化された NOT を & および | と組み合わせて、複雑なフィルターを構築できます:
ages <- c(16, 25, 18, 30, 14)
has_permission <- c(TRUE, TRUE, FALSE, TRUE, TRUE)
# 参加可能条件: 年齢が18歳以上、または(18歳未満かつ許可がある場合)
can_participate <- ages >= 18 | (ages < 18 & has_permission)
# TRUE TRUE FALSE TRUE TRUE注意:ベクトルを扱うときは単一の &、|、! を使用し、単一の値を比較するときは二重の &&、|| を使用してください。
チャレンジ
簡単ベクトル化された NOT 演算子 (!) を & や | と組み合わせて使用し、複雑な要素ごとの論理条件を作成します。
以下のベクトルが提供されています:
scores <- c(45, 72, 88, 55, 91, 38, 67)
attended <- c(TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE)
submitted_homework <- c(TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)NOT 演算子を含むベクトル化された論理演算子を使用して、以下の論理ベクトルを作成してください:
- 60 以上ではない各スコアに対して
TRUEを格納する、failedという名前のベクトルを作成します。 attendedの反対(各値を反転させたもの)を格納する、absentという名前のベクトルを作成します。- 出席していない、または宿題を提出していない各生徒に対して
TRUEを格納する、at_riskという名前のベクトルを作成します。 - スコアが 60 以上かつ出席していない各生徒に対して
TRUEを格納する、passing_but_absentという名前のベクトルを作成します。 - (スコアが 50 未満) または (出席しておらず、かつ宿題を提出していない) 生徒に対して
TRUEを格納する、needs_supportという名前のベクトルを作成します。
print() 関数を使用して、failed、absent、at_risk、passing_but_absent、needs_support をこの通りの順番で表示してください。
チートシート
NOT 演算子 (!) は、ベクトルの各要素に対して個別に動作し、それぞれの論理値を反転させます:
passed <- c(TRUE, FALSE, TRUE, FALSE)
!passed # FALSE TRUE FALSE TRUE条件を満たさない要素を見つけるには、! を使用します:
temperatures <- c(18, 25, 30, 15, 22)
!(temperatures > 20) # TRUE FALSE FALSE TRUE FALSEベクトル化された NOT を & や | と組み合わせて、複雑なフィルタを作成できます:
ages <- c(16, 25, 18, 30, 14)
has_permission <- c(TRUE, TRUE, FALSE, TRUE, TRUE)
# 参加可能な条件: 年齢が 18 以上、または (18 未満かつ許可がある)
can_participate <- ages >= 18 | (ages < 18 & has_permission)
# TRUE TRUE FALSE TRUE TRUE注意:ベクトルには単一の &、|、! を使用し、単一の値には二重の &&、|| を使用してください。
自分で試してみよう
# 与えられたベクトル
scores <- c(45, 72, 88, 55, 91, 38, 67)
attended <- c(TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE)
submitted_homework <- c(TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)
# TODO: 以下にコードを記述してください
# 1. 'failed' を作成 - スコアが 60 以上ではない場合に TRUE
# 2. 'absent' を作成 - attended の逆
# 3. 'at_risk' を作成 - 出席していない、または宿題を提出していない
# 4. 'passing_but_absent' を作成 - スコアが 60 以上、かつ出席していない
# 5. 'needs_support' を作成 - (スコアが 50 未満) または (出席しておらず、かつ宿題を提出していない)
# 結果を出力
print(failed)
print(absent)
print(at_risk)
print(passing_but_absent)
print(needs_support)このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。