web-dev-qa-db-ja.com

同じRパッケージの複数のバージョンをどのように使用しますか?

パッケージの2つのバージョンを比較できるようにするには、ロードするパッケージのバージョンを選択できる必要があります。 Rのパッケージシステムは、既存のパッケージを上書きするようにデフォルトで設定されているため、常に最新バージョンを使用できます。この動作をオーバーライドするにはどうすればよいですか?

これまでの私の考えは次のとおりです。

パッケージのソースを取得し、説明を編集して別の名前を付け、実際には2つの異なるパッケージをビルドできます。ただし、バイナリを直接操作できるようにしたいので、手間がかかりません。

必ずしも両方のバージョンのパッケージを同時にロードする必要はありません(同時にどこかにインストールするだけです)。 Sys.getenv('R_HOME')をいじって、Rがパッケージをインストールする場所を変更し、次に.libpaths()を使ってRがパッケージを探す場所を変更することができます。これはハッキリしているように見えますが、誰かより良いアイデアはありますか?

60
Richie Cotton

ライブラリパスを選択的に変更できます。完全な透明性のために、両方を通常の経路から遠ざけてから、

_ library(foo, lib.loc="~/dev/foo/v1")    ## loads v1
_

そして

_ library(foo, lib.loc="~/dev/foo/v2")    ## loads v2
_

もちろん、同じことがinstall.packages()でも機能します。これらのすべてのコマンドにはいくつかの引数があるため、目的のフックがすでに存在している場合があります。したがって、_R_HOME_の変更ではなく、help(install.packages)を確認してください(ソースからインストールする場合)。

しかし、私の知る限り、同じパッケージを同じ名前で2回ロードすることはできません。

57

当然のことながら、受け入れられた回答から何年も経ちました。しかし、その間に生じたいくつかの新しいオプションについて言及することは価値があるかもしれません:

パッケージの複数のバージョンの管理

プロジェクト(ディレクトリ)レベルでパッケージの複数のバージョンを管理するには、Packratツールが役立ちます: https://rstudio.github.io/Packrat/ 。要するに

Packratは、他のすべてのRセッションで共有される個人のRライブラリに依存するのではなく、パッケージの依存関係をその中に格納することにより、プロジェクトディレクトリを拡張します。

これは基本的に、プロジェクトごとにユーザーライブラリとシステムライブラリから分離された独自の「プライベートライブラリ」を持つことができることを意味します。 RStudioを使用している場合、Packratは非常にきちんと統合されており、使いやすいです。

カスタムパッケージバージョンのインストール

パッケージのカスタムバージョンのインストールに関しては、多くの方法があります。おそらく、最も便利なのは devtools パッケージを使用することです。次に例を示します。

devtools::install_version("ggplot2", version = "0.9.1")

代わりに、Richieが提案したように、 remotes と呼ばれるより軽量なパッケージがあります。これは、非常によく似た使い方で、devtoolsを小さなパッケージに分解した結果です。

remotes::install_version("ggplot2", version = "0.9.1")

トピックに関する詳細情報を見つけることができます:

12
Jozef