diff options
Diffstat (limited to 'utils/R_setup.sh')
| -rw-r--r-- | utils/R_setup.sh | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/utils/R_setup.sh b/utils/R_setup.sh new file mode 100644 index 00000000..532f6987 --- /dev/null +++ b/utils/R_setup.sh @@ -0,0 +1,68 @@ +#!/bin/bash +# +# Setup an R environment in a given directory. +# +# This works as follows. We create an ".Rprofile" file in the current +# directory that sets the .libPaths to the desired Rlib directory. We do the +# same with an .Renviron file because it's R so one place isn't enough. This +# essentially makes that the only source of packages read by anything that +# respects this .Rprofile. Next we install packages as normal using the +# install_if_not_exists.R script, which only installs packages if necessary +# and supports GitHub and local packages as well. +# +# This file is part of RSimpleVenv: https://github.com/GjjvdBurg/RSimpleVenv +# +# Author: G.J.J. van den Burg +# Date: 2019-06-19 +# License: MIT + +res='\033[1m\033[0m' +log() { echo -e "\e[32m$*${res}"; } +err() { echo -e "\e[31m$*${res}"; exit 1; } + +install() { + log "Installing $1"; + Rscript ./utils/install_if_not_exist.R "$1" + # exit on failure + if [ ! $? == 0 ] + then + err "Non-zero exit status after installing $1" + fi +} + +if [ $# -ne 2 ] +then + echo "Usage: $0 packageFile rlib_dir" + exit 1 +fi + +PACKAGE_FILE="$1" +LIBDIR=$(realpath "$2") +mkdir -p ${LIBDIR} + +# Ensure that this is the only libPath from now on. +echo ".libPaths(c('${LIBDIR}'))" > .Rprofile +echo "R_LIBS=${LIBDIR}" > .Renviron +echo "R_LIBS_USER=${LIBDIR}" >> .Renviron + +# Here's a fun one: for some reason R tests lazy loading in vanilla mode by +# default, which overwrites all the environment and library stuff we just +# carefully set. This can break things when you have a different package +# version installed in your user R package library. Luckily, if you dig +# through the R source code (not in the documentation!), you can find out that +# there's an obscure environment variable that can be set to disable this +# behaviour. What fun! What an intuitively designed programming language! /s +export _R_CHECK_INSTALL_DEPENDS_="TRUE" + +# Install devtools for GitHub-based packages +install devtools + +# Install all packages from the provided package file +while read -r pkg +do + if [ -z ${pkg} ] + then + continue + fi + install "${pkg}" +done < ${PACKAGE_FILE} |
