From macrakis at alum.mit.edu  Mon Mar  9 20:13:56 2009
From: macrakis at alum.mit.edu (Stavros Macrakis)
Date: Mon, 9 Mar 2009 15:13:56 -0400
Subject: [Rd] E`<`<rrors in recursive default argument references
Message-ID: <8b356f880903091213o33e27e8di878e4ec574347015@mail.gmail.com>

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

  (function(a = a)  (a)    ) ()
  (function(a = a)  -a     ) ()
  (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.

            -s



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