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

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to