J's blog

趣味で統計•データ解析をしています

R起動時にpackageを自動ロードする

よく使うパッケージを起動のたびにlibrary()やrequire()をするのは面倒かと思います。その時は.Rprofile内に

suppressMessages(library(hoge))

の一文を入れておきましょう。(違いました。追記を見て下さい。)

suppressMessages()はなくても構いませんが、出力として表示されるはずのメッセージを表示しないようにしてくれます。

この類似としてsuppressWarnings()という警告メッセージのみを抑制する関数も存在しています。

(追記)

上のコードで読み込んだ際のサーチパスが思うように行きませんでした。ここではdplyrパッケージをロードしたのですが、下の実行結果を見て下さい。

> search()
 [1] ".GlobalEnv"        "tools:rstudio"   "package:stats"    "package:graphics"
 [5] "package:grDevices" "package:utils"   "package:datasets" "package:dplyr"   
 [9] "JapanEnv"          "package:methods" "Autoloads"        "package:base" 

本来(Rコンソールからロードした時)ならば、2つ目の要素に "package:dplyr" が来ていなければなりません。dplyrパッケージの場合はfilter()とlag()がpackage:statsにマスクされているので、このサーチパスのおかしい状態で関数を呼ぶとpackage:statsのfilter()とlag()が呼び出されてしまいます。

ならどうしたらいいの?
ということで試行錯誤しましたが、Startupのhelpマニュアルを見たらちゃんと書いてありました。不要なところをはしょると、.Rprofileの中身を読み込んでから.First.sys()を実行するという順序になっています。
.First.sys()はoptions("defaultPackages")にあるパッケージをロードする関数で、つまりは

「.Rprofileでdplyrをロード → デフォルトパッケージをロード」

の順になっているわけです。
問題を解決するためには、デフォルトパッケージと同時にdplyrをロードするようなコードにする必要があります。
ですから、初めのコードの修正としてはデフォルトパッケージ自体を修正する

options(defaultPackages = c(getOption("defaultPackages"), "dplyr"))

というコードになります。
これでもう一度確認すると、正しいサーチパスになっていることがわかります。

> search()
 [1] ".GlobalEnv"       "tools:rstudio"     "package:dplyr" "package:stats"   
 [5] "package:graphics" "package:grDevices" "package:utils" "package:datasets"
 [9] "JapanEnv"         "package:methods"   "Autoloads"     "package:base"