1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ケモインフォマティクスで学ぶRの反復処理

Last updated at Posted at 2020-02-09

はじめに

ケモインフォマティクスで学ぶRの条件分岐に引き続き、リピドミクス(脂質の網羅解析)を題材として「条件分岐」について解説していきます。
ケモインフォマティクスの実践例を中心に説明していきますので、基本を確認したいという人は以下の記事を読んでからこの記事を読んでみてください。

製薬企業研究者が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増やしています。これを忘れると、いつまでたってもCn24より大きくならず、「無限ループ」となるので注意が必要です。
今回はCnの初期値を12としていますが、100でも処理を行うことができます。このように、反復回数が決まっていない場合に、whileを使うと良いです。

まとめ

ここでは、Rの反復処理について、ケモインフォマティクスで使える実践的な知識を中心に解説しました。
もう一度要点をおさらいしておきましょう。

  • 反復回数が決まっている場合は、forを使います。ifと組み合わせてbreaknextにより処理を中断したり、スキップしたりすることもできます。
  • 反復回数が決まっておらず、特定の条件を満たした場合に反復処理を終了する場合は、whileを使います。変数の値の更新を忘れて無限ループにならないよう注意が必要です。

続いて、Rのクラスについて以下の記事で解説しています。

ケモインフォマティクスで学ぶRの関数

参考資料・リンク

プログラミング言語Rとは?統計分析に強い?

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?