Skip to content

R

R is an interpreted computer language for statistical computing and graphics including: linear and generalised linear models, non-linear regression models, time series analysis, classical parametric and non-parametric tests.

For efficiency, procedures written in the C, C++, or Fortran languages may be interfaced within R in addition to the user-visible R functions.

R is available as a module on Apocrita.

R can also be used via Conda, please see this blog post for more information.

For interactive graphical R usage in RStudio, please see our separate documentation for RStudio via Open OnDemand.

Usage

To run the default installed version of R, simply load the R module:

$ module load R
$ R --help

Usage: R [options] [< infile] [> outfile]

For further usage documentation, see the full output of R --help or Rscript --help.

R can be executed through the 'R CMD' interactive interface using R or via the Rscript non-interactive interface. The Rscript binary provides an alternative front end to the legacy R CMD BATCH method to run R commands in a non-interactive shell.

Spack environment (R 4.5.1 and RStudio 2025 and older only)

R 4.6.1 and RStudio 2026 and newer no longer use a Spack Environment

R modules for 4.6.1 and RStudio 2026 and newer no longer use a Spack Environment. Please see this blog post for more information.

[r-libraries-x.y.z] is the name of the Spack environment that has been activated alongside the R module load. This Spack environment contains many of the most common additional libraries (such as HDF5, GDAL, GEOS, PROJ and many more) required to install popular R packages into your personal R library, without the need to load any separate additional modules. See below for a full list of packages and libraries contained in each Spack environment.

