Le 01/10/2019 à 10:58, Serguei Sokol a écrit :
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).
Re-er, it seem that I was a little bit to fast in my conclusion. If we
modify f2 to be
f2 <- function(x, y, z){
if(missing(z))
cat("f2: z is missing\n")
f1(x=1, y)
}
then f2() call gives
f2: z is missing
f1: y is missing
i.e. missing() of f1(x=1,y) call is reporting its own situation, not
those of f2(). And the missingess of y seems to be inherited from f2() call.
Sorry to be hasty.
Serguei.
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel