繰り返し処理はfor
, while
, repeat
を用いて行う。ただしこれらの処理は実効速度が遅いので、apply()
系の関数などを使用を推奨する。
for
for(val in sequence) {
statement
}
valにループ変数、sequenceにベクトル、リストを指定する。
> for (i in 1:4) {
+ print(paste("Number is ",i,"!!!"))
+ }
[1] "Number is 1 !!!"
[1] "Number is 2 !!!"
[1] "Number is 3 !!!"
[1] "Number is 4 !!!"
sequenceは数値でなくても、文字列も可能。順番にループ変数に代入され、カッコ内が処理される。
> for (month in c("Jan", "Feb", "Mar", "Apr")) {
+ print(paste("This month is", month))
+ }
[1] "This month is Jan"
[1] "This month is Feb"
[1] "This month is Mar"
[1] "This month is Apr"
while
条件を満たした時に、記述されたプログラムを実行する。条件を満たさなくなると、処理が終了する。
while (condition) {
statement
}
使用例
> i <- 1
> while (i<5) {
print (paste("Number is", i))
i <- i +1
}
[1] "Number is 1"
[1] "Number is 2"
[1] "Number is 3"
[1] "Number is 4"
repeat
無制限に繰り返し処理を行う。repeat
から抜けるにはbreak
を使用する。
repeat {
statement
}
使用例
> i <- 1
> repeat {
if (i<5) {
print (paste("Number is", i))
i <- i +1
} else break
}
[1] "Number is 1"
[1] "Number is 2"
[1] "Number is 3"
[1] "Number is 4"
ループから抜ける
ループを強制的に終了させるにはbreak
を使う。ループの途中で、次のループに移るにはnext
を使う。
> for (i in 1:10) {
+ print(i)
+ if(i>4) break # 4よりも大きい値になったら、ループを終了プさせる
+ }
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
> for (i in 1:10) {
+ if (i%%2 == 0) next # 2で割ったあまりが0の時はループをスキップさせる
+ else print(i)
+ }
[1] 1
[1] 3
[1] 5
[1] 7
[1] 9