In short, the value returned by calling Sys.getenv('R_LIBS_USER')
in R.exe needs to be the same as the value returned by calling this at the command line:
Rscript.exe -e "Sys.getenv('R_LIBS_USER')"
and the above value needs to be included in this command line call:
Rscript.exe -e ".libPaths()"
Note that the values of R_LIBS_USER
may be differ between R.exe and Rscript.exe if the value of R_USER
is changed, either in the .Rprofile
or the in target field of user’s shortcut to R.exe
, and in general, I find that the user library (i.e. .libPaths()[2]
) is simply not set in Rscript.exe
Since I’m fond of setting R_USER
to my USERPROFILE
, I include the following block in at the top of .R
files that I wish to run on mulitiple computers or in Rscript.exe’s .Rprofile
(i.e. Rscript -e "path.expand('~/.Rprofile')"
):
# =====================================================================
# For compatibility with Rscript.exe:
# =====================================================================
if(length(.libPaths()) == 1){
# We're in Rscript.exe
possible_lib_paths <- file.path(Sys.getenv(c('USERPROFILE','R_USER')),
"R","win-library",
paste(R.version$major,
substr(R.version$minor,1,1),
sep='.'))
indx <- which(file.exists(possible_lib_paths))
if(length(indx)){
.libPaths(possible_lib_paths[indx[1]])
}
# CLEAN UP
rm(indx,possible_lib_paths)
}
# =====================================================================