R/4.5.1 - [r-libraries-0.23.1.1] (click to expand)
Package Version
autoconf 2.72
autoconf-archive 2023.02.20
automake 1.16.5
bdftopcf 1.1
berkeley-db 18.1.40
bison 3.8.2
boost 1.86.0
bzip2 1.0.8
c-blosc 1.21.5
ca-certificates-mozilla 2023-05-30
cairo 1.16.0
cmake 3.27.9
cmake 3.30.5
curl 8.7.1
diffutils 3.10
elfutils 0.190
expat 2.6.2
fftw 3.3.10
findutils 4.9.0
flex 2.6.3
font-util 1.4.0
fontconfig 2.15.0
fontsproto 2.1.3
freetype 2.13.2
fribidi 1.0.12
gawk 5.3.0
gcc 14.2.0
gcc-runtime 11.4.1
gcc-runtime 12.2.0
gcc-runtime 14.2.0
gdal 3.10.0
gdbm 1.23
gdk-pixbuf 2.42.12
geos 3.13.0
gettext 0.22.5
git 2.47.0
glib 2.78.3
glibc 2.34
glpk 5.0
gmake 4.4.1
gmp 6.2.1
gobject-introspection 1.78.1
gperf 3.1
gsl 2.8
harfbuzz 10.0.1
hdf5 1.14.5
icu4c 67.1
imagemagick 7.1.1-39
inputproto 2.3.2
intltool 0.51.0
jags 4.3.2
json-c 0.16
json-glib 1.6.6
kbproto 1.0.7
krb5 1.20.1
libaec 1.0.6
libbsd 0.12.1
libedit 3.1-20230828
libffi 3.4.6
libfontenc 1.1.8
libgeotiff 1.7.1
libgit2 1.7.2
libidn2 2.3.7
libjpeg-turbo 3.0.0
libmd 1.0.4
libpng 1.6.39
libpthread-stubs 0.5
librsvg 2.56.2
libsigsegv 2.14
libssh2 1.11.0
libtiff 4.5.1
libtool 2.4.7
libunistring 1.2
libwebp 1.4.0
libx11 1.8.10
libxau 1.0.11
libxcb 1.17.0
libxcrypt 4.4.35
libxdmcp 1.1.4
libxext 1.3.6
libxfont 1.5.4
libxft 2.3.8
libxml2 2.10.3
libxrender 0.9.11
lz4 1.9.4
m4 1.4.19
meson 1.3.2
mkfontdir 1.0.7
mkfontscale 1.2.3
mpc 1.3.1
mpfr 4.2.1
nasm 2.15.05
ncurses 6.5
netcdf-c 4.9.2
nghttp2 1.57.0
ninja 1.11.1
openblas 0.3.26
openjdk 17.0.11_9
openmpi 5.0.5-nogpfs
openssh 9.7p1
openssl 3.3.0
pango 1.54.0
pcre 8.45
pcre2 10.43
perl 5.38.0
perl-clone 0.46
perl-encode-locale 1.05
perl-extutils-config 0.008
perl-extutils-helpers 0.026
perl-extutils-installpaths 0.012
perl-file-listing 6.04
perl-html-parser 3.72
perl-html-tagset 3.20
perl-http-cookies 6.10
perl-http-daemon 6.01
perl-http-date 6.02
perl-http-message 6.44
perl-http-negotiate 6.01
perl-io-html 1.004
perl-libwww-perl 6.68
perl-lwp-mediatypes 6.02
perl-module-build 0.4232
perl-module-build-tiny 0.044
perl-net-http 6.22
perl-test-needs 0.002010
perl-try-tiny 0.31
perl-uri 5.08
perl-www-robotrules 6.02
perl-xml-parser 2.46
pigz 2.8
pixman 0.42.2
pkgconf 2.2.0
proj 9.4.1
py-docutils 0.20.1
py-pip 23.1.2
py-setuptools 69.2.0
py-wheel 0.41.2
python 3.11.7
python-venv 1.0
re2c 2.2
readline 8.2
renderproto 0.11.1
rust 1.78.0
rust-bootstrap 1.78.0
shared-mime-info 1.10
snappy 1.1.10
sqlite 3.43.2
tar 1.34
texinfo 7.0.3
udunits 2.2.28
util-linux-uuid 2.38.1
util-macros 1.19.3
which 2.21
xcb-proto 1.17.0
xextproto 7.3.0
xproto 7.0.31
xtrans 1.5.0
xz 5.4.6
zlib-ng 2.1.6
zstd 1.5.6
R/4.4.1 - [r-libraries-0.23.1] (click to expand)
Package Version
autoconf 2.72
autoconf-archive 2023.02.20
automake 1.16.5
bdftopcf 1.1
berkeley-db 18.1.40
bison 3.8.2
boost 1.85.0
bzip2 1.0.8
c-blosc 1.21.5
ca-certificates-mozilla 2023-05-30
cairo 1.16.0
cmake 3.27.9
curl 8.7.1
diffutils 3.10
elfutils 0.190
expat 2.6.2
fftw 3.3.10
findutils 4.9.0
flex 2.6.3
font-util 1.4.0
fontconfig 2.15.0
fontsproto 2.1.3
freetype 2.13.2
fribidi 1.0.12
gawk 5.3.0
gcc 12.2.0
gcc-runtime 11.4.1
gcc-runtime 12.2.0
gdal 3.8.5
gdbm 1.23
gdk-pixbuf 2.42.12
geos 3.12.1
gettext 0.22.5
git 2.42.0
glib 2.78.3
glibc 2.34
glpk 5.0
gmake 4.4.1
gmp 6.2.1
gobject-introspection 1.78.1
gperf 3.1
gsl 2.7.1
harfbuzz 8.3.0
hdf5 1.14.3
icu4c 67.1
imagemagick 7.1.1-29
inputproto 2.3.2
intltool 0.51.0
jags 4.3.2
json-c 0.16
json-glib 1.6.6
kbproto 1.0.7
krb5 1.20.1
libaec 1.0.6
libbsd 0.12.1
libedit 3.1-20230828
libffi 3.4.6
libfontenc 1.1.8
libgeotiff 1.7.1
libgit2 1.7.2
libidn2 2.3.7
libjpeg-turbo 3.0.0
libmd 1.0.4
libpng 1.6.39
libpthread-stubs 0.5
librsvg 2.56.2
libsigsegv 2.14
libssh2 1.11.0
libtiff 4.5.1
libtool 2.4.7
libunistring 1.2
libx11 1.8.10
libxau 1.0.11
libxcb 1.17.0
libxcrypt 4.4.35
libxdmcp 1.1.4
libxext 1.3.6
libxfont 1.5.4
libxft 2.3.8
libxml2 2.10.3
libxrender 0.9.11
lz4 1.9.4
m4 1.4.19
meson 1.3.2
mkfontdir 1.0.7
mkfontscale 1.2.3
mpc 1.3.1
mpfr 4.2.1
nasm 2.15.05
ncurses 6.5
netcdf-c 4.9.2
nghttp2 1.57.0
ninja 1.11.1
openblas 0.3.26
openjdk 11.0.20.1_1
openmpi 5.0.3-nogpfs
openssh 9.7p1
openssl 3.3.0
pango 1.54.0
pcre 8.45
pcre2 10.43
perl 5.38.0
perl-clone 0.46
perl-encode-locale 1.05
perl-extutils-config 0.008
perl-extutils-helpers 0.026
perl-extutils-installpaths 0.012
perl-file-listing 6.04
perl-html-parser 3.72
perl-html-tagset 3.20
perl-http-cookies 6.10
perl-http-daemon 6.01
perl-http-date 6.02
perl-http-message 6.44
perl-http-negotiate 6.01
perl-io-html 1.004
perl-libwww-perl 6.68
perl-lwp-mediatypes 6.02
perl-module-build 0.4232
perl-module-build-tiny 0.044
perl-net-http 6.22
perl-test-needs 0.002010
perl-try-tiny 0.31
perl-uri 5.08
perl-www-robotrules 6.02
perl-xml-parser 2.46
pigz 2.8
pixman 0.42.2
pkgconf 2.2.0
proj 9.2.1
py-docutils 0.20.1
py-pip 23.1.2
py-setuptools 69.2.0
py-wheel 0.41.2
python 3.11.7
python-venv 1.0
re2c 2.2
readline 8.2
renderproto 0.11.1
rust 1.78.0
rust-bootstrap 1.78.0
shared-mime-info 1.10
snappy 1.1.10
sqlite 3.43.2
tar 1.34
texinfo 7.0.3
udunits 2.2.28
util-linux-uuid 2.38.1
util-macros 1.19.3
which 2.21
xcb-proto 1.17.0
xextproto 7.3.0
xproto 7.0.31
xtrans 1.5.0
xz 5.4.6
zlib-ng 2.1.6
zstd 1.5.6

