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

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

MENU

Rで繰り返し(for文、break)

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


Rでのfor文

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

for(i in 1:10){
    a <- i
    cat("a = ", a, "\n")
}

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

a =  1 
a =  2 
a =  3 
a =  4 
a =  5 
a =  6 
a =  7 
a =  8 
a =  9 
a =  10 


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

単純なfor文を入れ子構造にすることも可能です。
ただ、Rはあまり計算が早いわけでは無いので、オススメはできません。
例えば、

for(i in 1:5){
    a <- i
    for(j in 1:5){
        b <- j
        cat("a = ", a, "b = ", b, "\n")
    }
}

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

a =  1 b =  1 
a =  1 b =  2 
a =  1 b =  3 
a =  1 b =  4 
a =  1 b =  5 
a =  2 b =  1 
a =  2 b =  2 
a =  2 b =  3 
a =  2 b =  4 
a =  2 b =  5 
a =  3 b =  1 
a =  3 b =  2 
a =  3 b =  3 
a =  3 b =  4 
a =  3 b =  5 
a =  4 b =  1 
a =  4 b =  2 
a =  4 b =  3 
a =  4 b =  4 
a =  4 b =  5 
a =  5 b =  1 
a =  5 b =  2 
a =  5 b =  3 
a =  5 b =  4 
a =  5 b =  5 

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

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

for(i in 1:10){
    a <- i
    cat("a = ", a, "\n")
    if(i == 5){
        break
    }
}

上記の出力結果は、

a =  1 
a =  2 
a =  3 
a =  4 
a =  5 

となります。

Rのfor文でbreakの後ろに書いたコードはどうなるか

オブジェクトaの出力をbreakの後ろに置いたとしたら、

for(i in 1:10){
    a <- i
    if(i == 5){
        break
    }
    cat("a = ", a, "\n")
}

出力結果は、

a =  1 
a =  2 
a =  3 
a =  4 

となり、break以降は出力されません。


Rでfor文の途中でスキップする next

条件に合致した場合には繰り返し処理をスキップし、それ以降の繰り返しループを実行するには、nextを使用します。

for(i in 1:10){
    a = i
    if(i == 5 || i == 7){
        next
    }
    cat("a = ", a, "\n")
}

これを実行すると、iが5と7の時にnext以降の処理をスキップして次のループ処理に移ります。
便利ですね。
出力結果は以下のようになります。

a =  1 
a =  2 
a =  3 
a =  4 
a =  6 
a =  8 
a =  9 
a =  10