[Rd] A "safe" do.call

hadley wickham h.wickham at gmail.com
Tue Jan 29 03:19:58 CET 2008


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/



More information about the R-devel mailing list