二重ループ
CoddyのRジャーニー「基礎」セクションの一部 — レッスン 44/78。
ループの中に別のループを配置して、入れ子になったループ(ネストしたループ)を作成することができます。内側のループは外側のループの各反復ごとに完全に実行されるため、組み合わせやグリッドのようなパターンを扱う際に便利です。
for (i in 1:3) {
for (j in 1:2) {
cat("i =", i, ", j =", j, "\n")
}
}出力:
i = 1 , j = 1
i = 1 , j = 2
i = 2 , j = 1
i = 2 , j = 2
i = 3 , j = 1
i = 3 , j = 2i の各値に対して、内側のループは j のすべての値を繰り返します。i が 1 のとき、j は 1 から 2 まで変化します。次に i が 2 になり、j は再び 1 から 2 までやり直します。
実践的な例として、簡単な掛け算のパターンを作成してみましょう。
for (row in 1:3) {
for (col in 1:3) {
cat(row * col, " ")
}
cat("\n")
}出力:
1 2 3
2 4 6
3 6 9外側のループが行を制御し、内側のループはその行内の各列を処理します。各行の処理が完了した後、改行を出力して次の行に移動します。
チャレンジ
簡単入力から2つの数値、rows と cols を読み取ります。
入れ子になったループ(二重ループ)を使用して、各セルに行番号と列番号の合計が含まれる数値の長方形を出力してください。行は1から rows まで、列は1から cols まで番号が振られています。
各行を個別の行に出力し、値は半角スペース1つで区切ってください。出力には cat() を使用し、各行の後に改行を追加してください。
例えば、入力が 3 と 4 の場合、出力は以下のようになります:
2 3 4 5
3 4 5 6
4 5 6 7最初の行(行1)では、値は 1+1=2, 1+2=3, 1+3=4, 1+4=5 となります。2行目(行2)では、値は 2+1=3, 2+2=4, 2+3=5, 2+4=6 となり、以下同様に続きます。
チートシート
二重ループ(入れ子状のループ)は、別のループの中に入れられたループのことです。外側のループが1回繰り返されるごとに、内側のループが最後まで実行されます。
for (i in 1:3) {
for (j in 1:2) {
cat("i =", i, ", j =", j, "\n")
}
}iの各値に対して、内側のループはjのすべての値を一通り繰り返します。
掛け算のパターンを作成する例:
for (row in 1:3) {
for (col in 1:3) {
cat(row * col, " ")
}
cat("\n")
}外側のループが行を制御し、内側のループはその行内の各列を処理します。各行が完了した後に改行を出力するには、cat("\n")を使用します。
自分で試してみよう
# 入力を読み込む
con <- file("stdin", "r")
rows <- as.integer(suppressWarnings(readLines(con, n = 1)))
cols <- as.integer(suppressWarnings(readLines(con, n = 1)))
close(con)
# TODO: 以下にコードを記述してください
# 入れ子のループを使用して、各セルに「行 + 列」の値が含まれる長方形を出力します
# cat() を使用して値をスペース区切りで出力し、各行の後に改行を入れますこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。