#!/usr/bin/env r
#
# A simple example to update packages in /usr/local/lib/R/site-library
# Parameters are easily adjustable
#
# Copyright (C) 2006 - 2019 Dirk Eddelbuettel
#
# Released under GPL (>= 2)
## load docopt package from CRAN
library(docopt)
## configuration for docopt
doc <- "Usage: update.r [-r REPO...] [-l LIBLOC] [-n NCPUS] [-h] [-x]
-r --repos REPO repository to use, or NULL for file [default: getOption]
-l --libloc LIBLOC path to examine for packages to update [default: NULL]
-n --ncpus NCPUS number of processes to use for parallel install [default: getOption]
-h --help show this help text
-x --usage show help and short example usage"
opt <- docopt(doc) # docopt parsing
if (opt$usage) {
cat(doc, "\n\n")
cat("updates packages, optionally from a given repository, fo a library location.
Examples:
update.r # update installed packages
update.r -l /srv/R-lib # update for this location
update,r is part of littler which brings 'r' to the command-line.
See http://dirk.eddelbuettel.com/code/littler.html for more information.\n")
q("no")
}
## docopt results are characters, so if we meant NULL we have to set NULL
if (opt$repos == "NULL") {
opt$repos <- NULL
} else if (opt$repos == "getOption") {
## adjust as necessary, see help('download.packages')
opt$repos <- getOption("repos")
}
if (opt$ncpus == "getOption") {
opt$ncpus <- getOption("Ncpus", 1L)
} else if (opt$ncpus == "-1") {
## parallel comes with R 2.14+
opt$ncpus <- max(1L, parallel::detectCores())
}
if (opt$libloc == "NULL") {
## NULL corresponds to .libPaths() but some directories may be non-writeable
## so we filter out the ones where we can write and use only those
canWrite <- function(d) file.access(d, mode=2) == 0
opt$libloc <- Filter(canWrite, .libPaths())
}
## ensure installation is stripped
Sys.setenv("_R_SHLIB_STRIP_"="true")
## simply unrolling of all unlink over all files 'repos*' in $TMP
clearCache <- function() {
sapply(list.files(path=tempdir(), pattern="*rds$", full.names=TRUE), unlink)
}
## Always clear caches of remote and local packages
clearCache()
update.packages(lib.loc=opt$libloc, repos=opt$repos, Ncpus=opt$ncpus, ask=FALSE)
## Always clear caches of remote and local packages
clearCache()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.