The package namespace (as recorded in the NAMESPACE file) is one of the more confusing parts of building a package. It’s a fairly advanced topic, and by and large, not that important if you’re only developing packages for yourself. However, understanding namespaces is vital if you plan to submit your package to CRAN. This is because CRAN requires that your package plays nicely with other packages.
When you first start using namespaces, it’ll seem like a lot of work for little gain. However, having a high-quality namespace helps encapsulate your package and makes it self-contained. This ensures that other packages won’t interfere with your code, that your code won’t interfere with other packages, and that your package works regardless of the environment in which it’s run.
As the name suggests, namespaces provide “spaces” for “names.” They provide a context for looking up the value of an object associated with a name.
Without knowing it, you’ve probably already used namespaces. For example, have you ever used the
:: operator? It disambiguates functions with the same name. For example, both plyr and Hmisc provide a
summarize() function. If you load plyr, then Hmisc,
summarize() will refer to the Hmisc version. But if you load the packages in the opposite order,
summarize() will refer to the plyr version. This can be confusing. Instead, you can explicitly refer to specific functions:
plyr::summarize(). Then the order in which ...