[Rd] improving the performance of install.packages

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Fri Nov 8 11:00:18 CET 2019


On 08/11/2019 2:06 a.m., Joshua Bradley wrote:
> Hello,
> 
> Currently if you install a package twice:
> 
> install.packages("testit")
> install.packages("testit")
> 
> R will build the package from source (depending on what OS you're using)
> twice by default. This becomes especially burdensome when people are using
> big packages (i.e. lots of depends) and someone has a script with:
> 
> install.packages("tidyverse")
> ...
> ... later on down the script
> ...
> install.packages("dplyr")
> 
> In this case, "dplyr" is part of the tidyverse and will install twice. As
> the primary "package manager" for R, it should not install a package twice
> (by default) when it can be so easily checked. Indeed, many people resort
> to writing a few lines of code to filter out already-installed packages An
> r-help post from 2010 proposed a solution to improving the default
> behavior, by adding "force=FALSE" as a api addition to install.packages.(
> https://stat.ethz.ch/pipermail/r-help/2010-May/239492.html)
> 
> Would the R-core devs still consider this proposal?

Whether or not they'd do it, it's easy for you to do it.

install.packages <- function(pkgs, ..., force = FALSE) {
   if (!force) {
     pkgs <- Filter(Negate(requireNamespace), pkgs

   utils::install.packages(pkgs, ...)
}

You might want to make this more elaborate, e.g. doing update.packages() 
on the ones that exist.  But really, isn't the problem with the script 
you're using, which could have done a simple test before forcing a slow 
install?

Duncan Murdoch



More information about the R-devel mailing list