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つくらいあるみたいです。
.libPaths( c( .libPaths(), "/path/to/userdir") )
みたいなのを.Rprofileに書いておく- Windowsの環境変数に
R_LIBS_USER
を/path/to/userdir
として設定する .bashrc
にexport R_LIBS_USER=/path/to/userdir
に書いておく
どれでも良さそうですけど、3にしました。今回はmsys2からやる場合だけ回避できればいいので、3が一番害がなさそうなので。
これで正しく動作します。
$ ./knit.r -h 要求されたパッケージ methods をロード中です Usage: knit.r [options] INPUT OUTPUT