[R] generating list of all arguments that function was called with

Marc Schwartz marc_schwartz at me.com
Fri Jul 2 22:37:27 CEST 2010


On Jul 2, 2010, at 3:01 PM, Erik Iverson wrote:

> Hello,
> 
> Consider:
> 
> f1 <- function(a, b, c, d, ...) {
>  c(list(a = a, b = b, c = c, d = d), list(...))
> }
> 
> > f1(a = 1, b = 2, c = 3, d = 4, more = 5)
> $a
> [1] 1
> 
> $b
> [1] 2
> 
> $c
> [1] 3
> 
> $d
> [1] 4
> 
> $more
> [1] 5
> 
> 
> Question: I'm guessing there exists a function such that I don't have to list each bound argument separately in the list in 'f1'.  It seems like it should be easy but it's escaping me.
> 
> Thanks,
> Erik


Erik,

Use ?match.call as follows:

MyFunc <- function(a, b, c, d, ...) 
{
  as.list(match.call(expand.dots = TRUE)[-1])
}

> MyFunc(a = 10, c = 8)
$a
[1] 10

$c
[1] 8


> MyFunc(a = 10, b = 5, y = 6)
$a
[1] 10

$b
[1] 5

$y
[1] 6


The [-1] in the call removes the first element, which will be the function name (eg. 'MyFunc'). The returned object from match.call() will be a language object, which can be coerced to a list, yielding the argument names and values. 'expand.dots' is used to deal with the '...' args, if they exist.

HTH,

Marc Schwartz



More information about the R-help mailing list