[EMAIL PROTECTED] writes:

> I am using R version 2.0.0 (2004-10-04) on Fedora Core 2.
> 
> This works correctly:
> 
> > foo <- function(x=1,y=2) { c(x,y) }
> > bar <- function(n,...) c(n,foo(...))
> > bar(10,3)
> [1] 10  3  2
> 
> But it goes wrong if I replace "c" in bar with "replicate":
> 
> > foo <- function(x=1,y=2) { c(x,y) }
> > bar <- function(n,...) replicate(n,foo(...))
> > bar(10,3)
>      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
> [1,]    0    0    0    0    0    0    0    0    0     0
> [2,]    2    2    2    2    2    2    2    2    2     2
> 
> It is mysterious why x was bound to the apparently arbitrary
> value 0 while y was left at its default.
> 
> The ... arguments to bar seems to be ignored altogether.
> bar(10), bar(10,x=3), and bar(10,3,4) give the same result.
> Furthermore, bar(10,extra=3) does not give an error.
> 
> Perhaps this mysterious behavior is unavoidable because of 
> the kind of hack replicate is?

Yes. It is really a wrapper for

sapply(integer(n), eval.parent(substitute(function(...) expr))

Now, integer(n) is n zeroes, and the function that is passed to sapply
is

Browse[1]> FUN
function (...)
foo(...)
<environment: 0xd82338>

Now, this gets called as FUN(0) and in turn foo(0) which is c(0,2).

So, the short answer is "don't do that", and the long answer is "don't
do that". If you're adventurous, you could try experimenting with a
different definition, possibly

sapply(integer(n), eval.parent(substitute(function(...) eval.parent(expr)))

but I'm far from sure that it works...

-- 
   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
~~~~~~~~~~ - ([EMAIL PROTECTED])                  FAX: (+45) 35327907

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to