はじめに
ケモインフォマティクスで学ぶRの反復処理に引き続き、リピドミクス(脂質の網羅解析)を題材として「関数」について解説していきます。
ケモインフォマティクスの実践例を中心に説明していきますので、基本を確認したいという人は以下の記事を読んでからこの記事を読んでみてください。
関数の作成と利用
関数というのは、一連の処理をひとまとめにしたもので、function(引数){処理}
と記述することができます。
一度関数を作成したら、あとは関数名を呼び出すだけで、関数内に記述されている処理を実行できます。
戻り値(返り値)は、return
を使って書くことができます。
exact.mass <- function(Cn, Un){
return (12 * Cn + 1.00783 * (2 * Cn - 2 * Un) + 15.99491 * 2)
}
exact.mass(16, 0)
exact.mass(18, 2)
変数のスコープ
関数を利用する時には、「変数のスコープ」に注意する必要があります。
変数のスコープというのは、変数がどの範囲で使えるかということで、関数内だけでしか使えない場合(ローカル変数)もあれば、関数の外でも使える場合(グローバル変数)もあります。
abbreviation <- function(a, b){
Cn <- a
Un <- b
return (paste0("FA ", Cn, ":", Un))
}
Cn <- 16
Un <- 0
abbreviation(18, 2) # "FA 18:2"
print(Cn) # 16
print(Un) # 0
上の例では、関数abbreviation
内で出てくる変数Cn
とUn
はいずれもローカル変数で、関数の外で定義されているCn
とUn
とは別物です。
なので、関数を呼び出しても、変数Cn
とUn
の値は更新されません。
ここで、関数を呼び出すことで、変数Cn
とUn
の値も更新したい場合は、<<-
を使って、関数内のCn
とUn
がローカル変数ではなくグローバル変数であることを示す必要があります。
abbreviation <- function(a, b){
Cn <<- a
Un <<- b
return (paste0("FA ", Cn, ":", Un))
}
Cn = 16
Un = 0
abbreviation(18, 2) # "FA 18:2"
print(Cn) # 18
print(Un) # 2
上の例では、Cn
とUn
がグローバル変数として扱われているので、関数呼び出し時にCn
とUn
の値も更新されます。
まとめ
ここでは、Rの関数について、ケモインフォマティクスで使える実践的な知識を中心に解説しました。
もう一度要点をおさらいしておきましょう。
- 関数はひとかたまりの処理をまとめて記述したもので、一度作っておけば、あとは呼び出すだけで処理を実行できます。
- 関数内で変数を扱う時には、変数のスコープに注意する必要があります。