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@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 ... >--------------------Sample------------------------------- >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. > >Background >========== >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. > >Context >====== >R 4.3.3 on MS-Windows under RStudio 2023.12.1 build 402. > >Thanks for any insights. >Ross > >______________________________________________ >R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >https://stat.ethz.ch/mailman/listinfo/r-help >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. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.