Message-ID: <149ae987-cb1f-04d0-dcd6-784b0666f970@gmail.com>
Date: 2019-11-08T10:00:18Z
From: Duncan Murdoch
Subject: improving the performance of install.packages
In-Reply-To: <CAKShX4BiuLvT02z9=jR=eqCZLbfb54HWu_sKQU5ni+L7fhjhgQ@mail.gmail.com>
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