Managing R Packages
Standard R Packages
Standard R packages that are available through the CRAN repositories are
installed using the install.packages()
command from within the R command
shell, here <VERSION>
represents the R release version:
$ module load R/<VERSION>
$ R
> install.packages("package_name")
As a normal user the default system location will not be writable for you so R will ask if you want to install into a personal library:
Installing Additional R-Packages
Warning in install.packages("package_name") :
'lib = "/.../.../.../.../.../R/<VERSION>/lib64/R/library"' is not writable
Would you like to use a personal library instead?
/.../.../.../.../.../
represents the system install path for R. Typically
this personal library will be a directory in your home directory e.g. ~/R/x86_64-unknown-linux-gnu-library/<VERSION>/
You may see a prompt mentioning which server to download the package from, select a server of your choice and proceed. Once the installation is complete, you may load the newly installed package in your R script or shell using:
> library("package_name")
Package Dependencies
Some R packages in the CRAN repository require no additional dependencies and
may be simply installed as above. Many, however, depend on external libraries
and may have source code that needs to be compiled. Therefore, you must
have loaded the necessary modules to satisfy the requirements of the package --
including at least a compiler (e.g. gnu10
on HOPPER), or have the required
dependencies satisfied some other way. An example of an alternative method,
would be to have compiled the necessary software in your own home directory and
configured your environment so that the R process will be able to access any
necessary include files and libraries.
Standard R Packages - Non-standard Locations
To install an R package to a specific location you need to specify the
location in the install.packages
command:
> install.packages("package_name", lib="/custom/path/to/R-packages/")
To load this package once it has been installed you need to modify the library command to include the location of the package:
> library("package_name", lib.loc="/custom/path/to/R-packages/")
For conveniance you may add a custom library path to the R environment which mitigates the need to specify the library path (like above) each time a library is loaded. This can be done in several ways, here is a good thread on the topic.
Non-standard R Packages
Many users want to install packages that are not in the standard CRAN repos.
For example from GitHub, or other locations. There is a libarary available in
CRAN called devtools
which is able to simplfy the process of install such
packages. The devtools
module should be available in all ORC R versions. To
install a package from GitHub for example you can use the command:
> library("devtools")
> devtools::install_github("<package_identifier>")
Where <package_identifier>
will be a string which references the package name
in the GitHub repository.
Here too any dependencies will need to be made available to the R environment before installing the package.
Self-contained R Environments
The standard R use of a single per-user location for local package installation
creates difficulty if a user wants to use several different versions of a
package or possibly conflicting packages. It is possible to craft a
configuration using custom package locations and envirnomemnt tweaks, however
it is difficult to maintain and fragile. An equivalent to
python virtual environments
is really what is needed
Fortunately there are R packages that provides such functionality, they are
Renv
and Packrat.
Renv is a newer package that addresses some of the
shortcomings of packrat while retaining the same basic command structure
and workfow. The ORC recommends using Renv and it should be available in the
installed packages of all R installations on Hopper and Argo.
The official Renv documentation can be found here.
Renv Basic Operation
Renv uses a separate "Project"
directory for each environment.
The user should first create a directory and make that directory their current
working directory before running R. For example:
~$ mkdir ~/New_Project
~$ cd ~/New_Project
~/New_Project$ R
R version
...snipped...
Type 'q()' to quit R.
> library("renv")
Attaching package: ‘renv’
The following object is masked from ‘package:stats’:
update
The following objects are masked from ‘package:utils’:
history, upgrade
The following objects are masked from ‘package:base’:
load, remove
> renv::init()
Welcome to renv!
It looks like this is your first time using renv. This is a one-time message,
briefly describing some of the renv functionality.
renv maintains a local cache of data on the filesystem, located at:
- '~/.local/share/renv'
This path can be customized: please see the documentation in `?renv::paths`.
renv will also write to files within the active project folder, including:
- A folder 'renv' in the project directory, and
- A lockfile called 'renv.lock' in the project directory.
In particular, projects using renv will normally use a private, per-project
R library, in which new packages will be installed. This project library is
isolated from other R libraries on your system.
In addition, renv will update files within your project directory, including:
- .gitignore
- .Rbuildignore
- .Rprofile
Please read the introduction vignette with `vignette("renv")` for more information.
You can browse the package documentation online at https://rstudio.github.io/renv/.
Do you want to proceed? [y/N]: y
* '~/.local/share/renv' has been created.
* Initializing project ...
* Discovering package dependencies ... Done!
* Copying packages into the cache ... Done!
The following package(s) will be updated in the lockfile:
# CRAN ===============================
- renv [* -> 0.13.2]
* Lockfile written to '~/New_Project/renv.lock'.
* Project '~/New_Project' loaded. [renv 0.13.2]
* renv activated -- please restart the R session.
>
install.packages()
and, after first installing the devtools
packages,
any package they wish from GitHub or any other source supported by devtools
.
Packages will be installed in the project directory under a directory called
renv
.
renv
creates a custom .Rprofile file in the project directory, so that if
you launch R in this directory the only packages you will have avalable beyond
the core R libraries are those that you have explicitly installed in this
environment.
Portability
Renv projects are very portable. Users may clone the .Rprofile
,renv.lock
files and the renv
directory to a new location and create an identical
environment in a different location. If the user wants to move the project
to a new cluster or computer, renv includes a snapshot method which enables
the entire project to be moved to a new system. Please review the documentation
(linked above) for more detailed instructions.