[Rd] Substitute() changed since R2.3.0 (2006-02-02 r37243)?

Peter Dalgaard p.dalgaard at biostat.ku.dk
Wed Mar 29 11:58:34 CEST 2006


"Henrik Bengtsson" <hb at maths.lth.se> writes:

> Hi,
> 
> I've got the following two versions of R on WinXP:
> 
> A) R Version 2.3.0 Under development (unstable) (2006-02-02 r37243)
> B) R Version 2.3.0 Under development (unstable) (2006-03-27 r37579)
> 
> and a the following "test.R" script:
> 
> foo <- function(path, ...) { print(path) }
> bar <- function(x, ...) foo(...)
> wow <- function(x, ...) capture.output(foo(...))
> bar(1, path=2)
> print(wow(1, path=2))
> 
> With A, I get:
> 
> > source("test.R")
> [1] 2
> [1] "[1] 2"
> 
> But with B, I get
> > source("test.R")
> [1] 2
> Error in print(path) : argument "path" is missing, with no default
> 
> Further debugging led me to the following test2.R script:
> 
> foo <- function(path, ...) { print(path) }
> bar <- function(x, ...) foo(...)
> wow <- function(x, ...) yaa(foo(...))
> yaa <- function(...) substitute(list(...))
> bar(1, path=2)
> print(wow(1, path=2))
> 
> With A, I get
> 
> > source("test2.R")
> [1] 2
> list(foo(...))
> 
> But with B, I get
> 
> > source("test.R")
> [1] 2
> list(foo())
> 
> Note that '...' is missing in the latest version.  I don't think this is wanted.

I suspect that you're right. Just for reproduction purposes: The
script is not needed, and the whole thing simplifies to the two lines:

yaa <- function(...) substitute(list(...))
yaa(foo(...))

which gives list(foo()) in 2.3.0 alpha and used to give list(foo(...)).

-- 
   O__  ---- Peter Dalgaard             Øster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)                  FAX: (+45) 35327907



More information about the R-devel mailing list