I don't think this advice is correct in general. It may be correct for their particular context, I don't know.
I thinks that in general this is somewhat subjective, and there are some tradeoffs to consider:
- If you have name clashes (e.g. you use both
pkg2::fun), then you need to use
::, you cannot import both functions.
- If you use packages with function names that do not make it clear which packages they are in, then
:: will make your code easier to read.
- If you always use
:: for a dependency that is not essential, then that dependency will not be loaded with your package (only when you first actually use it). This will make your package load faster. Sometimes much faster, because some popular packages load slowly, e.g. Matrix.
:: is slower than importing the function via
NAMESPACE. (Haven't checked this recently, but I am pretty sure that it still holds.)
- Importing means shorter code, so it is quicker to type. Sounds banal, but if you call a package many times, it does matter.
You should never use
library(foo) in a package, you use
DESCRIPTION and the
NAMESPACE file instead (or roxygen2 to generate the
NAMESPACE file). Or
Imports and the
:: notation if you go that way.