A package should probably never register a S3 method unless it owns either the generic or the class. Here `formula.tools` owns neither. Instead of registering the method, it should export it like a regular function. This way S3 dispatch is based on lexical scoping rather than session-wide side effect.
Lionel > On 1 sept. 2017, at 12:57, Simon Barthelmé <simon.barthe...@gipsa-lab.fr> > wrote: > > Dear list > > I'm not sure whether this is a bug or an unavoidable consequence of the way > packages are loaded, but there can be surprising side effects of calling a > function via package::function. Here's an example using the formula.tools > package: > > form <- a ~ b > as.character(form) > formula.tools::lhs(form) > as.character(form) > > The first call to as.character returns: > [1] "~" "a" "b" > The second returns: > [1] "a ~ b" > > The reason being that formula.tools has: > S3method(as.character,formula) > in its namespace, which quietly supersedes the default one. In my case it led > to a bug that was rather hard to track down because it looked like > non-deterministic behaviour. > Shouldn't there at least be a warning about such side effects, the way > library() tells you about masking? > > Best > > Simon Barthelme > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel