Skip to content
Back to formatted view

Raw Message

Message-ID: <4304D751.2080400@pdf.com>
Date: 2005-08-18T18:45:37Z
From: Sundar Dorai-Raj
Subject: problem with repeated formal arguments and  ...
In-Reply-To: <1124389929.21569.5.camel@iron.libaux.ucsf.edu>

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