Dear Martin, Thank you for addressing this issue. Introducing a nonS3method() directive in NAMESPACE seems a reasonable solution. It could replace export() for functions with "."s in their names.
Best, John On Fri, 12 Jun 2015 09:55:18 +0200 Martin Maechler <maech...@stat.math.ethz.ch> wrote: > >>>>> John Fox <j...@mcmaster.ca> > >>>>> on Wed, 10 Jun 2015 10:12:46 -0400 writes: > > > Dear list members, > > One of the packages I maintain, effects, generates the following note > in R > > CMD check: > > > * checking S3 generic/method consistency ... NOTE > > Found the following apparent S3 methods exported but not registered: > > all.effects > > > The offending function, all.effects(), is deprecated in favour of > > allEffects(), but I'd rather not get rid of it for backwards > compatibility. > > Is there any way to suppress the note without removing all.effects()? > > > To be clear, all.effects() is *not* a method of all(), and is defined as > > >> effects::all.effects > > function (...) > > { > > .Deprecated("allEffects") > > allEffects(...) > > } > > Dear John, > this is a good question without an obvious answer for the > moment. > > The check producing it is relatively new *and* has helped to > detect problems in many packages and places, but I would agree > is a "False Positive" in this case. > > One reason for such a check is the following output {in R >= 3.2.0}, > > > require("effects") > Loading required package: effects > > methods(all) > [1] all,ddiMatrix-method all,ldiMatrix-method > all,lsparseMatrix-method > [4] all,Matrix-method all,nsparseMatrix-method all.effects > > see '?methods' for accessing help and source code > > > > which wrongly does list your all.effects() among the all > methods.... and indeed (even worse), it *is* taken as S3 method > for all(): > > > ex <- structure(FALSE, class="effects") > > all(ex) > Error: $ operator is invalid for atomic vectors > In addition: Warning message: > 'all.effects' is deprecated. > Use 'allEffects' instead. > See help("Deprecated") > > > > --- > > Now I agree .. and have e-talked about this with another R core > member .. that it would be desirable for the package author to > effectively declare the fact that such a function is not an S3 > method even though it "looks like it" at least if looked from far. > > So, ideally, you could have something like > > nonS3method("all.effects") > > somewhere in your package source ( in NAMESPACE or R/*.R ) > which would tell the package-checking code -- but *ALSO* all the other S3 > method code that all.effects should be treated as a regular R > function. > > I would very much like such a feature in R, and for that reason, > I'm cross posting this (as one of the famous exceptions that > accompany real-life rules!!) to R-devel. > > There is one current work-around -- some would say "hack" -- in the R sources > for exceptions on a per package basis, and I will now activate > that workaround for you. > > Martin > ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel