From J.C.Rougier@durham.ac.uk  Fri Jan  4 14:48:07 2002
From: J.C.Rougier@durham.ac.uk (J.C.Rougier@durham.ac.uk)
Date: Fri, 4 Jan 2002 15:48:07 +0100 (MET)
Subject: [Rd] Problem with "missing" in "local" (PR#1241)
Message-ID: <200201041448.PAA09053@pubhealth.ku.dk>

Hi Brian,

Prof Brian Ripley wrote:
> 
> On Fri, 4 Jan 2002 J.C.Rougier@durham.ac.uk wrote:
> 
> > Hi everyone,
> >
> > I encountered unexpected behaviour when calling "missing" within a
> > "local" environment, namely
> >
> > fred <- function(x, y)
> > {
> >   x <- as.vector(x)
> >   local({
> >     dontwantme <- 1:100
> >     if (missing(y)) print("No \"y\" today")
> >   })
> >   x
> > }
> >
> > whereupon I get
> >
> > > fred(1:10)
> > Error in eval(expr, envir, enclos) : "missing" illegal use of missing
> >
> > I think it is reasonable to expect missing to work in this context (I
> > suspect the problem relates to lazy evaluation): if not, it might be
> > helpful to amend the help file.
> 
> Why do you think it reasonable?  You've take a function from
> 
>      Evaluate an R expression in a specified environment.
> 
> and evaluated it somewhere where missing() is not defined.  If you had
> used eval() explicitly, would you think it reasonable?  I doubt it.

By "reasonable" in this context I mean that the operation would appear
to be well-defined and useful.  I can access x within the local()
environment, ie it is found in the enclosing environment, and I do not
think that y should be treated any differently.  If I modify my function
to read

fred <- function(x, y)
{
  x <- as.vector(x)
  local({
    print(x)
    print(y)
    if (missing(y)) print("No \"y\" today")
  })
  x
}

then I get the error message

> fred(1:10)
 [1]  1  2  3  4  5  6  7  8  9 10
Error in print(y) : Argument "y" is missing, with no default

This error message suggests to me that "missing(y)" would evaluate
correctly.

> 
> Which help file did you have in mind?
> 

The help file for "missing".  This points out that "missing" is not
always reliable, eg after "x <- match.arg(x)".  Perhaps this could be
another example of "unreliability".

Cheers, Jonathan.

-- 
Jonathan Rougier                       Science Laboratories
Department of Mathematical Sciences    South Road
University of Durham                   Durham DH1 3LE
tel: +44 (0)191 374 2361, fax: +44 (0)191 374 7388
http://www.maths.dur.ac.uk/stats/people/jcr/jcr.html

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._


[Rd] Problem with "missing" in "local" (PR#1241)
J.C.Rougier@durham.ac.uk