21

私は、R を使用して再現可能なコンピューティングのフレームワークを開発しています。私が苦労している問題の 1 つは、一部の R コードがパッケージのバージョン XY-Z で完全に実行される可能性があることですが、3 年後にそれを再現しようとすると、パッケージには更新され、一部の機能が変更され、コードが実行されなくなりました。この問題は、パッケージを使用する Sweave ドキュメントなどにも影響します。

結果を自信を持って再現する唯一の方法は、元の作成者が使用した R バージョンとパッケージのバージョンをインストールすることです。これが 1 つのケースである場合、CRAN アーカイブから内容を取得して、適切なバージョンをインストールできます。しかし、私のフレームワークではこれは非現実的であり、パッケージ バージョンをプリインストールする必要があります。

ここでは、R のバージョンを 1 つ、たとえば 2.14 に制限しているとします。オンザフライでロードできるように、多くのバージョンの R パッケージをインストールする実用的な方法は何でしょうか? すべてのパッケージのすべてのバージョンに対して個別のライブラリ ディレクトリを作成し、それらをロードするときにカスタム lib.loc 引数を使用するようなことができると思います。これはバラバラになりますが。似たようなことをするためのヒントや以前の試みはありますか?

私のフレームワークは Ubuntu サーバーで実行されます。

4

3 に答える 3

4

バージョンを指定してパッケージをインストールし (例:foo_1.0ではなくディレクトリに名前を変更foo)、特定の R + パッケージ スナップショットを 1 つのライブラリに再作成するバージョンをソフトリンクできます。明らかに、パッケージは実際には別のツリーに存在する可能性があるため、library.projectX/foo-> library.all/foo/1.0.

于 2012-01-14T08:36:46.087 に答える
1

オペレーティング システムは、完全な分離のためのさらに多くのハンドルを提供し、Debian / Ubuntu スタックは利用可能なもののトンです。一緒に遊んだ2人は

  • chroot 環境: これを使用して、ホスト マシンから別のビルド環境を完成させます。たとえば、私が作成したすべての Debian アップロードは、私の amd64 Ubuntu サーバーでホストされている i386 pbuilder chroot でビルドされています。Chroot は非常に強力な Unix システム コールです。chroot、特にその上に構築された pbuilder システム (Debian パッケージ構築用) は、ヘッドレスで動作することを意図しています。

  • 仮想マシン: これにより、完全な汎用性が得られます。それほど強力ではない私のボックスは、Debian i386、Ubuntu i386、Windoze XP の 3 つの仮想マシンを簡単に処理できます。このために、私は現在、libvirt とともに KVM を使用しています。これは Linux 固有です。過去にVirtualBoxとVMwareも使用しました。

于 2012-01-14T18:23:15.790 に答える
-1

DESCRIPTION ファイルを変更して、バージョン番号を追加して「Package」フィールドを変更してみます。

たとえば、CRAN ページ (http://cran.r-project.org/web/packages/pls/) からパッケージ ソース a をダウンロードします。圧縮ファイル (pls_2.3-0.zip) をディレクトリ ("pls/") に解凍します。次の手順では、DESCRIPTION ("pls/DESCRIPTION") 内のパッケージ名を変更し、R コマンド 'R CMD INSTALL pls/' を使用してインストールします。ここで、'pls/' は、変更された DESCRIPTION ファイルを含むパッケージ ソースへのパスです。

R ライブラリ パスをいじることは、私には危険なことのように思えます。

于 2012-01-14T14:45:45.197 に答える