[Rd] as.missing

Peter Dalgaard p.dalgaard at biostat.ku.dk
Fri Oct 27 17:40:37 CEST 2006


Paul Gilbert <pgilbert at bank-banque-canada.ca> writes:

> Peter Dalgaard wrote:
> 
> >Paul Gilbert <pgilbert at bank-banque-canada.ca> writes:
> >
> >
> >>>I.e., when x is missing in g, and g calls f(3,x), f will use its
> >>>default value for x.
> >>>
> >> Yes, that is the behaviour I am looking for. That is, f  should do
> >> what it normal would do if it were called with x missing.
> >>
> >
> >But if x has a default in g then that default should presumably be
> > used?
> Yes.  The value of x in g would get passed to f, default or otherwise.
> If that value is something that indicates x is missing, then it should
> be treated as if it is missing in f. This means f should use its
> default value, rather than throw an error saying x is missing.
> 
> >And what if x is given a value in the evaluation frame of g
> >before it is used by f (which can happen, you know, even after the
> >evaluation of f has begun)? Now imagine a longer chain of calls.
> >
> >I think what you're asking for is essentially dynamic scoping for
> >missing arguments: you'd have to backtrack along the call chain to
> >find the first instance where x is either given a value or has a
> >default. This sounds messy.
> >
> You understand this better than I do, but I don't think I am asking to
> do this. Currently I think f  looks back too far and finds x is
> missing and g does not have a default value for x, so it throws an
> error.  Why can't f find its own default value for x?

Because it's being told to use the value of the argument instead. I
think. 

This stuff is treacherous. E.g. what would you expect from this?

g <- function(x) {f <- function(y) {x <<- 1; y} ; f(x)}
g()

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