[Rd] Context problem with ... and rbind (PR#860)

Peter Dalgaard BSA p.dalgaard@pubhealth.ku.dk
04 Mar 2001 23:26:13 +0100


Peter Dalgaard BSA <p.dalgaard@pubhealth.ku.dk> writes:

> ripley@stats.ox.ac.uk writes:
> 
> > f <- function(x, ...)
> > {
> >    g <- function(x, ...) x
> >    rbind(numeric(), g(x, ...))
> > }
> > > f(1:3)
> > Error in rbind(numeric(), g(x, ...)) : ... used in an incorrect context
> 
> It's not really rbind that is the culprit here, but the deparsing of
> its argument. A near-minimal version of what I think is the same issue
> is
> 
> f <- function(x, ...) h(g(x, ...))
> g <- function(x, ...) x
> h <- function(...)substitute(list(...))
> f(1)
> #Error in h(g(x, ...)) : ... used in an incorrect context

Hmm.... The patch below stops the error, and passes make check, but I
have a nagging suspicion that it isn't the right way to fix this:

diff -u -r1.85 coerce.c
--- src/main/coerce.c   2001/01/15 14:52:09     1.85
+++ src/main/coerce.c   2001/03/04 22:11:12
@@ -1749,11 +1749,11 @@
     if (isNull(el))
        return el;
     if (CAR(el) == R_DotsSymbol) {
-       h = findVar(CAR(el), rho);
+       h = findVarInFrame(rho, CAR(el));
        if (h == R_NilValue)
            return substituteList(CDR(el), rho);
        if (TYPEOF(h) != DOTSXP) {
-           if (h == R_MissingArg)
+           if (h == R_UnboundValue || h == R_MissingArg)
                return substituteList(CDR(el), rho);
            error("... used in an incorrect context");
        }

-- 
   O__  ---- Peter Dalgaard             Blegdamsvej 3  
  c/ /'_ --- Dept. of Biostatistics     2200 Cph. N   
 (*) \(*) -- University of Copenhagen   Denmark      Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk)             FAX: (+45) 35327907
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._