Package Paths in R

March 31, 2018
By

(This article was first published on R – Quintuitive, and kindly contributed to R-bloggers)

Recently, while working on the Azure Data Lake R extension, I had to figure out a good way to create a zip file containing a package together with all its dependencies. This came down to understanding where does R store and search for packages. Despite the documentation, it did require additional reading and experimentation.

First, the accompanying video:

Before getting into package search paths, let’s first figure out how does an R package look in the file system:

An R package is a folder somewhere in the file system. Above quantmod, TTR, xts and zoo are all folders each containing the corresponding package. For these packages to be found by R, the rsite folder (its absolute path, for instance c:/users/ivannp/rsite) needs to be added to R’s search path.

R’s package search path is reported by the .libPaths() function (invoked without arguments). The result is a vector of strings, each representing a path containing packages. When the user requests a package to be loaded (via require or via library), R searches for the package in each path of the list, starting with the first. If the package is found, it is loaded and the search finishes. Thus, it is important to understand how the vector of paths is build.

The last element of the path is R’s distribution library path. On Windows this could be:

C:/Program Files/R/R-3.4.2/library

This path cannot be removed. Calling .libPaths(”) (with an empty string) will remove all other entries but the library sub-directory of the distribution.

There are three environment variables which control the content of the path vector:

  • R_LIBS
  • R_LIBS_USER
  • R_LIBS_SITE

The content of these environment variables is added to the package search path in the order listed. First R_LIBS, then R_LIBS_USER and finally R_LIBS_SITE.

If none of the three environment variables is defined, R will append a default path to the search list. This path is platform dependent. On Windows it is something like:

C:/Users/user/Documents/R/win-library/3.4

To avoid depending on this behavior, I typically have R_LIBS_USER set. On Windows, make sure that the path doesn’t end with slash (‘/’ or ‘\’). According to .libPaths() documentation, paths ending on a slash are invalid, and R silently ignores them.

Will all this knowledge, the solution to the original problem – how to create a zip containing a package together with all its dependencies, is clear:

.libPaths('') # Cleanup any additional paths the user might have
dir.create('packages') # Create the directory
.libPaths('packages') # To add packages to the R search folders
install.packages('ggplot2') # Install all
zip('packages.zip', 'packages') # Create the zip

The above script create packages.zip containing ggplot2 and all its dependencies. A local folder packages is used in the process. That’s assuming there are no additional packages in R’s root installation.

The post Package Paths in R appeared first on Quintuitive.

To leave a comment for the author, please follow the link and comment on their blog: R – Quintuitive.

R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: Data science, Big Data, R jobs, visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...



If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Comments are closed.

Search R-bloggers


Sponsors

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)