Example jobs

Do not use detectCores() for makeCluster()

detectCores() is not cluster aware and will incorrectly return all cores on a machine even if they are not actually available.

The documentation for R covers this:

"This is not suitable for use directly for ... specifying the number of cores in makeCluster.
First because it may return NA, second because it does not give the number of allowed cores"

We advise specifying the number of cores directly, using the SLURM_NTASKS Slurm variable:

library(parallel); cluster <- makeCluster(ntasks)

Serial job

Here is an example job running on 2 cores and 4GB total memory:

#!/bin/bash
#SBATCH --ntasks=2        # (or -n 2) Request 2 cores
#SBATCH --mem-per-cpu=2G  # Request 2GB RAM per core (4GB total)
#SBATCH --time=1:0:0      # (or -t 1:0:0) Request 1 hour runtime

module load R
Rscript myscript.R

Using Rscript within Apocrita jobs

When running R jobs on Apocrita, use Rscript to submit a file containing R commands; R output will be written to the stdout and stderror streams.

Additional R Packages

Don't use renv for versions older than R 4.6.1 or RStudio 2026!

The renv project manager has become popular, but we only support its use when using R modules for 4.6.1 and RStudio 2026 and newer, as we explicitly changed how R runs for those versions (see this blog post for more information).

renv aggressively caches existing binaries. When using R 4.5.1 and/or RStudio 2025 or older on Apocrita, sometimes the cached binaries for personal installs aren't compatible with all environments and can cause issues. If you want to integrate renv into your work on Apocrita, please use R 4.6.1 and/or RStudio 2026 or newer.

Additional packages can be installed to extend the capabilities of R using the install.packages() command. Personally installed packages are stored in libraries.

Do not use a login node for installing R packages

Installing R packages requires a reasonably large amount of resources as some packages may be compiled from source. Do not use a login node for these installations. Please use an interactive salloc session.

