ベクトル要素の反復処理
CoddyのRジャーニー「基礎」セクションの一部 — レッスン 63/78。
Rのベクトル演算は強力ですが、カスタムロジックを使用して各要素を個別に処理する必要がある場合があります。forループを使用すると、ベクトルの要素を1つずつ反復処理できます。
ベクトルをループする最も簡単な方法は、その要素を直接反復処理することです:
fruits <- c("apple", "banana", "cherry")
for (fruit in fruits) {
print(fruit)
}出力:
[1] "apple"
[1] "banana"
[1] "cherry"各反復において、ループ変数 fruit はベクトル内の次の要素の値を取ります。このアプローチは、値自体のみが必要な場合に簡潔で読みやすくなります。
反復処理と条件分岐を組み合わせて、要素を選択的に処理することができます:
numbers <- c(3, 8, 2, 10, 5)
for (num in numbers) {
if (num > 5) {
print(num)
}
}出力:
[1] 8
[1] 10このパターンは、各要素の値に基づいて異なる操作を適用する必要がある場合に便利です。これは、ベクトル化された演算だけでは必ずしも対応できないケースです。
チャレンジ
簡単2行の入力を受け取ります:
- カンマ区切りの数値リスト (例:
12,5,18,3,25,8,14) - しきい値 (例:
10)
for ループを使用してベクトルの要素を反復処理します:
- カンマ区切りの数値からベクトルを作成します
- ベクトル内の各要素をループで処理します
- しきい値以上の各要素について、
print()を使用してその要素を出力します
例えば、入力が以下の場合:
4,15,8,22,6,19,11
10出力は以下のようになります:
[1] 15
[1] 22
[1] 19
[1] 11説明:ループは各要素をしきい値 (10) と比較します。要素 15, 22, 19, 11 はすべて 10 以上であるため、出力されます。要素 4, 8, 6 はスキップされます。
チートシート
forループを使用すると、ベクトルの要素を1つずつ反復処理し、各要素にカスタムロジックを適用できます。
ベクトルをループ処理するための基本構文:
fruits <- c("apple", "banana", "cherry")
for (fruit in fruits) {
print(fruit)
}各反復において、ループ変数はベクトルの次の要素の値を取ります。
ループと条件ロジックを組み合わせて、要素を選択的に処理する:
numbers <- c(3, 8, 2, 10, 5)
for (num in numbers) {
if (num > 5) {
print(num)
}
}このパターンは、各要素の値に基づいて異なる操作を適用する必要がある場合に便利です。
自分で試してみよう
# 入力を読み込む
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
threshold <- as.numeric(suppressWarnings(readLines(con, n = 1)))
close(con)
# カンマ区切りの文字列を数値ベクトルに変換する
numbers <- as.numeric(unlist(strsplit(numbers_input, ",")))
# TODO: 以下にコードを記述してください
# forループを使用してnumbersベクトルを反復処理します
# 各要素がthreshold以上の場合は、print()を使用して出力してくださいこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。