[R] problem with repeated formal arguments and ...

Sundar Dorai-Raj sundar.dorai-raj at pdf.com
Thu Aug 18 20:45:37 CEST 2005



Ross Boylan wrote:
> I want to add an argument if it is not present.  Following the Green
> Book, p. 337:
> test <- function(x, ...){
>   dots <- list(...)
>   if (!hasArg(from))
>     from <- 0
>   else
>     from <- dots$from
>   curve(x, from=from, ...)
> }
> 
> 
>>test(sin)
>>test(sin, from=4)
> 
> Error in curve(x, from = from, ...) : formal argument "from" matched by
> multiple actual arguments
> 
> The FAQ says, in the section on differences between R and S,
> "R disallows repeated formal arguments in function calls."
> 
> That seems a perfectly reasonable rule,  but how do I handle this
> situation?
> 

Hi, Ross,

Add "from" to your function:

test <- function(x, from = 0, ...) {
   curve(x, from = from, ...)
}

Or another way:

test <- function(x, ...) {
   dots <- list(...)
   if(!hasArg(from)) dots$from <- 0
   dots$expr <- x
   do.call("curve", dots)
}

I actually prefer the latter if I'm changing many arguments. I do this 
quite often when writing custom lattice plots and I want to override 
many of the defaults.

HTH,

--sundar




More information about the R-help mailing list