Help us understand the problem. What is going on with this article?

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

はじめに

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

製薬企業研究者が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内で出てくる変数CnUnはいずれもローカル変数で、関数の外で定義されているCnUnとは別物です。
なので、関数を呼び出しても、変数CnUnの値は更新されません。

ここで、関数を呼び出すことで、変数CnUnの値も更新したい場合は、<<-を使って、関数内のCnUnがローカル変数ではなくグローバル変数であることを示す必要があります。

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

上の例では、CnUnがグローバル変数として扱われているので、関数呼び出し時にCnUnの値も更新されます。

まとめ

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

  • 関数はひとかたまりの処理をまとめて記述したもので、一度作っておけば、あとは呼び出すだけで処理を実行できます。
  • 関数内で変数を扱う時には、変数のスコープに注意する必要があります。

参考資料・リンク

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした