jnobuyukiのブログ

研究していて困ったことやその解決に関するメモ。同じように困ったあなたのために。twitter ID: @j_nobuyuki

R言語でパッケージから関数を呼び出す

本日は、なんとなく気になっていた関数の呼び出し方のバリエーションをまとめておきます。

パッケージ内の関数

R言語の最大の強みの一つは、パッケージによる機能拡張でしょう。世界中の開発者がオープンな環境で次々に強力な関数を開発して公開しています。これを自分のR環境に取り込めば、自分で開発せずに便利な機能が手に入ります。

パッケージの呼び出し方法は3つ

パッケージ内の関数を使うには、まずそのパッケージをinstall.packages関数でインストールしておきます*1
次にパッケージを呼び出すのですが、どうも3つほどやり方があります。

*** library関数

library(パッケージ名)

これだけです。これでパッケージ内の関数やデータを格納したオブジェクトがRの環境に読み込まれます(または読み込みの準備が完了します)。

require関数
require(パッケージ名)

これだけです。library関数とほぼ同じで、関数やデータを格納したオブジェクトがRの環境に読み込まれます。

ダブルコロン

ダブルコロンをつかってパッケージ内のそれぞれの関数のみを呼び出すこともあります。

パッケージ名::関数名()

呼び出し方法の使い分け

いろいろなページを読んで見ましたが、使い分けるためには、それぞれのやり方の特徴をつかむと良さそうです。
例えば参考にしたページはこちらです。stackoverflow.com

library関数

ソースコードの最初にlibrary関数を利用してパッケージを1度呼出せば、あとはそのソースコード内では自由にパッケージ内の関数やオブジェクトを呼び出せます。パッケージがインストールされていない場合には、errorが出力されて、計算が止まるので注意しましょう。

require関数

library関数と同じようにソースコードの最初で、require関数を利用してパッケージを一度呼び出せば良いです。ただ、library関数とは違って、パッケージがインストールされていない場合には、警告が出力されて計算が続きます。また、require関数は実行した時に論理値が返ってきています。これを利用すれば、パッケージがインストールされていなければインストールしてから、コードを実行するという流れをつくれます。自作関数の中で、他のパッケージを利用する際にはこの書き方が有効でしょう。

if (require(パッケージ名) == FALSE) {
 install.packages(パッケージ名)
} else {
 #パッケージを利用してやろうとしていたことをここに書く 
}
ダブルコロン

このやり方ではパッケージ全体を呼び出すのではなく、その一部を呼び出します。このやり方は、パッケージのバージョン違いで関数名が重複する場合に、どちらのバージョンから呼び出したのかを明示するのに便利です。

#lme4のlmer呼び出し
lme4::lmer()

#lme4.0のlmer呼び出し
lme4.0::lmer()

*1:これもCRANにあるパッケージとそうでないパッケージでのやり方をいつかまとめたいです