[Rd] Is missingness always passed on?
Bertram, Alexander
@|ex @end|ng |rom bed@t@dr|ven@com
Tue Oct 1 10:37:16 CEST 2019
There is "missing with default" and "missing without default".
If an argument x is missing without a default, then missing(x) is true, if
you pass x to another function, it will pass the value of the "missing
argument". (which is different than simply being missing!)
If an argument x is missing _with_a default, then missing(x) is still true,
but if you pass x to another function, the default value is passed, not the
missing argument symbol.
If you add default arguments to your example, you'll see this effect:
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()
prints
f2: z is missing
The intersection of default values, and the representation of missing
without a default as a symbol yields some unexpected and complex behaviors.
Here are a few more fun examples:
https://github.com/bedatadriven/renjin/blob/master/tests/src/test/R/test.missing.R
Best,
Alex
On Tue, Oct 1, 2019, 10:27 Duncan Murdoch <murdoch.duncan using gmail.com> wrote:
>
> 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.
>
> Duncan Murdoch
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
[[alternative HTML version deleted]]
More information about the R-devel
mailing list