繰り返し処理

似た操作を繰り返す

繰り返し処理は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

See Also

ループ処理

繰り返しの処理について

イテレータ

要素を順番に取り出すためのオブジェクト

条件分岐

特定の条件を満たしたときだけ実行する処理。