Menu
Coddy logo textTech

%in% 演算子

CoddyのRジャーニー「基礎」セクションの一部 — レッスン 70/78。

ベクトル内に値が存在するかどうかを確認する必要がある場合があります。%in% 演算子は、要素が含まれているかどうかをテストするための簡潔な方法を提供し、一致する各要素に対して TRUE を、そうでない場合は FALSE を返します。

基本的な構文は、左側の値が右側のベクトル内に存在するかどうかを確認します:

fruits <- c("apple", "banana", "cherry")
print("banana" %in% fruits)

出力:

[1] TRUE

複数の値を一度にチェックすることもできます。この演算子は、テストされる各値に対して1つの結果を持つ論理ベクトルを返します。

fruits <- c("apple", "banana", "cherry")
check <- c("banana", "grape", "apple")
print(check %in% fruits)

出力:

[1]  TRUE FALSE  TRUE

これにより、%in% はフィルタリングに最適になります。論理インデックス作成と組み合わせることで、特定のセットに属する要素を抽出できます:

numbers <- c(1, 5, 3, 8, 2, 9)
allowed <- c(1, 2, 3)
print(numbers[numbers %in% allowed])

出力:

[1] 1 3 2

%in% 演算子は、ユーザー入力の検証や、あらかじめ定義された許容値のリストに基づいてデータをフィルタリングする場合に特に便利です。

challenge icon

チャレンジ

簡単

3行の入力が与えられます:

  1. 在庫にあるアイテムのカンマ区切りリスト(例:apple,banana,milk,bread,eggs,cheese
  2. ショッピングリストにあるアイテムのカンマ区切りリスト(例:milk,butter,eggs,juice
  3. セール対象のアイテムのカンマ区切りリスト(例:bread,juice,yogurt

%in% 演算子を使用して、以下の処理を行ってください:

  1. 各カンマ区切りの入力から文字ベクトルを作成します
  2. ショッピングリストのアイテムのうち、すでに在庫にあるものを確認し、その論理ベクトルの結果を表示します
  3. 在庫にないショッピングリストのアイテム(購入が必要なアイテム)をフィルタリングして表示します
  4. 購入が必要なアイテムのうち、セール対象でもあるものをフィルタリングして表示します

例えば、入力が以下の場合:

apple,banana,milk,bread,eggs
milk,butter,eggs,juice,apple
bread,juice,yogurt,butter

出力は以下のようになります:

[1]  TRUE FALSE  TRUE FALSE  TRUE
[1] "butter" "juice" 
[1] "butter" "juice"

解説:

  • 在庫と照合したショッピングリスト:milk (TRUE), butter (FALSE), eggs (TRUE), juice (FALSE), apple (TRUE)
  • 在庫にないアイテム(購入が必要):butter, juice
  • セール中の購入アイテム:butter と juice は両方ともセールリストに含まれています

ベクトルに含まれていないアイテムを見つけるには、%in% と一緒に ! 演算子を使用してください。

チートシート

%in% 演算子は、値がベクトル内に存在するかどうかを確認し、TRUE または FALSE を返します:

fruits <- c("apple", "banana", "cherry")
print("banana" %in% fruits)

出力:

[1] TRUE

複数の値を一度にチェックして、論理ベクトルを取得します:

fruits <- c("apple", "banana", "cherry")
check <- c("banana", "grape", "apple")
print(check %in% fruits)

出力:

[1]  TRUE FALSE  TRUE

論理インデックス作成で %in% を使用して、要素をフィルタリングします:

numbers <- c(1, 5, 3, 8, 2, 9)
allowed <- c(1, 2, 3)
print(numbers[numbers %in% allowed])

出力:

[1] 1 3 2

!%in% と組み合わせて使用し、ベクトルに含まれていない項目を見つけます:

items <- c("milk", "butter", "eggs")
inventory <- c("milk", "eggs")
print(items[!items %in% inventory])

出力:

[1] "butter"

自分で試してみよう

# 入力を読み込む
con <- file("stdin", "r")
inventory_input <- suppressWarnings(readLines(con, n = 1))
shopping_list_input <- suppressWarnings(readLines(con, n = 1))
sale_items_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# TODO: 以下にコードを記述してください
# 1. strsplit() を使用して、カンマ区切りの各入力から文字ベクトルを作成します
# 2. ショッピングリストの項目のうち、すでに在庫(inventory)にあるものを確認します (%in% を使用)
# 3. 在庫にないショッピングリストの項目を抽出します (%in% と ! を使用)
# 4. 購入が必要な項目のうち、セール対象でもある項目を抽出します
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン