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...

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

Reply via email to