Change R Default Library Path Using .Libpaths in Rprofile.Site Fails to Work

Change R default library path using .libPaths in fails to work

I generally try to keep all of my packages in one library, but if you want to add a library why not append the new library (which must already exist in your filesystem) to the existing library path?

.libPaths( c( .libPaths(), "~/userLibrary") )
# obviously this would need to be a valid file directory in your OS
# min just happened to be on a Mac that day

Or (and this will make the userLibrary the first place to put new packages):

.libPaths( c( "~/userLibrary" , .libPaths() ) )

Then I get (at least back when I wrote this originally):

> .libPaths()
[1] "/Library/Frameworks/R.framework/Versions/2.15/Resources/library"
[2] "/Users/user_name/userLibrary"

The .libPaths function is a bit different than most other nongraphics functions. It works via side-effect. The functions Sys.getenv and Sys.setenv that report and alter the R environment variables have been split apart but .libPaths can either report or alter its target.

The information about the R startup process can be read at ?Startup help page and there is RStudio material at:

In your case it appears that RStudio is not respecting the settings or perhaps is overriding them by reading an .Rprofile setting from one of the RStudio defaults. It should also be mentioned that the result from this operation also appends the contents of calls to .Library and, which is further reason why an RStudio- (or any other IDE or network installed-) hosted R might exhibit different behavior.

Since Sys.getenv() returns the current system environment for the R process, you can see the library and other paths with:

Sys.getenv()[ grep("LIB|PATH", names(Sys.getenv())) ]

The two that matter for storing and accessing packages are (now different on a Linux box):

R_LIBS_SITE                          /usr/local/lib/R/site-library:/usr/lib/R/site-library:/usr/lib/R/library
R_LIBS_USER /home/david/R/x86_64-pc-linux-gnu-library/3.5.1/

How do I change the default library path for R packages

See help(Startup) and help(.libPaths) as you have several possibilities where this may have gotten set. Among them are

  • setting R_LIBS_USER
  • assigning .libPaths() in .Rprofile or

and more.

In this particular case you need to go backwards and unset whereever \\\\The library/path/I/don't/want is set.

To otherwise ignore it you need to override it use explicitly i.e. via

library("somePackage", lib.loc=.libPaths()[-1])

when loading a package.

Change default library path for one session only in R

Functions in R that load packages do so by querying the active library paths, as provided by .libPaths():

> .libPaths()
[1] "/Users/kevinushey/Library/R/4.0/library"
[2] "/Library/Frameworks/R.framework/Versions/4.0/Resources/library"

You can customize the library paths used in a particular session with the same function -- just pass it the library paths you wish to use. For example:

> dir.create("~/r-lib")
> .libPaths("~/r-lib")
> .libPaths()
[1] "/Users/kevinushey/r-lib"
[2] "/Library/Frameworks/R.framework/Versions/4.0/Resources/library"

Then library(), :: and so on will load packages from those library paths.

Note that system-wide and site-wide library paths will always be appended to your requested library paths -- see ?.libPaths for more details.

How to properly set up the library directory/path in R

I would suggest you don't want a single directory for packages, since a number of base packages come with R. Instead you want a single directory where a user will install packages.

Create a .Renviron file and add the environment variable R_LIBS pointing to the directory you want your packages to end up in. On my machine, I have

# Linux 

Or if you have Windows something like

# Windows

Your .libPaths() would now look something like

R> .libPaths()
[1] "/data/Rpackages" "/usr/lib/R/site-library"

This means that when I install a package it goes to /data/ncsg3/Rpackages

If you really want to only have a single directory, you can set the R_LIBS_SITE variable to omit the default directories.

How to change and remove default library location?

Here be dragons.

assign(".lib.loc", "\your\preferred\library", envir = environment(.libPaths))

Related Topics

Leave a reply