パッケージが複数のライブラリにインストールされている場合はどうなりますか? たとえば、Debian/Ubuntu では、apt-get を介して debian 化されたパッケージをインストールし、CRAN から同じパッケージの最新バージョンを直接インストールすることもできます。library() を使用する場合、最新のパッケージが読み込まれますか、それとも .libPaths() の順序に依存しますか?
3 に答える
私の理解では、それは.libPaths()の順序に依存するでしょう。これはからのコードですlibrary
if (!missing(package)) {
if (is.null(lib.loc))
lib.loc <- .libPaths()
lib.loc <- lib.loc[file.info(lib.loc)$isdir %in% TRUE]
# >>>> snipped code
newpackage <- is.na(match(pkgname, search()))
if (newpackage) {
pkgpath <- find.package(package, lib.loc, quiet = TRUE,
verbose = verbose)
if (length(pkgpath) == 0L) {
# snipped
そしてこれはのヘルプページからですfind.package
Details
find.package returns path to the locations where the given packages are found.
If lib.loc is NULL, then attached packages are searched before the libraries.
If a package is found more than once, the first match is used.
また、複数のインスタンスがある場合は、find.package
コードの読み取りに基づいて警告が表示されるはずです(「verbose」をFALSEに設定した場合を除く)。
if (length(paths) > 1L) {
paths <- paths[1L]
if (verbose)
warning(gettextf("package %s found more than once,\n
using the one found in %s",
sQuote(pkg), sQuote(paths)), domain = NA)
他の人がすでに述べたように、.libPaths()
検索順序が重要であるため、特にDebian安定版または更新されていないUbuntuリリースでは、ディストリビューションバージョンが古い可能性が高いため、ローカルパッケージが最初に検索されるように設定しました。
/etc/R/Renviron
それを設定するファイルにこの効果へのコメントがあります:
# edd Apr 2003 Allow local install in /usr/local, also add a directory for
# Debian packaged CRAN packages, and finally the default dir
# edd Jul 2007 Now use R_LIBS_SITE, not R_LIBS
R_LIBS_SITE=${R_LIBS_SITE-'/usr/local/lib/R/site-library:/usr/lib/R/site-library:/usr/lib/R/library'}
したがって、のユーザー設定値がR_LIBS_SITE
優先されます。それ以外の場合は、ここに示されている値が使用されます。
apt-get を使用してパッケージをインストールすると、sudo ユーザーになるため、ライブラリはシステム全体の場所 (通常は /usr/lib/R) にインストールされます。
CRAN を使用するときは、sudo または通常のユーザーでもかまいません。最初のケースでは、パッケージはシステム全体にインストールされます (apt-get を使用してインストールされたファイルを上書きします)。2 番目のケースでは、パッケージはユーザーの $HOME/R にインストールされます。
パッケージが /usr/lib/R と $HOME/R の両方に存在する場合、ロード時に .libPaths() の最初の場所 (通常は $HOME/R) が使用されます。
編集: Dirk が指摘したように、システム全体のインストールは、/usr/lib/R ではなく、/usr/local/lib/R/ に移動する必要があります。ただし、私の一般的なポイントは次のとおりです。インストール場所はユーザーのアクセス許可に依存し、ロードの順序は .libPaths() に依存します。