英国でデータサイエンスを学ぶ

30代になってから海外で統計学・機械学習・プログラミングを勉強

MENU

Rで繰り返し(while文)

Rでの繰り返しをwhile文で行う時のメモです。


Rでのwhile文

もっとも単純な繰り返しは以下の通りです。

i <- 0
while(i < 10){
    cat("i = ", i, "\n")
    i <- i+1
}

これで0から9までの数字が出力されます。具体的な出力は

i =  0 
i =  1 
i =  2 
i =  3 
i =  4 
i =  5 
i =  6 
i =  7 
i =  8 
i =  9 

となります。


Rで繰り返し(入れ子構造)

単純なwhile文を入れ子構造にすることも可能です。
ただ、Rはあまり計算が早いわけでは無いので、オススメはできません。
例えば、少しトリッキーに表現していますが、

i <- 0
j <- 0
while( i < 5){
    while(j < 5){
        cat("i = ", i, "j = ", j, "\n")
        j <- j+1
    }
    j <- 0
    i <- i+1
}

と実行すると以下のような出力になります。

i =  0 j =  0 
i =  0 j =  1 
i =  0 j =  2 
i =  0 j =  3 
i =  0 j =  4 
i =  1 j =  0 
i =  1 j =  1 
i =  1 j =  2 
i =  1 j =  3 
i =  1 j =  4 
i =  2 j =  0 
i =  2 j =  1 
i =  2 j =  2 
i =  2 j =  3 
i =  2 j =  4 
i =  3 j =  0 
i =  3 j =  1 
i =  3 j =  2 
i =  3 j =  3 
i =  3 j =  4 
i =  4 j =  0 
i =  4 j =  1 
i =  4 j =  2 
i =  4 j =  3 
i =  4 j =  4 

という出力になります。

(注意)
for文の記述と同じように、例えば

i <- 0
j <- 0
while(i < 5){
    i <- i+1
    while(j < 5){
        j <- j+1
        cat("i = ", i, "j = ", j, "\n")
    }
}

といったような書き方をしてしまうと、出力は

i =  1 j =  1 
i =  1 j =  2 
i =  1 j =  3 
i =  1 j =  4 
i =  1 j =  5

となってしまいます。
これは、最初の大外のループ(i = 0)でjが0から5まで増加してしまうので、i=1、2、3・・・とそれ以降のループではjのwhileループが要件を満たさずに、cat関数は実行されないためです。


Rでwhile文を途中で止める break

条件に合致した場合には繰り返し処理を途中で止めるには、breakを使用します。

i <- 0
while(i < 10){
    i <- i+1
    cat("i = ", i, "\n")
    if(i == 6){
        break
    }
}

上記の出力結果は、

i =  1
i =  2
i =  3
i =  4
i =  5
i =  6

となります。