4

AWS がホストする CentOS Linux サーバーで RStudio Server を実行しています。サーバーには、それぞれ RStudio Server を使用する複数のユーザーがいます。次のように、すべてのユーザーがパッケージをインストールするための共通のパスを用意したいと考えています。

  1. 各ユーザーは、RStudio ユーザー プロファイルのすべてのパッケージをインストールする必要はありません。
  2. 1 人がパッケージを更新すると、すべてのユーザーが更新されたパッケージを使用します。

これを行うための最良の手順は何ですか?

私が提案した解決策は次のとおりでしたが、失敗しました。

既存のユーザー パッケージのリストを保存します。

> save.pkg.list <- installed.packages()[is.na(installed.packages()[ , "Priority"]), 1]
> save(save.pkg.list, file="pkglist.Rdata")

ユーザー パッケージを削除します。

> remove.packages(save.pkg.list)

save.pkg.list次に、ルートの下のフォルダーにパッケージをインストールすることを考えました。/usr/share/R/libraryライブラリ パスに 1 つのパッケージを含む共有フォルダーのように見えるものが既にありました。

.libPaths() [1] "/home/ursus/R/x86_64-redhat-linux-gnu-library/3.1" "/usr/lib64/R/library" "/usr/share/R/library"

テストするために、1 つのパッケージを共有フォルダーにインストールして、サーバー上の他のユーザーが R インスタンスでそれを使用できるかどうかを確認してみました。おそらくルートの下にあり、sudo特権(私が持っている)を使用する必要があると想定していますが、パッケージインストールプロセスのためにそれらをRに渡す方法がわからないため、インストールは失敗しました:

install.packages("dlm", lib = "/usr/share/R/library") Warning in install.packages : 'lib = "/usr/share/R/library"' is not writable

最終的には、デフォルトのパッケージのインストール/ロード動作を制御するためにR_LIBS_SITE、環境変数またはそのようなものにいくつかの変更が必要になると思います。R_LIBS_USERしかし、私はまだそこにいません。

4

2 に答える 2

5

私はこれを試したことはありませんが、なぜこれがうまくいかないのか分かりません:

を使用.libPaths()してライブラリ dir を設定することができます (それを取得するためだけではありません)。すべてのユーザーは、次の.Rprofileようなものを入れることができます

.libPaths( c(.libPaths(), "/path/to/shared/lib") )

次に、そのパスは、誰もがパッケージをインストール/取得するデフォルトの場所になります。

このアプローチの問題点の 1 つは、ユーザーが元の libPath を 1 人につき 1 つずつ持っているため、既存のパッケージを更新しようとすると、自分のバージョンが更新されることです。libpath を追加するのではなく、新しいパスのみに設定することで、これを克服できます。

これは時々悪い結果をもたらす可能性があることに注意してください.Aさんのコードがパッケージの特定のバージョンに依存している場合、Bさんがパッケージを更新し、Aさんが5分後にコードを再度実行すると突然コードが壊れて完全に理由がわからない。

于 2015-06-12T18:14:44.843 に答える
1

/usr/share/R/library の書き込み権限を、すべてのユーザーが所属するグループに変更するという汚いハックがあります。または、全員に書き込み権限を付与してください。

于 2016-05-10T18:15:11.877 に答える