1. ホーム
  2. r

[解決済み】Rprofile.siteの.libPathsを使用してRのデフォルトライブラリパスを変更しても動作しない。

2022-04-16 13:51:52

質問

Windowsで、管理者でなくRを動かしています。パッケージをインストールする際、以下のコマンドを実行してもうまくいきません。

> install.packages("zoo")
Installing package(s) into ‘C:/Program Files/R/R-2.15.2/library’
(as ‘lib’ is unspecified)
Warning in install.packages :
  'lib = "C:/Program Files/R/R-2.15.2/library"' is not writable

パッケージをインストールするには、ライブラリの場所を指定する必要があるんだ。

install.packages("zoo", lib="C:/software/Rpackages")

パッケージを読み込むには、ライブラリの場所も指定しなければならないんだ。

library("zoo", lib.loc="C:/software/Rpackages")

これはすべてOKなのですが、私は、このような場合にも、このような方法で C:/software/Rpackages をライブラリパスに追加することで、毎回入力する必要がなくなります。

ネットで検索したところ、1つの方法として Rprofile.site ファイルに追加し

.libPaths("C:/software/Rpackages")

しかし、これを実行し、RStudio を起動すると、次のような出力が得られます。

> .libPaths()
[1] "C:/Program Files/R/R-2.15.2/library" "C:/Program Files/RStudio/R/library" 

.libPaths というコマンドを追加して Rprofile.site は、何の効果もなかったようです! なぜこのようなことが起こるのでしょうか?もっと重要なのは、どうすればこの問題を解決して、ライブラリの場所を入力せずにパッケージをインストールしたりロードしたりできるようになるのか、ということです。

注:RStudioを起動すると .libPaths() コマンドは想定通りに動作しているようです。

.libPaths("C:/software/Rpackages")
> .libPaths()
[1] "C:/software/Rpackages"               "C:/Program Files/R/R-2.15.2/library"

おかしいと思いませんか?

解決方法は?

私は通常、すべてのパッケージを1つのライブラリにまとめるようにしていますが、ライブラリを追加したい場合は、既存のライブラリパスに新しいライブラリ(ファイルシステムにすでに存在する必要があります)を追加してはどうでしょうか?

.libPaths( c( .libPaths(), "~/userLibrary") )
 # obviously this would need to be a valid file directory in your OS
 # min just happened to be on a Mac that day

または(これでuserLibraryが新しいパッケージを置く最初の場所になります)。

.libPaths( c( "~/userLibrary" , .libPaths() ) )

そうすると、(少なくともこれを最初に書いた当時は)こうなるんです。

> .libPaths()
[1] "/Library/Frameworks/R.framework/Versions/2.15/Resources/library"
[2] "/Users/user_name/userLibrary"  

.libPaths 関数は、他の多くの非グラフィックス関数とは少し異なります。それは、副作用によって動作します。この関数は Sys.getenvSys.setenv R の環境変数を報告したり変更したりするものは分割されましたが .libPaths は、その対象を報告することも変更することもできます。

Rの起動処理に関する情報は、以下のサイトで読むことができます。 ?Startup のヘルプページと、RStudioの資料があります。 https://support.rstudio.com/hc/en-us/articles/200549016-Customizing-RStudio

あなたの場合、RStudio が Rprofile.site 設定を尊重しないか、RStudio のデフォルトの 1 つから .Rprofile 設定を読み取ることによってそれらを上書きしているように思われます。また、この操作の結果として .Library.Library.site これは、RStudio(または他のIDEやネットワークインストールされた)ホストされたRが異なる動作を示すかもしれないさらなる理由です。

このため Sys.getenv() はRプロセスの現在のシステム環境を返すので、ライブラリなどのパスを

Sys.getenv()[ grep("LIB|PATH", names(Sys.getenv())) ]

パッケージの保存とアクセスに重要なのは、以下の2つです(Linuxボックスでは現在、異なっています)。

R_LIBS_SITE                          /usr/local/lib/R/site-library:/usr/lib/R/site-library:/usr/lib/R/library
R_LIBS_USER                          /home/david/R/x86_64-pc-linux-gnu-library/3.5.1/