Rscriptを使用してRファイルをバッチモードで実行したいのですが、必要なライブラリをロードしていないようです。私が得ている特定のエラーは次のとおりです:
_Error in library(timeSeries) : there is no package called 'timeSeries'
Execution halted
_
ただし、パッケージtimeSeries
があり、Rstudio、RGui、およびRからコマンドラインから問題なくロードできます。この問題は、Rscriptを使用してスクリプトを実行する場合にのみ発生するようです。
私のシステム/環境変数は次のように構成されています:
_C:\Program Files\R\R-3.1.0\bin\x64 (Appended to PATH)
R_HOME = C:\Program Files\R\R-3.1.0
R_User = Patrick
_
コマンドラインからRStudio、RGui、Rで同じバージョンのRを実行しています。また、これら3つのソースから_.Library
_をチェックし、同じ出力を得ました。
Rで使用している(インストール済みの)パッケージを使用してコマンドラインからRscriptを実行するにはどうすればよいですか?
_Rscript script.r
_が配置されているディレクトリのWindowsコマンドラインで_script.r
_を介してRscriptを使用しています。
Rscript -e print(.Library)
の出力は_[1] "C:/PROGRA~1/R/R-31~1.0/library"
_です
これは、私が言及した他の3つのオプションと一致しています:_[1] "C:/PROGRA~1/R/R-31~1.0/library"
_
ただし、これをスクリプトに入れた場合:
_print(.libPaths())
library(timeSeries) #This is the package that failed to load
_
次の出力が得られます。
_[1] "C:/Program Files/R/R-3.1.0/library"
Error in library(timeSeries) : there is no package called 'timeSeries'
Execution halted
_
RStudioの対応する呼び出しは、パッケージが実際にインストールされる場所への追加のパスを提供します。
_> print(.libPaths())
[1] "C:/Users/Patrick/Documents/R/win-library/3.1" "C:/Program Files/R/R-3.1.0/library"
_
コメントで述べたように、Rscriptはライブラリパスのデフォルトを自動的に認識しないようです。私はさまざまな人のコンピューターのコマンドラインからソース可能にする必要があるRスクリプトを書いているので、このより一般的な回避策を思い付きました。
lib.loc =
_引数でlibrary()
呼び出しに含めます。これは、指定されたコンピューター上のパスに関係なく機能するはずです。
_library.path <- .libPaths()
library("timeseries", lib.loc = library.path)
_
正しい道に私を置いてくれた上記の@flodelに再び感謝します
別の原因はPackratです。 Packratで実行している場合、プロジェクトを開くとRStudioによって自動的にオンになります。 RScriptはそうではないので、スクリプトの初期(ライブラリが呼び出される前)にPackrat::on()
が必要です。