[Rd] E`<`<rrors in recursive default argument references

Wacek Kusnierczyk Waclaw.Marcin.Kusnierczyk at idi.ntnu.no
Mon Mar 9 22:40:06 CET 2009


Stavros Macrakis wrote:
> Tested in: R version 2.8.1 (2008-12-22) / Windows
>
> Recursive default argument references normally give nice clear errors.
>  In the first set of examples, you get the error:
>
>   Error in ... :
>   promise already under evaluation: recursive default argument
> reference or earlier problems?
>
>   (function(a = a) a      ) ()
>   (function(a = a) c(a)   ) ()
>   (function(a = a) a[1]   ) ()
>   (function(a = a) a[[1]] ) ()
>   (function(a = a) a$x    ) ()
>   (function(a = a) mean(a) )   ()
>   (function(a = a) sort(a) ) ()
>   (function(a = a) as.list(a) ) ()
>
> But in the following examples, R seems not to detect the 'promise
> already under evaluation' condition and instead gets a stack overflow,
> with the error message:
>
>   Error: C stack usage is too close to the limit
>   

when i run these examples, the execution seems to get into an endless
loop with no error messages whatsoever.  how much time does it take
before you get the error?  (using r 2.8.0 and also the latest r-devel).

vQ

>   (function(a = a)  (a)    ) ()
>   (function(a = a)  -a     ) ()
>   

btw. ?'-' talks about '-' as a *binary* operator, but the only example
given there which uses '-' uses it as a *unary* operator.  since '-'()
complains that '-' takes 1 or 2 arguments, it might be a good idea to
acknowledge it in the man page.

>   (function(a = a) var(a) ) ()
>   (function(a = a) sum(a) ) ()
>   (function(a = a) is.vector(a) ) ()
>   (function(a = a) as.numeric(a) ) ()
>
> I don't understand why the two sets of examples behave differently.
>   

a bug in excel?

vQ



More information about the R-devel mailing list