Elegant way to check for missing packages and install them?
Yes. If you have your list of packages, compare it to the output from installed.packages()[,"Package"]
and install the missing packages. Something like this:
list.of.packages <- c("ggplot2", "Rcpp")new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]if(length(new.packages)) install.packages(new.packages)
Otherwise:
If you put your code in a package and make them dependencies, then they will automatically be installed when you install your package.
You can just use the return value of require
:
if(!require(somepackage)){ install.packages("somepackage") library(somepackage)}
I use library
after the install because it will throw an exception if the install wasn't successful or the package can't be loaded for some other reason. You make this more robust and reuseable:
dynamic_require <- function(package){ if(eval(parse(text=paste("require(",package,")")))) return True install.packages(package) return eval(parse(text=paste("require(",package,")")))}
The downside to this method is that you have to pass the package name in quotes, which you don't do for the real require
.