More detailed information about optimal resources for installing R packages can be found in this blog post, but most users should request a maximum of 8 cores, 2GB RAM per core for 8x2GB=16GB total for 24 hours (you can exit your session earlier if all package installs are complete, but one hour probably won't be enough):

salloc -n 8 --mem-per-cpu=2G -t 24:0:0

Alternatively, you can also run package installation interactively in an RStudio session, or unattended in a job script requesting similar resources.

Personal R libraries

By default, personal packages will be installed into:

/data/home/abc123/R/x86_64-pc-linux-gnu-library/<VERSION>

If this doesn't exist the first time you run an install.packages() command, the interactive R shell will offer to create it and ask for confirmation:

Warning in install.packages("<package_name>") :
  'lib = "/opt/R/<VERSION>/lib/R/library"' is not writable
Would you like to use a personal library instead? (yes/No/cancel) yes
Would you like to create a personal library
'/data/home/abc123/R/x86_64-pc-linux-gnu-library/<VERSION>'
to install packages into? (yes/No/cancel) yes

The Rscript non-interactive R command won't offer to create a personal library for you. If you run an R script via the Rscript command and it can't find a writable personal library location, the script will fail. You can overcome this either by installing a simple package in an interactive R shell prior to running the Rscript, or creating a personal library location in advance before submitting any script, e.g.:

mkdir -p ${HOME}/R/x86_64-pc-linux-gnu-library/<VERSION>

To display the list of active libraries, execute:

> .libPaths()
[1] "/data/home/abc123/R/x86_64-pc-linux-gnu-library/<VERSION>"
[2] "/opt/R/<VERSION>/lib/R/library"

Customising personal library location

Set your custom library path in each new session or job script

R will always default to /data/home/abc123/R/x86_64-pc-linux-gnu-library/<VERSION> every time it is launched. Make sure you manually set .libPaths() at the start of every job script or R session if you wish to use an alternative personal library location.

You may wish to store your library in an alternative location such as in your Research Group storage space to allow collaboration with others. You may also wish to have multiple personal libraries.

You can change your library location using the .libPaths() command. Note, in this case, the directory you wish to use must already exist:

.libPaths("/custom/path/to/library")

You can check the new path has been set:

> .libPaths()
[1] "/custom/path/to/library"   "/opt/R/<VERSION>/lib/R/library"

All subsequent package installations in that session will then be written to this new location.

Displaying loaded packages

To display the list of currently loaded packages (including default packages), execute:

> (.packages())
[1] "stats"     "graphics"  "grDevices" "utils"     "datasets"  "methods"
[7] "base"

To display all packages available in the currently loaded libraries, execute:

> .packages(all.available = TRUE)
 [1] "base"       "boot"       "class"      "cluster"    "codetools"
 [6] "compiler"   "datasets"   "foreign"    "graphics"   "grDevices"
...

To install additional R packages, execute:

> install.packages("<package_name>")

Packages which are not included in the R main library will be added to the personal library.

To load an R package, execute:

> library("<package_name>")

To find the location where a package is installed, execute:

> find.package("<package_name>")
[1] "/path/to/package"

R packages with external dependencies

Installing an R package will automatically install other R packages on which that package depends. However, R packages often depend on software packages provided outside R, such as C libraries. These packages may be provided via the container R runs from (for R 4.6.1 or newer) or the Spack environment (for R 4.5.1 or older) that is activated alongside the R module.

For example, the library gdal is required to build the rgdal R package and the library gmp is required for several numerical R packages. Both are included as part of the container R runs from (for R 4.6.1 or newer) or Spack environment (for R 4.5.1 or older) that is activated automatically when you load an R module.

If you find a missing external dependency you think you need to install a specific R package, please raise a ticket with us and we can look into it.

R packages using code in other languages

The container R runs from (for R 4.6.1 or newer) or Spack environment (for R 4.5.1 or older) that is activated automatically when you load an R module will provide an appropriate version of the GCC compiler for manual compilation.

R packages which compile code written in other languages, such as C or Fortran, often use a Makevars options file to determine how that code is compiled. When you launch an R shell after loading an Apocrita R module, an appropriate opinionated Makevars file is automatically loaded which has been heavily tested and will provide appropriate compilation flags for the majority of users.

Should you feel you need to change your Makevars arguments, please raise a ticket so we can help you.

Bioinformatics packages for R

Bioinformatics packages for R can be installed with the bioconductor script and then loaded like a normal R package. You can install a package using:

if (!require("BiocManager", quietly = TRUE))
  install.packages("BiocManager")
BiocManager::install("<package_name>")

References