Oh, I forgot to mention I tried a few other variations:
================= Re-export dplyr::filter: filter <- dplyr::filter NAMESPACE has: S3method(filter,test) export(filter) importFrom(dplyr,filter) Then the filter.test method from s3methodtest doesn't seem to get registered properly: library(s3methodtest) filter(structure(list(), class = "test")) # Error in UseMethod("filter") : # no applicable method for 'filter' applied to an object of class "test" ================= Create a brand new filter generic: filter <- function (.data, ...) UseMethod("filter") NAMESPACE has: S3method(filter,test) export(filter) importFrom(dplyr,filter) Then loading dplyr will cause its dplyr::filter generic to block methods registered for: s3methodtest::filter: library(s3methodtest) filter(structure(list(), class = "test")) # OK library(dplyr) filter(structure(list(), class = "test")) # Error in UseMethod("filter") : # no applicable method for 'filter' applied to an object of class "test" So either way, it doesn't work. -Winston On Thu, Jun 19, 2014 at 12:15 PM, Martyn Plummer <plumm...@iarc.fr> wrote: > 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@r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > ----------------------------------------------------------------------- > This message and its attachments are strictly confiden...{{dropped:12}} ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel