[R] missing() fails to detect missing

Jeff Newmiller jdnewm|| @end|ng |rom dcn@d@v|@@c@@u@
Thu Apr 18 06:32:06 CEST 2024

Fascinating. Or, well, not.

Failing to use a method signature that is compatible with the generic is a no-no. So your bug seems to me to be outside the bounds of how R is supposed to be used. So don't do that.

On April 17, 2024 4:25:38 PM PDT, "Boylan, Ross via R-help" <r-help using r-project.org> wrote:
>When a generic (S4) has an argument with a default followed by ..., missing() doesn't seem to work if the method omits the ...
>foo <- function(x, y=0, ...){
>  "you are very generic"
># no ... in function arguments
>setMethod("foo", signature="character", function(x, y=0){
>  if (missing(y))
>    return("must give y for character")
>  y
>setMethod("foo", signature="numeric", function(x, y=0, ...){
>  if (missing(y))
>    return("must give y for numeric")
>  y
>print(foo("a"))  #[1] 0
>print(foo(0))    #[1] "must give y for numeric"
>It's the result for foo("a") I'm puzzled by, since missing(y) does not evaluate to TRUE.
>The methods documentation has 2 points on which the above definitions may fail.
>1. The generic has regular arguments and ... arguments.  But dotsMethods docs say
>        > either the signature of the generic function is "..." only, or it
>        > does not contain "..."
>Since the arguments in ... are not part of the signatures I think I'm OK, but another reading is that
>one just shouldn't mix ... and other arguments.
>2. setMethod docs say
>    > The definition must be a function with the same formal arguments as the generic; however, setMethod() will handle methods that add arguments, if ... is a formal argument to the generic.
>Since the initial definition has arguments x, y, ... and the first method definition has only x, y, the arguments don't match.  So maybe that's the problem.
>I don't know if the fact that y has a default value matters.
>The real code has a function f that ordinarily requires an additional piece of information, y, to compute a result.  But for one class, the result doesn't depend on y and so that argument may be omitted.
>R 4.3.3 on MS-Windows under RStudio 2023.12.1 build 402.
>Thanks for any insights.
>R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>and provide commented, minimal, self-contained, reproducible code.

Sent from my phone. Please excuse my brevity.

More information about the R-help mailing list