[R] Evaluating args in a function

Duncan Murdoch murdoch at stats.uwo.ca
Wed Sep 12 19:13:14 CEST 2007


On 9/12/2007 12:48 PM, Sandy Weisberg wrote:
> Can anyone explain what I'm doing wrong here:
> 
>  > fred <- data.frame()
>  > class(fred)
> [1] "data.frame"
>  > test.fn <- function(x,class=class(x)) {class}
>  > test.fn(fred)
> Error in test.fn(fred) : promise already under evaluation: recursive 
> default argument reference or earlier problems?
> 
> R 2.5.1 on both Windows and SUSE Linux.

As Gabor said, this is a recursive reference.  In order to know whather 
your default value class(x) should evaluate using the local variable 
named class or should go back to the base package, R needs to evaluate 
it. And there's the loop.

Another solution besides Gabor's suggestion of renaming the argument is 
to be explicit that you want the base class() function, e.g.

 > test.fn <- function(x,class=base::class(x)) {class}
 > fred <- data.frame()
 > test.fn(fred)
[1] "data.frame"

Duncan Murdoch



More information about the R-help mailing list