R 使い方 for 繰り返し スクリプトの書き方

バイオインフォ道場、くまぞうです。

Rで単純な繰り返し制御を行う場合は、forを使います。

スポンサーリンク



for スクリプトの書き方

forは繰り返し制御の基本的な構造です。集合には、ベクターやデータフレームなどを使うことができます。繰り返し処理では、集合から1つずつ要素を取り出し変数にセットします。そして、文やブロックに書かれた変数を使った処理を実行します。

for (変数 in 集合) 文・またはブロック

for 使い方

集合のオブジェクトに1つずつ直接処理を実行したり、変数をインデックスとして別のオブジェクトにアクセスするための間接的な処理として使うことが多いです。

直接的な処理

a…z集合の1文字ずつについて、表示と大文字変換を行いました。

R > for (x in letters) cat(x, toupper(x), "\n", sep=" ")
a A 
b B 
c C 
...
z Z

間接的な処理

1..30(1個とばし)集合をインデックスとして、対応するa..zの表示を行いました。28, 30については対応する要素がないので、NAの表示になっています。このバグは、集合とインデックスの不一致が原因なので、seqの生成をseq(1,length(letters),2)と工夫したり、処理側で条件チェックしたりすることで回避できます。間接的な処理の場合は、いろんなところでエラー回避策が必要になりがちです。

エラー

R > for (x in seq(1, 30, 2)) cat(letters[x], "\n")
a 
c 
e 
g 
i 
k 
m 
o 
q 
s 
u 
w 
y 
NA # エラー
NA # エラー

インデックス側でエラー回避

R > for (x in seq(1, length(letters), 2)) cat(letters[x], "\n")
a 
c 
e 
g 
i 
k 
m 
o 
q 
s 
u 
w 
y 

処理側でエラー回避

R > for (x in seq(1, 30, 2)) if (x<=length(letters)) cat(letters[x], "\n")
a 
c 
e 
g 
i 
k 
m 
o 
q 
s 
u 
w 
y 

集合が構造をもつデータの場合

集合がリストだった場合も、変数xにリストの要素が1つ(例ではベクタ)ずつセットされます。ベクタとして扱ったり、インデックスを使ってベクタ内の要素にアクセスしたりできます。

R > for (x in list(c(1,2,3), c(10, 20, 30))) cat (x, "\n")
1 2 3 
10 20 30 
R > for (x in list(c(1,2,3), c(10, 20, 30))) cat (x[1], "\n")
1 
10 
スポンサーリンク



One thought to “R 使い方 for 繰り返し スクリプトの書き方”

コメントは受け付けていません。