[Rd] Package "datasets" not exporting anything on a recent R-2.15.1-patched
lgautier at gmail.com
Sun Aug 26 20:01:57 CEST 2012
On 2012-08-26 19:27, Prof Brian Ripley wrote:
> On 26/08/2012 18:20, Laurent Gautier wrote:
>> On 2012-08-26 19:03, Prof Brian Ripley wrote:
>>> On 26/08/2012 17:25, Laurent Gautier wrote:
>>>> I just stumbled on the following apparent oddity: the package
>>>> does not appear to export anything out of its namespace:
>>>> > ns_datasets <- getNamespace('datasets')
>>>> > getNamespaceExports(ns_datasets)
>>>> Not the case with other packages (example here with "utils"):
>>>> > ns_utils <- getNamespace('utils')
>>>> > head(getNamespaceExports(ns_utils))
>>>>  "?" ".DollarNames" "adist" "alarm" "apropos"
>>>>  "aregexec"
>>>> Is this a temporary glitch, or is there something new and specific to
>>>> "datasets" ?
>>> Not new, been so since R 2.14.0.
>>> The package contains no R code: the only reason it has a namespace is
>>> that since 2.14.0 all packages must have one.
>>> There are other data-only packages, but not in base R.
>>> Lazy-loaded data has not been part of the namespace for a long time:
>>> they are directly in the package's environment. The reason is the
>>> namespace scoping rules: if the package's datasets were in its
>>> namespace, they would be found before any other dataset of that name
>>> by the package's R functions.
>> Thanks for the quick answer and explanations. The last paragraph above
>> is leaving me with the wish to understand more before I comment on it.
>> Would you have an example of finding a dataset in a package's namespace
>> (before a dataset with the same name in an other package further down in
>> the search path) being a problem ?
> It does not happen now, but for example MASS contains both datasets
> and analysis functions and when the datasets were in the namespace you
> got them before other datasets (e.g. modified versions) of the same name.
I am seeing two ways for datasets to be used:
A- as internal data for necessary to a function in a package (e.g,
conversion tables). Not very frequent, from my limited experience.
B- as example data, used in the documentation. The most frequent usage.
For A/, the user is not expected to modify the data.
For B/, the data are typically passed to functions (to use an example
from MASS, "huber(chem)").
I thought a bit about it, but still do no see where exactly this would
be a problem.
An other example available in R is the vector "letters" (in base). It
can be thought of as a dataset, yet it is
- in a namespace
> "letters" %in% getNamespaceExports(getNamespace("base"))
- probably used in the two situations A/ and B/ above.
More information about the R-devel