8

パッケージが複数のライブラリにインストールされている場合はどうなりますか? たとえば、Debian/Ubuntu では、apt-get を介して debian 化されたパッケージをインストールし、CRAN から同じパッケージの最新バージョンを直接インストールすることもできます。library() を使用する場合、最新のパッケージが読み込まれますか、それとも .libPaths() の順序に依存しますか?

4

3 に答える 3

5

私の理解では、それは.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)
于 2012-01-08T22:02:27.077 に答える
5

他の人がすでに述べたように、.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優先されます。それ以外の場合は、ここに示されている値が使用されます。

于 2012-01-08T23:15:14.757 に答える
0

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() に依存します。

于 2012-01-08T22:31:47.617 に答える