はじめに
ケモインフォマティクスで学ぶ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のクラスについて以下の記事で解説しています。