2012-01-14 12 views
19

Rで再現可能なコンピューティングのためのフレームワークを開発しています。私が苦労している問題の1つは、パッケージのXY-Zバージョンで完全に動作するRコードなぜそれを3年後に再現しようとすると、パッケージが更新され、一部の機能が変更され、コードはもう実行されません。この問題は、パッケージを使用するSweave文書などにも影響します。多くのバージョンのRパッケージをインストールして管理する方法

結果を自信を持って再現する唯一の方法は、オリジナルの著者が使用したRバージョンおよびバージョンのパッケージをインストールすることです。これが単一のケースであれば、CRANのアーカイブから情報を取り出し、適切なバージョンをインストールすることができます。しかし、私のフレームワークでは、これは実用的ではなく、パッケージ版をプレインストールする必要があります。

私は自分自身を1つのバージョンのRに制限すると仮定します。 2.14。多くのバージョンのRパッケージをインストールして、即座にロードできるようにするにはどうすればよいでしょうか?私は、すべてのパッケージのすべてのバージョンに対して別々のライブラリディレクトリを作成し、それらをロードする際にカスタムlib.loc引数を使用するようなことができると思います。しかし、これは面倒です。同様のことをするヒントや以前の試みはありますか?

私のフレームワークはUbuntuサーバー上で動作します。

+0

devtoolsパッケージのdev_modeに精通していますか? IIRCも同様の問題に取り組んでいます。 – baptiste

+0

実際にはありません。 libpathを一時的なサンドボックスディレクトリに変更するだけです。しかしそれ以上のシステムは提供していません。 – Jeroen

+0

これは複製です。 http://stackoverflow.com/questions/8343686/how-to-install-2-different-r-versions-on-debian/83​​43739#8343739 – Oz123

答えて

4

fooの代わりにfoo_1.0という名前に名前を変更してパッケージをインストールし、特定のR +パッケージのスナップショットを1つのライブラリに再作成するバージョンをソフトリンクすることができます。明らかに、パッケージは実際には別のツリーに存在することができるので、library.projectX/foo - >library.all/foo/1.0を持つことができます。

+0

さらに、環境変数R_LIBSをそのプロジェクトの適切なディレクトリに変更することができます。 –

-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ライブラリのパスで遊ぶことは危険なことです。

+5

すべての依存関係を壊すので、パッケージ名で再生することはさらに危険です。ライブラリパスは、異なるパッケージ名で再生されるように設計されています。 –

1

オペレーティングシステムはあなたに利用可能なもののトンのように完全に分離する、とDebian/Ubuntuのスタックの一層のハンドルを提供します。私がプレイしているのは、

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

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

関連する問題