aboutsummaryrefslogtreecommitdiff
path: root/utils/R_setup.sh
diff options
context:
space:
mode:
Diffstat (limited to 'utils/R_setup.sh')
-rw-r--r--utils/R_setup.sh68
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}