R Conda Environments and Installed Packages

Goal: Understand R environments build with Conda.

Note: There is a known vulnerability with R versions less than 4.4.0.

This page uses R version 4.3.3. This page is purely for example since as of the date of creating this page there were issues using an r-base/4.4.1.

I am hoping in a few weeks/months the 4.4.x base will be stable and I’ll update the examples.



Basic R Conda Environment

General Process:

[]$ cd /project/<project-name>/software/conda-envs/ []$ module purge []$ module load miniconda3/24.3.0 []$ conda search r-base Loading channels: done # Name Version Build Channel ... r-base 4.3.3 hf0d99cb_1 conda-forge ... r-base 4.4.1 h1dca405_0 conda-forge []$ conda create -p r_4.3.3_env r-base=4.3.3 []$ conda activate /cluster/medbow/project/<project-name>/software/conda-envs/r_4.3.3_env (/cluster/medbow/project/<project-name>/software/conda-envs/r_4.3.3_env) []$ R --version R version 4.3.3 (2024-02-29) -- "Angel Food Cake" ...

Note: The conda environment was created using the -p option, so it was installed under the current working directory, which in the case was: /project/arcc/software/conda-envs


Where are Packages Installed?

Lets look at the environment variables:

(/cluster/medbow/project/<project-name>/software/conda-envs/r_4.3.3_env) []$ R -e 'Sys.getenv(c("R_PLATFORM", "R_HOME", "R_LIBS_USER", "R_LIBS", "R_LIBS_SITE"))' R version 4.3.3 (2024-02-29) -- "Angel Food Cake" ... > Sys.getenv(c("R_PLATFORM", "R_HOME", "R_LIBS_USER")) R_PLATFORM "x86_64-conda-linux-gnu" R_HOME "/cluster/medbow/project/<project-name>/software/conda-envs/r_4.3.3_env/lib/R" R_LIBS_USER "/cluster/medbow/home/<username>/R/x86_64-conda-linux-gnu-library/4.3" R_LIBS "" R_LIBS_SITE "/cluster/medbow/project/<project-name>/software/conda-envs/r_4.3.3_env/lib/R/site-library"

Note: The platform string value is different: x86_64-conda-linux-gnu


Try Installing vctrs Package

# Within R: > install.packages("vctrs") ... also installing the dependencies ‘cli’, ‘glue’, ‘lifecycle’, ‘rlang’ ... * DONE (vctrs)

Where was this installed?

Check .libPaths():

(/cluster/medbow/project/<project-name>/software/conda-envs/r_4.3.3_env) [salexan5@mblog2 ~]$ R R version 4.3.3 (2024-02-29) -- "Angel Food Cake" ... > .libPaths() [1] "/cluster/medbow/project/<project-name>/software/conda-envs/r_4.3.3_env/lib/R/library"

Since I own this Conda environment, I have permission to install under: /project/arcc/software/conda-envs/r_4.3.3_env/lib/R.

Lets check:

[]$ ls /project/<project-name>/software/conda-envs/r_4.3.3_env/lib/R/library/ base cli compiler datasets glue graphics grDevices grid lifecycle methods parallel rlang splines stats stats4 tcltk tools translations utils vctrs

But What about the R_LIBS_USER Environment Variable?

Remember our environment variables:

R_LIBS_USER "/cluster/medbow/home/<username>/R/x86_64-conda-linux-gnu-library/4.3" R_HOME "/cluster/medbow/project/<project-name>/software/conda-envs/r_4.3.3_env/lib/R"
[]$ ls /home/<username>/R/x86_64-conda-linux-gnu-library/4.3 ls: cannot access '/home/<username>/R/x86_64-conda-linux-gnu-library/4.3': No such file or directory []$ ls /home/<username>/R/ x86_64-pc-linux-gnu-library

Since this folder is missing, it is not being picked up and used by the .libPaths() command.


Can I Create this Folder?

If you manually create this folder then .libPaths() does pick it up.

(/cluster/medbow/project/<project-name>/software/conda-envs/r_4.3.3_env) []$ mkdir -p x86_64-conda-linux-gnu-library/4.3 (/cluster/medbow/project/<project-name>/software/conda-envs/r_4.3.3_env) []$ R R version 4.3.3 (2024-02-29) -- "Angel Food Cake" ... > .libPaths() [1] "/cluster/medbow/home/<username>/R/x86_64-conda-linux-gnu-library/4.3" [2] "/cluster/medbow/project/<project-name>/software/conda-envs/r_4.3.3_env/lib/R/library"

Using the install.packages() command within R will now look/install packages into this folder that could be shared across multiple Conda environments using this version of R.

image-20240729-234708.png
Example of sharing R Packages across multiple Conda Environments.

Should I Create this Folder?

Question: Should you manually create the ~/R/x86_64-conda-linux-gnu-library/X.Y/ folder?

First, we would suggest that unless you are confident in self-managing your Conda/R environments then do not.

If this is not in your .libPaths(), then it will force all R package installs to be contained under the Conda environment.

If this path IS in your .libPaths(), across multiple conda environments, then all the environments will install into and look/share this folder.

You can run into dependency/version issues if you want to use version X of a package in one Conda environment, but version Y in another. You can only have one version in this folder.

We have observed that some times this folder have been automatically created.

Best thing is to always check and set the .libPaths() to you necessary needs.


Try Installing stringi Package

# Within R: > install.packages("stringi") ... configure: error: in `/tmp/RtmpVm7ias/R.INSTALL2ad60710733cd2/stringi': configure: error: C++ compiler cannot create executables See `config.log' for more details ERROR: configuration failed for package ‘stringi’ * removing ‘/cluster/medbow/project/<project-name>/software/conda-envs/r_4.3.3_env/lib/R/library/stringi’ The downloaded source packages are in ‘/tmp/Rtmpio5YFH/downloaded_packages’ Updating HTML index of packages in '.Library' Making 'packages.html' ... done Warning message: In install.packages("stringi") : installation of package ‘stringi’ had non-zero exit status

Conda environments are not the same as the System/compute nodes - libraries and behavior can be different.


Conda Install stringi Package: Search

(/cluster/medbow/project/<project-name>/software/conda-envs/r_4.3.3_env) []$ conda search stringi Loading channels: done No match found for: stringi. Search: *stringi* # Name Version Build Channel r-stringi 0.4_1 r3.1.3_0 pkgs/r ... r-stringi 1.8.4 r43hbd1cc82_0 conda-forge (/cluster/medbow/project/<project-name>/software/conda-envs/r_4.3.3_env) []$ conda search r-stringi Loading channels: done # Name Version Build Channel r-stringi 0.4_1 r3.1.3_0 pkgs/r ... r-stringi 1.8.4 r43hbd1cc82_0 conda-forge

Remember: Conda r packages use the naming convention: r-<package-name>


Conda Install stringi Package

(/cluster/medbow/project/<project-name>/software/conda-envs/r_4.3.3_env) []$ conda install r-stringi Channels: - conda-forge - defaults Platform: linux-64 Collecting package metadata (repodata.json): done Solving environment: done ## Package Plan ## environment location: /cluster/medbow/project/<project-name>/software/conda-envs/r_4.3.3_env added / updated specs: - r-stringi The following NEW packages will be INSTALLED: r-stringi conda-forge/linux-64::r-stringi-1.8.4-r43hbd1cc82_0 ... Executing transaction: done

Where was this installed?

The conda install command (whatever the type of package/library) installs within the conda environment .

[salexan5@mblog2 ~]$ ls /project/<project-name>/software/conda-envs/r_4.3.3_env/lib/R/library/ base cli compiler datasets glue graphics grDevices grid lifecycle methods parallel rlang splines stats stats4 stringi tcltk tools translations utils vctrs

Anaconda: R Essentials

Although we do not recommend installing Anaconda (unless you are comfortable with how it works and modifies your home environment), it does provide an R Essentials bundle which “includes approximately 80 of the most popular scientific packages for the R programming language.

conda install -c r r-essentials