>>>>> Simon Barthelmé <simon.barthe...@gipsa-lab.fr> >>>>> on Fri, 1 Sep 2017 12:57:13 +0200 writes:
> 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. Sure. > In my case it led to a bug that was rather hard to track > down because it looked like non-deterministic behaviour. well, it shouldn't have been hard to track I think ... see below > Shouldn't there at least be a warning about such side effects, the way > library() tells you about masking? The help page on "::" is pretty clear about the fact that the namespace is loaded if necessary. Personally I've got the impression that <namespace>::<name> is much "overused" nowadays, notably in packages where I'd strongly advocate using importFrom() in NAMESPACE, so all this happens at package load time, and then _not_ using `::` in the package sources itself. Many people seem to forget that every use of `::` is an R function call and using it is ineffecient compared to just using the already imported name. Best, Martin Maechler ETH Zurich and R Core Team > Best > Simon Barthelme ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel