[R-pkg-devel] Effieciency drop in do.call?

Gabor Grothendieck ggrothendieck @ending from gm@il@com
Mon Nov 19 18:53:15 CET 2018


The do.call version evaluates all arguments while the normal version
may not depending on the function.  There could also be a difference
if the function uses non-standard evaluation since in that case the
two could be passing different different argument values.

For an example of the second case,

  f <- function(x) deparse(substitute(x))

  f(pi)
  ## [1] "pi"

  do.call("f", list(pi))
  ## [1] "3.14159265358979"

On Mon, Nov 19, 2018 at 11:50 AM Paul Buerkner <paul.buerkner using gmail.com> wrote:
>
> Hi all,
>
> today, I stumbled upon a puzzling (to me) problem apparently related to
> do.call() that resulted
> in an efficiency drop of multiple orders of magnitudes compared to just
> calling the function directly (multiple minutes as compared to one second).
>
> That is
>
> fun(a = a, b = b, c = c, ...)
>
> took one second, while
>
> args <- list(a = a, b = b, c = c, ...)
> do.call(fun, args)
>
> took multiple minutes.
>
> In my package (brms), I use do.call in various places but only in one it
> resulted in this
> efficiency drop.
>
> Before I try to make a reproducible example, I wanted to ask if there are
> any known issues
> with do.call that may explain this?
>
> Paul
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-package-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel



-- 
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com



More information about the R-package-devel mailing list