On 01/10/2019 4:58 a.m., Serguei Sokol wrote:
Le 30/09/2019 à 16:17, Duncan Murdoch a écrit :

There's a StackOverflow question
https://stackoverflow.com/q/22024082/2554330 that references this text
from ?missing:

"Currently missing can only be used in the immediate body of the
function that defines the argument, not in the body of a nested
function or a local call. This may change in the future."

Someone pointed out (in https://stackoverflow.com/a/58169498/2554330)
that this isn't true in the examples they've tried:  missingness does
get passed along.  This example shows it (this is slightly different
than the SO example):

f1 <- function(x, y, z){
   if(missing(x))
     cat("f1: x is missing\n")
   if(missing(y))
     cat("f1: y is missing\n")
}

f2 <- function(x, y, z){
   if(missing(z))
     cat("f2: z is missing\n")
   f1(x, y)
}

f2()

which produces

f2: z is missing
f1: x is missing
f1: y is missing

Is the documentation out of date?  That quote appears to have been
written in 2002.
Er, as far  as I understand the cited doc, it correctly describes what
happened in your example: missing() is not working in a local call (here
f1(x,y)).
In fact, what missing() of f1 is reporting it is still the situation of
f2() call (i.e. immediate body of the function). See

f2(y=1)

produces

f2: z is missing
f1: x is missing

(the line about y missing disappeared from f1(x,y) call, what needed to
be demonstrated).

Yes, that's a possible interpretation. Another one is that missing should fail in this example:

f2 <- function(z){
   f1 <- function(){
     if(missing(z))
       cat("f1: z is missing\n")
   }
   f1()
}

and it does:

> f2()
Error in missing(z) (from #3) : 'missing' can only be used for arguments

Here missing() is appearing in a nested function. I'm really not sure which is the intended meaning of that paragraph: what exactly is a "local call"?

Duncan Murdoch

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

Reply via email to