From h.wickham at gmail.com  Tue Jan 29 03:19:58 2008
From: h.wickham at gmail.com (hadley wickham)
Date: Mon, 28 Jan 2008 20:19:58 -0600
Subject: [Rd] A "safe" do.call
Message-ID: <f8e6ff050801281819l223d85deu458c67fd6e0b3693@mail.gmail.com>

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/



[Rd] A "safe" do.call
hadley wickham