[R-pkg-devel] Two packages with the same generic function
Viechtbauer, Wolfgang (SP)
wo||g@ng@v|echtb@uer @end|ng |rom m@@@tr|chtun|ver@|ty@n|
Mon Jun 22 19:00:02 CEST 2020
Let's say there are two packages pkgA and pkgB, both of which have a generic function
foo <- function(x, ...)
and pkgA has a method for objects of class "A":
foo.A <- function(x, ...)
and pkgB has a method for objects of class "B":
foo.B <- function(x, ...)
Both packages export foo and their method and declare their respective S3 methods, so:
in NAMESPACE of pkgA and
in NAMESPACE of pkgB.
If a user loads pkgA first and then pkgB, this fails:
x <- 1:4
class(x) <- "A"
Error in UseMethod("foo") :
no applicable method for 'foo' applied to an object of class "A"
and vice-versa. Of course, pkgA::foo(x) works. Aside from pkgA importing foo() or vice-versa, is there some other clever way to make this work? In earlier versions of R (at least in 3.6.3), this used to work (i.e., the generic foo() from pkgB would find method foo.A() and vice-versa), but not since 4.0.0.
More information about the R-package-devel