[R-pkg-devel] "apparent S3 methods" note in R CMD check

Martin Maechler maechler at stat.math.ethz.ch
Fri Jun 12 09:55:18 CEST 2015

>>>>> John Fox <jfox at 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

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


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

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.


More information about the R-package-devel mailing list