[R-pkg-devel] S3 generic/method consistency false positive when dplyr imported
Aaron A. King
k|ng@@ @end|ng |rom um|ch@edu
Fri Jan 6 19:56:10 CET 2023
Excellent suggestion, Ivan. Thanks for pointing out just where to look.
I stepped through tools::checkS3methods("pomp") and it does appear to be
roughly as I conjectured. Namely, all functions are extracted from the
pomp namespace and checked against a list of generics. The check that is
performed is a simple pattern-match (i.e.,
startsWith(paste0(genericname,"."), functionname)). Clearly this is prone
to false positives. I wonder what would be involved in tightening this up
so that it agrees with what the actual dispatch mechanism gives....
Interestingly, there is a whitelist, implemented mostly via
tools::nonS3methods(). The function (plyr::rbind.fill) that I had been
importing is there but its replacement (dplyr::bind_rows) is not. So this
answers my original question.
The whitelist appears to be a somewhat arbitrary compilation of functions
from various packages, with no obvious theme. For example, dplyr is not on
the list, but ElectoGraph is; reshape is on the list but reshape2 is not.
The impression of arbitrariness is reinforced by the fact that packages
that Wickham has for whatever reason decided are superseded are present in
that list and packages he considers for the moment to be worth maintaining
are not. Doing a quick 'git blame' I see that the whitelist was mostly put
together in 2013, with a few additions in 2015 and much more occasionally
since.
It occurs to me that there ought to be a mechanism whereby a package author
could add to the list of non-S3 methods. I see from the mailing list
archives that there was discussion of this back in 2015 (
https://stat.ethz.ch/pipermail/r-devel/2015-June/071356.html), with what
looked like consensus that there ought to be such a facility, but nothing
seems to have actually been done about it. I conjecture that the decision
was to just fold false positives into the whitelist on an ad hoc basis.
Dr. Aaron A. King
University of Michigan
On Fri, Jan 6, 2023 at 3:24 AM Ivan Krylov <krylov.r00t using gmail.com> wrote:
> (Sorry for the unfinished message. I've got to do something about my
> mailer to make it harder to send them accidentally.)
>
> On Fri, 6 Jan 2023 11:21:49 +0300
> Ivan Krylov <krylov.r00t using gmail.com> wrote:
>
> > to see where 'filter' appears in the list of generics and where the
>
> filter.traj function gets matched to it as a method?
>
> --
> Best regards,
> Ivan
>
[[alternative HTML version deleted]]
More information about the R-package-devel
mailing list