From plummerm at iarc.fr  Thu Jun 19 19:15:00 2014
From: plummerm at iarc.fr (Martyn Plummer)
Date: Thu, 19 Jun 2014 17:15:00 +0000
Subject: [Rd] R CMD check warning with S3 method
In-Reply-To: <CAFOpNVGGT+tpdAZ42Q+jkWntAE+N=Ctq_D5pKbVVHx7F6_m0RQ@mail.gmail.com>
References: <CAFOpNVGGT+tpdAZ42Q+jkWntAE+N=Ctq_D5pKbVVHx7F6_m0RQ@mail.gmail.com>
Message-ID: <1403198095.17749.166.camel@braque.iarc.fr>

When you provide a method for a generic function imported from another
package then the generic must be on the search path. Otherwise if a user
types "filter" the dispatch to "filter.test" will never occur.

What is happening here is worse because "filter" is a non-generic
function in the stats package which is always on the search path.

As you note, using "Depends: dplyr" works because it attaches dplyr to
the search path before your test package is loaded. If you use "Imports"
instead then you need to re-export the generic "filter" function from
your package namespace.

You will also need to document the generic function in your package. A
minimal functioning help page that cross-references to the dplyr package
should be sufficient (Note that S4 generics get a free pass here and do
not need to be documented when re-exported, but S3 generics do).

Martyn
 
On Tue, 2014-06-17 at 14:21 -0500, Winston Chang wrote:
> I'm getting an R CMD check warning with a package (call it package A)
> that defines an S3 method but not the generic. The generic is defined
> in another package (package B). Package A imports the S3 generic from
> B. And there's one additional detail: the generic overrides a function
> in the stats package.
> 
> I've created a minimal test package which reproduces the problem:
>   https://github.com/wch/s3methodtest
> 
> In this case:
> - the package imports dplyr, for the dplyr::filter S3 generic
> - the package defines a S3 method filter.test
> - it imports dplyr, which defines a filter S3 generic
> 
> The warning doesn't occur when package dplyr is in Depends instead of
> Imports. It also doesn't occur if the method is for a generic that
> does not override an existing function like stats::filter. For
> example, if instead of filter.test, I define select.test
> (dplyr::select is also an S3 generic), then there's no warning.
> 
> This warning seems incorrect. Is this a bug? I'm interested in
> submitting the package to CRAN soon, so any advice on what to do is
> appreciated.
> 
> Thanks,
> -Winston
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

-----------------------------------------------------------------------
This message and its attachments are strictly confidenti...{{dropped:8}}



[Rd] R CMD check warning with S3 method
Martyn Plummer