はじめに
ケモインフォマティクスで学ぶRの条件分岐に引き続き、リピドミクス(脂質の網羅解析)を題材として「条件分岐」について解説していきます。
ケモインフォマティクスの実践例を中心に説明していきますので、基本を確認したいという人は以下の記事を読んでからこの記事を読んでみてください。
3.3. for文
for
はあらかじめ決まった回数だけ反復処理を行うときに使えます。
for (変数 in ベクトルなど){処理}
と書きます。
carbon.numbers <- c(16, 18, 20, 22, 24)
for (i in 1:length(carbon.numbers)){
print(paste0("FA ", carbon.numbers[i], ":0"))
}
もちろん,if
と組み合わせることもできます。
carbon.numbers = c(16, 18, 20, 22, 24)
unsaturation.numbers = c(0, 0, 4, 6, 0)
for (i in 1:length(unsaturation.numbers)){
if (unsaturation.numbers[i] == 0){
print(paste0("FA ", carbon.numbers[i], ":", unsaturation.numbers[i], " is a saturated fatty acid."))
}else{
print(paste0("FA ", carbon.numbers[i], ":", unsaturation.numbers[i], " is an unsaturated fatty acid."))
}
}
上の例では、carbon.numbers
に脂肪酸の鎖長(炭素原子数)を、unsaturation.numbers
に不飽和度(二重結合数)を格納しておき、ベクトルの要素を前から順番に取り出して脂肪酸の略号を書き出しています。
その際に、不飽和度の値から飽和脂肪酸saturated fatty acid
か不飽和脂肪酸unsaturated fatty acid
かを判定しています。
以下のようにbreak
を使うと反復処理を中断します。
fatty.acids <- c("FA 16:0", "FA 18:0", "", "FA 18:1")
for (i in 1:length(fatty.acids)){
if (fatty.acids[i] == ""){
print("空です。処理を中止します。")
break
}
print(fatty.acids[i])
}
上の例では、リストfatty_acids
の左から3番目の要素が空となっているため、その前の要素まで反復処理が行われ、要素の値が出力されます。
一方、next
を使うと、反復処理がスキップされます。
fatty.acids <- c("FA 16:0", "FA 18:0", "", "FA 18:1")
for (i in 1:length(fatty.acids)){
if (fatty.acids[i] == ""){
print("空です。スキップします。")
next
}
print(fatty.acids[i])
}
上の例では、空白の要素はnext
によって処理がスキップされるため、要素の値が出力されることはありませんが、最後まで処理が行われ、「FA 18:1」も出力されます。
3.4. while文
while
を使うと、指定した条件が成立する限り、反復処理を行います。
while (条件){処理}
と記述します。
Cn <- 12
while (Cn <= 24){
print(paste0("FA ", Cn, ":0"))
Cn <- Cn + 2
}
上の例では、変数Cn
に脂肪酸の鎖長を代入し、鎖長が24
以下の飽和脂肪酸の略号を出力しています。
出力の後はCn
を2増やしています。これを忘れると、いつまでたってもCn
が24
より大きくならず、「無限ループ」となるので注意が必要です。
今回はCn
の初期値を12
としていますが、10
や0
でも処理を行うことができます。このように、反復回数が決まっていない場合に、while
を使うと良いです。
まとめ
ここでは、Rの反復処理について、ケモインフォマティクスで使える実践的な知識を中心に解説しました。
もう一度要点をおさらいしておきましょう。
- 反復回数が決まっている場合は、
for
を使います。if
と組み合わせてbreak
やnext
により処理を中断したり、スキップしたりすることもできます。 - 反復回数が決まっておらず、特定の条件を満たした場合に反復処理を終了する場合は、
while
を使います。変数の値の更新を忘れて無限ループにならないよう注意が必要です。
続いて、Rのクラスについて以下の記事で解説しています。