Follow up: I've downloaded todays R v2.3.0 alpha (2006-04-02 r37626) for Windows and the below bug has been fixed:
yaa <- function(...) substitute(list(...)) yaa(foo(x,y,...,z))
list(foo(x, y, ..., z)) Thank you (Duncan!?) Henrik
On 3/29/06, Henrik Bengtsson <hb at maths.lth.se> wrote:
On 29 Mar 2006 11:58:34 +0200, Peter Dalgaard <p.dalgaard at biostat.ku.dk> wrote:
"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(...)).
And, yaa(foo(x,y,...,z)) gives list(foo(x, y, z)) but used to give list(foo(x, y, ..., z)). /Henrik
-- 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