This isn't likely to make much difference in most cases, but calling a
function via :: can incur up to about twice the overhead on average
compared to calling an imported function

> fun1
function ()
file_ext("text.txt")
<environment: namespace:imptest>
> fun2
function ()
tools::file_ext("text.txt")
<environment: namespace:imptest>
> microbenchmark(fun1(), times=10000)
Unit: microseconds
   expr    min     lq median      uq     max neval
 fun1() 24.506 25.654 26.324 27.8795 154.001 10000
> microbenchmark(fun2(), times=10000)
Unit: microseconds
   expr    min      lq  median      uq     max neval
 fun2() 42.723 46.6945 48.8685 52.0595 2021.91 10000

Also, if one uses roxygen2 (or even if one doesn't) ##'@importFrom above
the function doing the calling documents this.

And of course if you need to know where a function lives environment will
tell you.

~G


On Fri, May 30, 2014 at 10:00 AM, Hadley Wickham <h.wickham@gmail.com>
wrote:

> > There is at least one subtle consequence to keep in mind when doing
> > this. Of course, whatever choice you make, if the whatever() function
> > moves to a different package, this breaks your package.
> > However, if you explicitly import the function, your package will
> > break at load-time (which is good) and you'll only have to modify
> > 1 line in the NAMESPACE file to fix it. But if you do foo::whatever(),
> > your package won't break at load-time, only at run-time. Also you'll
> > have to edit all the calls to foo::whatever() to fix the package.
> >
> > Probably not a big deal, but in an environment like Bioconductor where
> > infrastructure classes and functions can be shared by hundreds of
> > packages, having people use foo::whatever() in a systematic way would
> > probably make maintenance a little bit more painful than it needs to
> > be when the need arises to reorganize/refactor parts of the
> > infrastructure. Also, the ability to quickly grep the NAMESPACE
> > files of all BioC packages to see who imports what is very convenient
> > in this situation.
>
> OTOH, I think there's a big benefit to being able to read package code
> and instantly know where a function comes from.
>
> Personally, I found this outweighs the benefits that you outline:
>
> * functions rarely move between packages, and gsubbing for pkga:foo to
> pkgb:foo isn't hard
> * it's not that much hard to grep for pkg::foo in R/* than it is to
> grep NAMESPACE
>
> Hadley
>
> --
> http://had.co.nz/
>
> ______________________________________________
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



-- 
Gabriel Becker
Graduate Student
Statistics Department
University of California, Davis

	[[alternative HTML version deleted]]

