Henrik Bengtsson
2014-Apr-25 18:49 UTC
[Rd] Preventing $R_HOME/site-library/ via R_LIBS_SITE=":" (no other way?)
(As a non-root/non-admin), I've just tried to figure out how to prevent a default $R_HOME/site-library/ to be added to the library path. The solution I found was to environment variable R_LIBS_SITE to ":" (preferably in ~/.Renviron). Note that setting R_LIBS_SITE to en empty string will cause it to fall back to using $R_HOME/site-library/. This "hack" is based on the following in help(".Library.site"): .Library.site is a (possibly empty) character vector giving the locations of the site libraries, by default the ?site-library? subdirectory of R_HOME (which may not exist). [...] .Library.site can be set via the environment variable R_LIBS_SITE (as a non-empty colon-separated list of library trees). It turns out that any dummy string would work (e.g. R_LIBS_SITE=non-existing-directory), but using the OS's path separator is at least according to the docs. TROUBLESHOOTING/PATCHING: I don't see an obvious elegant fix to this in R, but I believe the issue is that the system/global Rprofile (src\library\profile\Common.R) does: Sys.setenv(R_LIBS_SITE .expand_R_libs_env_var(Sys.getenv("R_LIBS_SITE"))) Here this information on whether R_LIBS_SITE is unset or empty is lost. Sys.getenv("R_LIBS_SITE", NA_character_) would distinguish the two cases. However, NA_character_ is coerced to "NA" in Sys.setenv(R_LIBS_SITE = ...), which means a site library cannot be "NA". I assume my above "hack" could be done as: local({ libs <- Sys.getenv("R_LIBS_SITE", NA_character_) libs <- if (is.na(libs)) "" else if (libs == "") .Platform$path.sep else libs Sys.setenv(R_LIBS_SITE = .expand_R_libs_env_var(libs)) }) Not elegant, but it should work. If not added, may I propose the following patch to the docs:>svn diff src\library\base\man\libPaths.RdIndex: src/library/base/man/libPaths.Rd ==================================================================--- src/library/base/man/libPaths.Rd (revision 65492) +++ src/library/base/man/libPaths.Rd (working copy) @@ -63,6 +63,8 @@ \code{.Library.site} can be set via the environment variable \env{R_LIBS_SITE} (as a non-empty colon-separated list of library trees). + To prevent the default \file{site-library} subdirectory of + \env{R_HOME} to be used, one can set \env{R_LIBS_SITE} to \code{":"}. #endif #ifdef windows The library search path is initialized at startup from the environment @@ -77,6 +79,8 @@ \code{.Library.site} can be set via the environment variable \env{R_LIBS_SITE} (as a non-empty semicolon-separated list of library trees). + To prevent the default \file{site-library} subdirectory of + \env{R_HOME} to be used, one can set \env{R_LIBS_SITE} to \code{";"}. #endif Both \env{R_LIBS_USER} and \env{R_LIBS_SITE} feature possible My $.02 - may save someone else 30 mins.