这是这个问题的一个有点概括的版本。我该如何设置R_LIBS_SITE?我无法在 CentOS 7.2 和 openSUSE 42.1 以及最新的 R 3.3.1 上获得正确的值。
在 CentOS 7.2 (Linux x86_64) 上,使用 EPEL 的 R,我得到:
R version 3.3.1 (2016-06-21) -- "Bug in Your Hair"
...
Platform: x86_64-redhat-linux-gnu (64-bit)
...
> .libPaths()
[1] "/usr/lib64/R/library" "/usr/share/R/library"
> .Library
[1] "/usr/lib64/R/library"
> .Library.site
[1] "/usr/lib64/R/library" "/usr/share/R/library"
> R.home(component = "home")
[1] "/usr/lib64/R"
Run Code Online (Sandbox Code Playgroud)
然而,相应的 Renviron 包括以下内容:
$ grep R_LIBS_SITE /usr/lib64/R/etc/Renviron
R_LIBS_SITE=${R_LIBS_SITE-'/usr/local/lib/R/site-library:/usr/local/lib/R/library:/usr/lib64/R/library:/usr/share/R/library'}
Run Code Online (Sandbox Code Playgroud)
显然,当我启动 R 时,此设置未正确应用。但是,会应用同一文件中的 R_LIBS_USER 等更改。另外,R_LIBS_SITE并没有被完全忽略,因为将其设置为
R_LIBS_SITE='/usr/local/lib/R/site-library'
Run Code Online (Sandbox Code Playgroud)
产生
> .Library.site
character(0)
Run Code Online (Sandbox Code Playgroud)
我不知道哪里R_LIBS_SITE可以被其他地方覆盖。当我启动 R 时,我会得到相同的行为
R --no-environ --no-site-file --no-init-file
Run Code Online (Sandbox Code Playgroud)
我可以使用 openSUSE 重现类似的行为。
或者是否有另一种推荐的方法来设置在所有用户之间共享的包站点?
该问题的可能解释是某些目录不存在。不存在的目录将从列表中默默删除。所以,如果你设置
R_LIBS_SITE='/usr/local/lib/R/site-library'
并且该目录不存在,.Library.site将是一个空字符串(如您的示例中所示)。按照示例的输出,如果目录/usr/local/lib/R/site-library和/usr/local/lib/R/library不存在,它们将从文件中给出的列表中静默删除R_LIBS_SITE(Renviron再次像在输出中一样)。