... and just to add to the query, assume the author of pkg B did (does) not know of pkg A and so, for example, could (did) not import any of pkg A's content into B. Given that there are at the moment ~20,000 packages out there, this does not seem to be an unreasonable assumption. One may even further assume that the user may not know that (s)he has package B loaded, as it may be a dependency of another package that (s)he uses. I certainly don't keep track of all the dependencies of packages I use.
Under these assumptions, is there any more convenient alternative to Wolfgang's pkgA:foo(x) explicit call under such assumptions? If pkgA has a long name, what might one do? Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Mon, Jun 22, 2020 at 10:00 AM Viechtbauer, Wolfgang (SP) < wolfgang.viechtba...@maastrichtuniversity.nl> wrote: > Hi All, > > Let's say there are two packages pkgA and pkgB, both of which have a > generic function > > foo <- function(x, ...) > UseMethod("foo") > > and pkgA has a method for objects of class "A": > > foo.A <- function(x, ...) > print(x) > > and pkgB has a method for objects of class "B": > > foo.B <- function(x, ...) > plot(x) > > Both packages export foo and their method and declare their respective S3 > methods, so: > > export(foo) > export(foo.A) > S3method(foo, A) > > in NAMESPACE of pkgA and > > export(foo) > export(foo.B) > S3method(foo, B) > > in NAMESPACE of pkgB. > > If a user loads pkgA first and then pkgB, this fails: > > library(pkgA) > library(pkgB) > x <- 1:4 > class(x) <- "A" > foo(x) > > 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. > > Best, > Wolfgang > > ______________________________________________ > R-package-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-package-devel > [[alternative HTML version deleted]] ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel