[Rd] A "safe" do.call

Henrik Bengtsson hb at stat.berkeley.edu
Tue Jan 29 07:19:15 CET 2008


I tried to do this a couple of years ago, cf. doCall() in R.utils.
It's quite a tricky problem and I recall I wasn't perfectly happy with
the solution but it's a start.

/Henrik

On Jan 28, 2008 6:19 PM, hadley wickham <h.wickham at gmail.com> wrote:
> Has anyone developed a version of do.call that is safe in the sense
> that it silently drops parameters that do not appear in the formals of
> the called function? This is useful when ... ends up being used in
> multiple further functions.  e.g.
>
> f <- function(a, b) {a + b}
> do.call(f, list(a=1, b=2, c=3))  # Errors
> safe.call(f, list(a=1, b=2, c=3)) # Returns 3
>
> If have quickly thrown together the following, but it doesn't support
> position based calls, and I'd like to avoid reinventing the wheel.
>
> safe.call <- function(f, params, f.params = names(formals(f))) {
>  if ("..." %in% f.params) {
>    safe.params <- params
>  } else {
>    safe.params <- params[intersect(f.params, names(params))]
>  }
>  do.call(f, safe.params)
> }
>
> I hope to use safe.call to prevent a wide class of potential bugs in ggplot2.
>
> Hadley
>
> --
> http://had.co.nz/
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



More information about the R-devel mailing list