for
構文は
1 |
for ( ループ変数 in リスト) |
最も基本的な例は連番のリストによる回数指定。
1 2 3 4 5 6 7 8 9 10 11 12 |
> for (i in 1:5) print(i) [1] 1 [1] 2 [1] 3 [1] 4 [1] 5 > for (i in seq(0, 8, 2)) print(i) [1] 0 [1] 2 [1] 4 [1] 6 [1] 8 |
繰り返し内容が複数にわたる場合は{}で囲む。
1 2 3 4 5 6 7 8 9 |
> for (i in 1:5) { + cat(i) + cat("\n") + } 1 2 3 4 5 |
break
文で最も内側のループから抜ける。
1 2 3 4 5 6 7 |
> for (i in 1:5) { + print(i) + if (i == 3) break + } [1] 1 [1] 2 [1] 3 |
next
文はループ内の残りの部分を実行せず次のループへ。
1 2 3 4 5 6 7 |
> for (i in 1:5) { + if (i < 3) next + print(i) + } [1] 3 [1] 4 [1] 5 |
ループ範囲に変数を使った場合、その変数は中で参照・変更可能だが、ループ回数そのものは変更されない。
以下の例では、xで指定された1:5はforループ開始時点でディープコピーされ、ループの中でxが変更されても、繰り返し回数は変化していない。
1 2 3 4 5 6 7 8 9 10 11 12 |
> x <- 1:5 > for (i in x) { + x <- c(x, i) + print(x) + } [1] 1 2 3 4 5 1 [1] 1 2 3 4 5 1 2 [1] 1 2 3 4 5 1 2 3 [1] 1 2 3 4 5 1 2 3 4 [1] 1 2 3 4 5 1 2 3 4 5 > x [1] 1 2 3 4 5 1 2 3 4 5 |
while
他の言語と同じ。
1 2 3 4 5 |
n = 1 while (n < 5) { print(n) n <- n + 1 } |
break文やnext文も使える。
1 2 3 4 5 6 7 8 9 10 11 |
> n <- 1 > while (n < 10) { + n <- n + 1 + if (n < 4) next + if (n == 8) break + print(n) + } [1] 4 [1] 5 [1] 6 [1] 7 |
repeat
repeat
で無限ループを実行。
1 2 3 4 5 6 7 8 9 10 11 |
> n <- 1 > repeat { + print(n) + n <- n + 1 + if (n > 5) break + } [1] 1 [1] 2 [1] 3 [1] 4 [1] 5 |