RstudioでパッケージをインストールしたのにコンソールからRを実行すると見えなくて困ったときのメモ

基本的にコンソールからRを実行することはないんですが、docopt.Rを使おうとするとエラーが出て困ったときのメモ。

こんな感じ。docoptパッケージはRStudio上からインストール済みなのになぜ。。

$ head knit.r
#! /usr/bin/env Rscript

"
Usage: knit.r [options] INPUT OUTPUT
" -> doc

library(docopt)
opts <- docopt(doc)


$ ./knit.r -h
Error in library(docopt) :  'docopt' という名前のパッケージはありません
 実行が停止されました

パッケージを探しに行くパス

RStudio側はこんな感じ。ユーザ権限で実行した時は2つ目の方は書き込み権限がないので、インストールするパッケージは通常1番目のほうに置かれます。

.libPaths()
#> [1] "C:/Users/user1/Documents/R/win-library/3.2"
#> [2] "C:/Program Files/R/R-3.2.0/library"

一方、msys2からR --no-saveで起動したときのRだと、.libPaths()の結果が1つしかありません。

.libPaths()
#> [1] "C:/Program Files/R/R-3.2.0/library"

R_LIBS_USER環境変数

色々調べると、このパスが違うのが原因っぽかったです。

Sys.getenv("R_LIBS_USER")
#> [1] "C:/Users/user1/Documents/R/win-library/3.2"
Sys.getenv("R_LIBS_USER")
#> [1] "C:\\msys64\\home\\user1/R/win-library/3.2"

解決策

以下の記事によれば、解決策は3つくらいあるみたいです。

stackoverflow.com

  1. .libPaths( c( .libPaths(), "/path/to/userdir") )みたいなのを.Rprofileに書いておく
  2. Windows環境変数R_LIBS_USER/path/to/userdirとして設定する
  3. .bashrcexport R_LIBS_USER=/path/to/userdirに書いておく

どれでも良さそうですけど、3にしました。今回はmsys2からやる場合だけ回避できればいいので、3が一番害がなさそうなので。

これで正しく動作します。

$ ./knit.r -h
 要求されたパッケージ methods をロード中です
Usage: knit.r [options] INPUT OUTPUT