That's an interesting solution too. -----Original Message----- From: Duncan Murdoch <murdoch.dun...@gmail.com> Sent: Friday, January 17, 2020 11:17 AM To: Smith, Brian J <brian-j-sm...@uiowa.edu>; r-package-devel@r-project.org Subject: Re: [External] Re: [R-pkg-devel] S3 generic/method consistency warning for formula method
On 17/01/2020 10:59 a.m., Smith, Brian J wrote: > Thanks Duncan. > > I was surprised too when first realizing this was possible. I believe the > reason it works is that UseMethod dispatches on the first supplied argument > by default. So, really the dispatch is on the first element of the ellipsis. > The 'c' function works like this, albeit as a primitive function. > > I would like to dispatch on the ellipsis to allow a user to name values being > passed in. Defining an initial x argument would indeed eliminate the > warning, but would not allow for user-naming of the value. I could have the > user pass a list of values to x and do dispatching manually, but that seems > like more steps for the user and more complication for the implementation > than ought to be necessary. There are other downsides to that approach in my > particularly application... I think you can still do that, if your generic looks like this: foo <- function(x, ...) { if (missing(x)) UseMethod("foo", ..1) else UseMethod("foo") } and your methods look like this one: foo.numeric <- function(x, ...) if (missing(x)) list(...) else list(x, ...) There are some negatives to this solution: - it's more complicated than what you have - foo() now doesn't work unless you make it even more complicated - the name x is now special; foo("a", 1) will now dispatch to a different method than foo(w = "a", x = 1). This is getting into the "world of hurt" that Joris mentioned. The benefits are non-trivial: - It should make that warning go away - It doesn't depend on undocumented behaviour. Duncan Murdoch > > The issue mentioned below about calling the function with no arguments can be > solved by defining the following default method. > > foo.default <- function(...) list(...) > > -----Original Message----- > From: Duncan Murdoch <murdoch.dun...@gmail.com> > Sent: Friday, January 17, 2020 9:24 AM > To: Smith, Brian J <brian-j-sm...@uiowa.edu>; > r-package-devel@r-project.org > Subject: [External] Re: [R-pkg-devel] S3 generic/method consistency > warning for formula method > > On 17/01/2020 9:14 a.m., Smith, Brian J wrote: >> Hello all, >> >> I am getting an R CMD check warning about S3 consistency for a formula >> method of a generic function that dispatches on the ellipsis argument. The >> formula method seems to function properly when called, and methods for other >> types tried do not trigger the warning. Below is an example generic >> function 'foo' and methods that will reproduce the issue, followed by the >> check warning message produced. >> >> foo <- function(...) UseMethod("foo") foo.factor <- function(...) >> list(...) foo.formula <- function(...) list(...) foo.logical <- >> function(...) >> list(...) foo.matrix <- function(...) list(...) foo.numeric <- >> function(...) list(...) > > I'm surprised that you are allowed to have a generic with no arguments > except "...". I imagine the error will go away if you change the > definitions to > > foo <- function(x, ...) UseMethod("foo") foo.factor <- function(x, > ...) list(x, ...) foo.formula <- function(x, ...) list(x, ...) > foo.logical <- function(x, ...) list(x, ...) foo.matrix <- function(x, > ...) list(x, ...) foo.numeric <- function(x, ...) list(x, ...) > > With your original definition, it would be legal to call foo(), but > the > UseMethod() would fail. > > Duncan Murdoch > >> >> R CMD check warning: >> >> W checking S3 generic/method consistency (1.7s) >> foo: >> function(...) >> foo.formula: >> function(...) >> >> See section 'Generic functions and methods' in the 'Writing R >> Extensions' manual. >> >> I would appreciate any help in understanding and addressing this check >> warning. >> >> Thank you, >> Brian >> >> ***************************************************************** >> Brian J Smith, PhD >> Professor, Department of Biostatistics Director, Biostatistics Core, >> Holden Comprehensive Cancer Center The University of Iowa >> 145 North Riverside Drive, N311 CPHB >> Phone: 319-384-1587 >> Email: brian-j-sm...@uiowa.edu >> >> ______________________________________________ >> R-package-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-package-devel >> > ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel