[Rd] Package "datasets" not exporting anything on a recent R-2.15.1-patched

Laurent Gautier 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:
>>>> Hi,
>>>> I just stumbled on the following apparent oddity: the package 
>>>> "datasets"
>>>> does not appear to export anything out of its namespace:
>>>>  > ns_datasets <- getNamespace('datasets')
>>>>  > getNamespaceExports(ns_datasets)
>>>> character(0)
>>>> Not the case with other packages (example here with "utils"):
>>>>  > ns_utils <- getNamespace('utils')
>>>>  > head(getNamespaceExports(ns_utils))
>>>> [1] "?"            ".DollarNames" "adist"        "alarm" "apropos"
>>>> [6] "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"))
[1] TRUE

- probably used in the two situations A/ and B/ above.

>> Best,
>> Laurent

More information about the R-devel mailing list