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



______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to