[Rd] How to understand packages, namespaces, environments
Prof Brian Ripley
ripley at stats.ox.ac.uk
Fri May 6 19:34:03 CEST 2005
On Fri, 6 May 2005, Alexander Stoddard wrote:
> I would be very glad of pointers to information on how the concepts of
> packages, namespaces and environments are interrelated in R.
>
> I am trying to get a handle on this both so I can delve further into
> understanding other people's code and so I can organize my own in a more
> coherent manner.
>
> From my reading about environments it seems they function as what I would
> intuitively call namespaces. However, the documentation for the 'library'
> function implies that "namespace" has a specific meaning in R that I have so
> far failed to grasp. What is that meaning (or where should I look to read up
> on it) ?
Look in `Writing R Extensions' and on developer.r-project.org. I don't
know about `intuitively' but they are similar to other systems (e.g.
Perl's) namespaces.
More user-level documentation of namespaces (e.g. in R-lang) is on the
WOULD-BE-NICE list, but there is enough in `Writing R Extensions' for many
package writers and we are talking about more details of what happens
under the skin.
> I can think of the following more specific questions. Perhaps they may most
> usefully serve to reveal my misconceptions, so corrections would be very
> helpful.
It seems you have revealed that you have not studied the manuals nor the
help pages. Please do so before posting (see the posting guide).
> Does saying the following load package 'foo' into its own environment ?
>> library(foo)
>
> Do environments have names?
Not in general. You will see <environment: some-hex-address> printed
quite often. I am not at all sure you have grasped what an environment is
in R: see the R-lang manual. (Look it up in the index, as at present the
term is used before it is defined.)
> Of what does the list returned by search() actually consist? Is it a list of
> environments, a list that may include environments, or something else?
search() does not return a list: it returns a character vector. It seems
you have not read its help page, which tells you that quite explicitly.
> What is actually designated by a character vector of form "package:foo"?
That is actually a character string, not a character vector. It is a name
that can be used to refer to attach'ed objects, as the search() help page
says.
> In what ways can I use the character vector "package:foo" when interacting
> with R?
I am aware of attach(), detach() and as.environment() (which is used by
quite a few functions, e.g. get()). (Asking what you can do it an
extensible system such as R is not very helpful.) Generally it is a name
used when a package or another attach'ed object might be meant: it is not
used if a package is all that can be specified.
> Many thanks,
> Alex Stoddard
>
> P.S. It took me a long time of flailing about to discover the 'search'
> function. Perhaps it could be included in the "See Also" section of the help
> for 'ls'.
This *is* in `An Introduction to R', something we ask all R users to read.
I (and I am biased) suggest the right way to get to grips with things like
this is to read a good book on the S/R language.
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-devel
mailing list