[Rd] A "safe" do.call

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


Maybe this function won't actually be the help I had hoped it would
be.  Unfortunately some functions (e.g. glm via glm.control) throw
errors when ... contain arguments that don't match some (eventual)
argument list.

Or is this a bug in glm?  It certainly seems that the documentation
should mention that ... is passed to glm.control, which only takes
three arguments.  I realise that this doesn't come up very often
during an interactive model fitting session, and it is easy to remedy
when it does, but it makes writing robust functions hard when a
function with ... does in fact have a fixed argument list.

Hadley

On Jan 28, 2008 8: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/
>



-- 
http://had.co.nz/



More information about the R-devel mailing list