web-dev-qa-db-ja.com

Rscript:と呼ばれるパッケージはありません...?

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"    
_
26
pbreach

コメントで述べたように、Rscriptはライブラリパスのデフォルトを自動的に認識しないようです。私はさまざまな人のコンピューターのコマンドラインからソース可能にする必要があるRスクリプトを書いているので、このより一般的な回避策を思い付きました。

  • 最初にデフォルトのライブラリパスを変数に保存します(Rscript-sourced functions canこれを見つけますが、自動的に行われません)
  • 次に、そのパスを_lib.loc =_引数でlibrary()呼び出しに含めます。
  • これは、指定されたコンピューター上のパスに関係なく機能するはずです。

    _library.path <- .libPaths()
    library("timeseries", lib.loc = library.path)
    _

正しい道に私を置いてくれた上記の@flodelに再び感謝します

6
rrr

別の原因はPackratです。 Packratで実行している場合、プロジェクトを開くとRStudioによって自動的にオンになります。 RScriptはそうではないので、スクリプトの初期(ライブラリが呼び出される前)にPackrat::on()が必要です。

0
Dov Rosenberg