How do I set R_LIBS_SITE on Ubuntu so that .libPat

2019-04-14 06:55发布

I am setting up a cluster where all nodes have access to /nfs/software, so a good place to install.packages() would be under /nfs/software/R. How do I set R_LIBS_SITE so that this is automatically part of all users' R environment? I tried prepending to the path given for R_LIBS_SITE in /etc/R/Renviron but help(Startup) says "do not change ‘R_HOME/etc/Renviron’ itself", which I'm not sure is the same file since R_HOME expands to /usr/lib/R, but has no effect in any case. Making entries in the various Renviron.site and Rprofile.site files does not seem to have the desired effect. What am I missing here?

Some other questions have danced around this (here and here, maybe others), but people seem to settle for having a user-specific library in their HOME.

标签: r packages
2条回答
姐就是有狂的资本
2楼-- · 2019-04-14 07:24

Make sure you have owner and/or group write permissions for the directory you want to write into.

The file /etc/R/Renviron.site is the preferred choice for local overrides to /etc/R/Renviron.

Another way is to simply ... impose the directory when installing packages. I tend to do that on the (bash rather than R) shell via this script derived from an example in the littler package:

$ cat bin/install.r 
#!/usr/bin/env r
#
# a simple example to install one or more packages

if (is.null(argv) | length(argv)<1) {

  cat("Usage: installr.r pkg1 [pkg2 pkg3 ...]\n")
  q()

}

## adjust as necessary, see help('download.packages')
repos <- "http://cran.us.r-project.org"
#repos <- "http://cran.r-project.org"

## this makes sense on Debian where no packages touch /usr/local
lib.loc <- "/usr/local/lib/R/site-library"

install.packages(argv, lib.loc, repos)

and you can easily customize a helper like this for your preferred location. With the script installed in ~/bin/, I often do

$ ~/bin/install.r xts plyr doRedis

and it will faithfully install these packages along with their depends. The littler package has a similar script update.r.

查看更多
劳资没心,怎么记你
3楼-- · 2019-04-14 07:37

follow-up on Dirk Eddelbuettel (thanks Dirk!)

an adaptation of Dirk's suggestion that may be run within R:

# R function to install one or more packages
Rinstall <- function(pkg) {
  if (is.null(pkg) | length(pkg)<1) {
    q()
  }
  if(.Platform$OS.type == "windows") {
  lib.dir <- "c:/R/library"
  } else {
  lib.dir <- "~/R/library"
  }
  repos.loc <- "http://cran.us.r-project.org"
  install.packages(pkg, lib.dir, repos.loc, dependencies=c('Depends','Suggests'))  # make sure you get dependencies
}

Usage:

Rinstall(c("package1", "package2"))

Naturally you want to adapt the repos.loc and lib.dir based on your system. As I work on both Windows and Linux machines I also inserted a conditional statement to check which system I'm on.

P.S. Don't hesitate to simplify the code, I'm a total newbie.

查看更多
登录 后发表回答