web-dev-qa-db-ja.com

Rで複数のパッケージの場所(フォルダー)を管理する方法は?

R-2.14にアップグレードする前に、インストールしたパッケージのフォルダー構造を合理化する機会を利用したいと思います。

現時点では、Rのデフォルトを使用しています。つまり、新しくインストールされたすべてのパッケージはR_LIBS_USERに移動します。しかし、私は実際に2つのクラスのパッケージを区別しています。

  • 仕事をするために繰り返し使用するパッケージ。 plyrdata.tableなど。
  • 実験のためだけにインストールするパッケージ(多くの場合、StackOverflowで質問や回答を複製するため)

install.packageslib引数を指定するオプションを提供するため、これは明らかに可能です。

パッケージの場所を管理する簡単な方法はありますか? .RProfileまたはRProfile.Siteでいくつかの賢明な設定/ラッパー関数を作成することによって?

25
Andrie

Hadleyの優れたパッケージdevtoolsは、関数dev_modeを提供します。
http://www.inside-r.org/packages/cran/devtools/docs/dev_mode

ここで使用例を見つけることができます: https://Gist.github.com/1150934

基本的に、

dev_mode(TRUE, path = "anywhere-you-want-to-install")
install.packages("anything-that-you-want-to-install")

強力な方法です。

21
kohske

そのための多くのオプションがあります。私が最初にしたことは、Rprofile.siteを次の行を含むように調整し、デフォルトのライブラリパスをRインストールに含まれていないディレクトリにすることでした。

_ .libPaths(c("D:/R/Library",.libPaths()))
_

これにより、他のパスを失うことなく、_D:/R/Library_がデフォルトのパスになります。そのパスに2つのパス、たとえば_D:/R/Library/Work_と_D:/R/Library/Test_を追加できます。最初の位置に配置されるものは、install.packages()でlibを指定しない場合に使用されるデフォルトのものです。

次に、.Rprofile.siteで2つの変数を割り当てることができます。これらはベース名前空間で割り当てられるため、常にアクセス可能であり、ls()によって削除されることはありません。何かのようなもの

_ .libwork <- 'D:/R/Library/Work'
 .libtest <- 'D:/R/Library/Test'
_

これにより、次のようなパッケージをインストールできます。

_ install.packages('aPackage',lib=.libwork)
_

私が推測する他のオプションもありますが、これは私が転がる方法です。

25
Joris Meys

環境変数R_LIBSのパスのコロンで区切られたリストを介して、いくつかのライブラリパス/ツリーを指定できるはずです。これをR2.13.1パッチで確実に機能させることができませんでした-最初のエントリのみを取得します。 _R_LIBS_と_R_LIBS_USER_をシステムで確実に動作させることができました。通常は前者のみを設定します。

.libPaths()は、検索されたライブラリツリーのセットに新しいパスを追加できます。 _.Rprofile_の.libPaths(new)に適切な呼び出しを追加して、各セッションに関連するツリーを追加します。次に、インストール時にパッケージをインストールする場所、つまり使用するツリーを選択できます。

答えるために、私は少し文脈を与えなければなりません。

再現性を高めるために、Rのセットアップ全体を含めてスクリプトを作成しようとしています。私は、とりわけパッケージをインストールするスクリプト「initializeR.r」を持っており、キャッシュに関連するもの、視覚化、サンプリング、空間統計などに関連するものなど、パッケージをバンドルに配置しました-私自身の小さな必要に応じて、タスクビュー。

たとえば、ここにスニペットがあります:

# Profiling & testing
Packages$CodingTools = c("codetools","debug", "profr","proftools","RUnit")

一部のバンドルを「メジャー」パッケージ(またはプライマリ)リストに結合し、その他のバンドルを「セカンダリ」リストに結合します。プライマリリストにすべてをインストールすることは確実です。これらは、適切なR環境を持ち、独自のスクリプト、関数、パッケージなどを使用するために必要です(ところで、一部のパッケージは複数のバンドルに割り当てられていますが、ごくわずかです。集約リストを処理する前に重複排除します。)

次に、プラットフォーム固有のデフォルトライブラリを指定し、そこにインストールします。ただし、この機能は拡張可能であり、このアイデアを拡張して、各パッケージバンドル(またはパッケージ)のオプションの場所を含めることができます。バンドル名からマップするだけです。 「CodingTools」を一意のディレクトリ(ライブラリパス)に移動します。たとえば、「D:/ R/Library/CodingTools」と言います。これは、一致するリストとデフォルトオプションを使用して初期化スクリプトで実行できます。または、場所をハッシュテーブル、JSON、データベースなどの他の場所に保存することもできます。

他の人が言っているように、デフォルトのライブラリパスはRに通信する必要があります。これは.RProfile.siteで行うことができます。私の場合、Rインスタンスを必要に応じて初期化するために使用される別のスクリプトがあります。 Rによって読み取られる外部パラメーターファイル(.Rprofileなど)を避け、代わりに自分のパッケージ内の関数呼び出しを介してすべての初期化を実行しようとしています(パラメーターはまだ外部ですが)。これにより、作業のデバッグと再現が容易になる傾向があります。したがって、ライブラリパスは、データファイルの場所が指定されているのと同じ種類のJSONに含めることができます。

個人的には、スクリプト内でバンドルを定義するのをやめ、代わりにJSONを使用したいと思います。これは、セットアップ構成ごとに異なるJSONファイルをより簡単に作成できるためです。私はすでに、再現可能な作業の他のほとんどの目的のためにこれを行っています。

2
Iterator