Hi everybody, I am having a hard time in understanding how to deal with non standard evaluation and the require function.
I asked about it on Stackoverflow at http://stackoverflow.com/questions/38922012/r-function-to-install-missing-packages, below you can find my question. Thanks a lot for the help! Cheers, Luca For one of my scripts I want to write an R function that checks if a package is already installed: if so it should use library() to import it in the namespace, otherwise it should install it and import it. I assumed that pkgname is a string and tried to write something like: ensure_library <- function(pkgname) { if (!require(pkgname)) { install.packages(pkgname, dependencies = TRUE) } require(pkgname) } As simple as is this function does not work. If I try to run it like ensure_library("dplyr") it installs the package dplyr but then it fails because it trys to import pkgname rather than dplyr in the namespace. ensure_library("dplyr") Loading required package: pkgname Installing package into ‘/home/luca/R-dev’ (as ‘lib’ is unspecified) trying URL 'https://cran.rstudio.com/src/contrib/dplyr_0.5.0.tar.gz' Content type 'application/x-gzip' length 708476 bytes (691 KB) ================================================== downloaded 691 KB * installing *source* package ‘dplyr’ ... ** package ‘dplyr’ successfully unpacked and MD5 sums checked ** libs .... a lot of compiling here.... installing to /home/luca/R-dev/dplyr/libs ** R ** data *** moving datasets to lazyload DB ** inst ** preparing package for lazy loading ** help *** installing help indices ** building package indices ** installing vignettes ** testing if installed package can be loaded * DONE (dplyr) The downloaded source packages are in ‘/tmp/Rtmpfd2Lep/downloaded_packages’ Loading required package: pkgname Warning messages: 1: In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, : there is no package called ‘pkgname’ 2: In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, : there is no package called ‘pkgname’ Also, if I now re-run it it will install dplyr once again. I realize this is probably due to R non-standard-evaluation and I have tried several combination of eval/substitute/quote in order to make it work with require but I couldn't succeed. Can somebody help me understanding what is going on and if there is some easy-fix? If a function already implementing this exists I would like to know, but what I am really interested is understanding why my code does not work as intended. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.