2011-08-20 39 views
24

Linux上でいくつかのRライブラリ(*)を1つのドライブから別のドライブに移動したいのですが、単純な移動が可能かどうか、またはパッケージをアンインストールして再インストールする必要があるかどうかを知りたいと思います。ライブラリの場所は.libPaths()で識別され、ライブラリの移行については「Rのインストールと管理」のマニュアルを見ても、推奨されるプロセスは見当たりません。Rライブラリを移行する

私は3つのオプション感じる:非ベースパッケージのすべてのためにファイル名を指定して実行remove.packages()

  1. を、そしてinstall.packages(lib = "/path/to/new/location")を経由して、新たにインストールします。
  2. mvを使用してライブラリ(ディレクトリ)に移動し、新しい場所を指す(そして最終的にはシンボリックリンクを削除)するためにシンボリックリンクを使用し
  3. で提案されているように、ディレクトリの卸売を移動し、R_HOME/etc/Rprofile.site.Library.siteを更新するために、Linuxでのmvコマンドを使用しますR Installation and Administration manual

オプション#1は鈍いです。オプション#2は機能するはずですが、少し不安なようです。

#3は安全ですか、それとも重大な問題がありますか?私が特定した問題は、ディレクトリのアクセス許可と、パッケージのセットアップが相対パスではなく絶対パスを格納する可能性(不健全で不必要なようです)です。

絶対パスの記憶に関しては、というファイルにrJavaR_HOMEの場所を格納していることがわかりました。これはライブラリの問題ではありませんそれ自体はですが、絶対パスのプライベートコピーを保持しているのはパッケージ(とそのパッケージ)の1つの指標です。

(*)いくつかのライブラリと多数のパッケージがあります。当然のことながら、ライブラリ(ディレクトリ)だけが移動されますが、パッケージは影響を受ける可能性があります。


UPDATE 1 /明確化:だけ明確にする:私はRのバージョンまたはパッケージのバージョンを変更していない、だけ移行ライブラリをしています。 Rまたはパッケージの更新は別々に行うこともできますが、ライブラリを移動するかどうかは問題になりません。物が正しくインストールされていることを確認するためにすべてのパッケージを更新または再インストールする必要がある場合、それはオプション#3よりもオプション#1に近いパスです。

更新2:another SO postへの回答には、アップグレード時にこの問題を回避するための良いアイデアがあります。私はRをアップグレードしていませんが、RのファイルツリーにパッケージをインストールしないというDirk Eddelbuettelの提案は賢明です。このようにして

update.packages(checkBuilt=TRUE) 

新しいバージョンのために再構築する必要がありますパッケージ:

+1

あなたがしようとしていることを正確にはわかりませんが、[this](http://stackoverflow.com/questions/5721942/making-r-installation-self-contained-user-independent/6709445 #6709445)の質問とそれに関連する。 – Fred

+0

+1ライブラリとパッケージの違いを知るために: –

+0

@ gsk3:そのタイプのすべての可能なエラーを修正したいと思っています。私はそのような専門用語のために残酷になりたくはありません。 :) – Iterator

答えて

23

#3(新しいライブラリに古いライブラリのコピー)が動作するはずです。オプション...しかし、場合にのみ、あなたがそれから実行する場合更新されます。新しいバージョンが要件を追加するケースがよくあります(NAMESPACEのための2.14.xの差し迫った要件など)。

編集:これはちょうどデッキチェアの周りを移動しているのを見ています。私はあなたがベースのRのインストールを移動しているならば、#3を推​​薦することを断念します。それはMacで私のために働いていますが、私はRのインストールと管理のガイドまたはそれが仕事する必要がありますR FAQで約束を見ていない。あなたは、この順序で(様々な条件で、おそらく最も安全である)1位を達成することができます

# In original installation, get the non-default package list: 
save.pkg.list <- installed.packages()[is.na(installed.packages()[ , "Priority"]), 1] 
save(save.pkg.list, file="pkglist.Rdata") 
# If you want to use remove.packages() at this point it's fine. 
# Or just delete their directories. 

あなたの好み(あるいは同じ古いインストール)に設定.LibpathsとRの新たにインストールしたバージョンの:

Rの実行ファイルが変更されていない場合だけ(あなたも.Libpathsを変更すると仮定して)成功するかもしれないが、私はそれをテストするために、Linuxのインストールを持っているか、いずれかのポインタがで設定されたのか分からない新しいライブラリへのパッケージの移動
load("pkglist.Rdata") 
install.packages(save.pkg.list) 

構成操作が影響を受けます。

+0

ありがとう、これは興味深いです。あなたは3つのことを明確にすることができます:(1) "新しいバージョンのために再構築する必要がある"のバージョンの言及は、これは正しい、Rを指しますか? (2)(1)が正しい場合、パッケージを再ビルドする必要がない(つまり、現在のバージョンのRより古い)場合はどうなりますか? (3)あなたが、そして、私が、これが必要かつ十分な条件であることを意味すると解釈するとき、あなたは本当にそれを意味しますか? :)もしそうなら、私はそれがなぜそうであるかについて何かを見逃しているかもしれません。私は同意していないが、このオプションは私には新しく、私はまだ論理を把握していない。 – Iterator

+0

(1)Yes.eg R 2.13.xからR 2.14.xへの変更点。ここでxは0,1または2です。私が理解しているように、_might_をコピーするという単純な行為は、新しいメジャーバージョン2.13から2.14への変更が保証されることは決してありません。だから私はおそらくあまりにも過激だった。 「うまくいく」とは、バージョンのパッケージの依存関係をチェックし、update.packagesを実行しないとチェックが実行されないことを意味します。 –

+0

しかし、ディレクトリを移動するだけの場合は* R *をアップグレードしないと、これはうまくいくのでしょうか? – Iterator

関連する問題