Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

https://hbctraining.github.io/Intro-to-R-flipped/lessons/04_introR_packages.html#:~:text=The%20directories%20in%20R%20where,the%20community%20to%20resolve%20this.

The directories in R where the packages are stored are called the libraries. The terms package and library are sometimes used synonymously and there has been discussion amongst the community to resolve this.

https://www.r-bloggers.com/2013/01/packages-v-libraries-in-r/

Code Block[salexan5@blog2 r]$ cat README.ARCC We've created an R related workshop specific module file that loads the various additional modules (including openmpi/hdf5). Use by calling from the command-line: []$ module use /project/biocompworkshop/software/modules []$ module loadGoal: Demonstrate how to use an R library to create a shared set of R packages.

...

Table of Contents
stylenone

...

Use Case

Consider the following use cases:

  • You’re collaborating on some research and want users of the project to use the same R environment and set/version of a collection of R packages.

  • You’re leading a workshop and want all attendees to learn using the same environment.

In both cases we can setup an R library within a shared location, such as a project folder, which all users can access, and thus use the same set of packages.

...

General Process

The general process for this is:

  1. Create a folder in a shared location.

  2. Load and start R.

  3. Update the library paths to point to this location.

  4. Install R packages.

Every time this is to be used:

  1. Load and start R.

  2. Update the library paths to point to this location.

...

Example

Code Block
# Create R Library folder:
[salexan5@mblog2 ~]$ cd /project/arcc/software/
[salexan5@mblog2 software]$ mkdir -p r_library/r_workshop
[salexan5@mblog2 r_library]$ cd r_workshop/
[salexan5@mblog2 r_workshop]$ pwd
/project/arcc/software/r_library/r_workshop

# Load and Start R
[salexan5@mblog2 ~]$ module load gcc/13.2.0 r/4.4.0

...


[salexan5@mblog2 ~]$ R

#

...

 Check current library paths:
> .libPaths()
[1] "/cluster/medbow/home/salexan5/R/x86_64-pc-linux-gnu-library/4.4"
[2] "/apps/u/spack/gcc/13.2.0/r/4.4.0-pvzi4gp/rlib/R/library"

...

Create Current Available R Packages

Code Block
> write.table(installed.packages()[,c(1,2,3:4)])
"Package" "LibPath" "Version" "Priority"
"class" "class" "/cluster/medbow/home/salexan5/R/x86_64-pc-linux-gnu-library/4.4" "7.3-22" "recommended"
...
"XML" "XML" "/cluster/medbow/home/salexan5/R/x86_64-pc-linux-gnu-library/4.4" "3.99-0.17" NA
"base" "base" "/apps/u/spack/gcc/13.2.0/r/4.4.0-pvzi4gp/rlib/R/library" "4.4.0" "base"
...
"utils" "utils" "/apps/u/spack/gcc/13.2.0/r/4.4.0-pvzi4gp/rlib/R/library" "4.4.0" "base"
Info

Note: We can current see packages installed:

  1. Under our home folder.

  2. Base packages installed as part of this R version.

...

Update the Library Path

Code Block
> .libPaths(c('/project/

...

arcc/software/r

...

_library/r_workshop', '/apps/u/spack/gcc/12.2.0/r/4.4.0-7i7afpk/rlib/R/library'))

...

> write.table(installed.packages()[,c(1,2,3:4)])
"Package" "LibPath" "Version" "Priority"
"base" "base" "/apps/u/spack/gcc/13.2.0/r/4.4.0-pvzi4gp/rlib/R/library" "4.4.0" "base"
...
"utils" "utils" "/apps/u/spack/gcc/13.2.0/r/4.4.0-pvzi4gp/rlib/R/library" "4.4.0" "base"
Info

Note: We can currently only see the base packages since we haven’t yet installed anything into /project/arcc/software/r_library/r_workshop

...

Install a package into the New Library Location

Code Block
# Within R:
> install.packages("Matrix")

...

...
also installing the dependency ‘lattice’
...
* DONE (Matrix)

> write.table(installed.packages()[,c(1,2,3:4)])
"Package" "LibPath" "Version" "Priority"
"lattice" "lattice" "/cluster/medbow/project/arcc/software/r_library/r_workshop" "0.22-6" "recommended"
"Matrix" "Matrix" "/cluster/medbow/project/arcc/software/r_library/r_workshop" "1.7-0" "recommended"
"base" "base" "/apps/u/spack/gcc/

...

13.2.0/r/4.4.0-

...

pvzi4gp/rlib/R/library" "4.4.0" 

...

"base"
...
"utils" "utils" "/apps/u/spack/gcc/

...

13.2.0/r/4.4.0-

...

pvzi4gp/rlib/R/library

...

" "4.4.0" "base"

# Lets check:
[salexan5@mblog2 r_library]$ ls r_workshop/
lattice  Matrix

...

Test and Use

Error:

Code Block
[salexan5@mblog1 r_library]$ cat r_library_test_fail.R
library(Matrix)

[salexan5@mblog1 r_library]$ Rscript r_library_test_fail.R
Error in library(Matrix) : there is no package called ‘Matrix’
Execution halted
# The Matrix package is NOT available under our default library location.

Success:

Note

Update the .libPaths() every time you wish to use this R library.

Code Block
[salexan5@mblog1 r_library]$ cat r_library_test.R
.libPaths(c('/project/arcc/software/r_library/r_workshop', '/apps/u/spack/gcc/12.2.0/r/4.4.0-7i7afpk/rlib/R/library'))
library(Matrix)

[salexan5@mblog1 r_library]$ Rscript r_library_test.R
[salexan5@mblog1 r_library]$ 

...

Warning: Remember

Note

Within this example, by default this is a SHARED project location.

Anyone who has access to this project and thus this shared library can update it.

If an individual performs an install.packages() it will effect everyone.

Info

The project users will need to collaborate and come up with some form of data plan and/or process for the management of this shared library.

...

previous section

 

next section