[R] package environment versus namespace environment

Benjamin Tyner btyner at gmail.com
Sun Mar 9 00:42:13 CET 2014


   Duncan,
   Thank you for the informative link. So, do the loaded namespaces have an
   "ordering" akin to the package search path that determines that functions in
   the base namespace can see objects in the utils namespace? (I noticed that
   loadedNamespaces() just comes back in alphabetical order.)
   Regards
   Ben
   On 03/07/2014 11:46 AM, Duncan Murdoch wrote:

     On 07/03/2014 10:16 AM, Benjamin Tyner wrote:

     Hello,
     I realize that a function in <environment: base> (for example, function
     "head1" below) is unable to see (without resorting to "::", anyway)
     objects in utils (for example, "head" below), since package:base is
     after package:utils on the search path.

     However, I'm wondering what is the machinery that allows a function in
     <environment: namespace:base> (for example, function "head2" below) to
     be able to see "head" just fine, without needing to resort to "::".

     See Luke Tierney's article in R News,
     Name space management for R. Luke Tierney, R News, 3(1):2-6, June 2003
     [1]<http://cran.r-project.org/doc/Rnews/Rnews_2003-1.pdf>
     There's a link to it from the R help system.  Run help.start(), then look
     at "Technical papers" in the Miscellaneous Material section.
     I believe most of what it says is still current; the only thing I can see
     at a glance that is no longer correct is that in those days namespaces
     were optional in packages.  Now all packages have namespaces.
     Duncan Murdoch

     I'm also wondering more generally, why there is a need (practically
     speaking) for a distinction between the environment associated with a
     package and the environment associated with the namespace.
         $ export R_PROFILE=/home/btyner/Rprofile.site
         $ cat /home/btyner/Rprofile.site
         sys.source("/home/btyner/head1.R", envir = baseenv())
         sys.source("/home/btyner/head2.R", envir = .BaseNamespaceEnv)
         $ cat /home/btyner/head1.R
         head1 <- function(x) head(x)
         $ cat /home/btyner/head2.R
         head2 <- function(x) head(x)
         $ Rscript -e "head1(letters)"
         Error in head1(letters) : could not find function "head"
         Execution halted
         $ Rscript -e "head2(letters)"
         [1] "a" "b" "c" "d" "e" "f"
         $ Rscript -e "sessionInfo()"
         R version 3.0.1 (2013-05-16)
         Platform: x86_64-pc-linux-gnu (64-bit)
         locale:
          [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
          [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
          [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
          [7] LC_PAPER=C                 LC_NAME=C
          [9] LC_ADDRESS=C               LC_TELEPHONE=C
         [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
         attached base packages:
         [1] stats     graphics  grDevices utils     datasets  base
     Regards
     Ben
     ______________________________________________
     [2]R-help at r-project.org mailing list
     [3]https://stat.ethz.ch/mailman/listinfo/r-help
     PLEASE do read the posting guide
     [4]http://www.R-project.org/posting-guide.html
     and provide commented, minimal, self-contained, reproducible code.

   --
   

References

   1. http://cran.r-project.org/doc/Rnews/Rnews_2003-1.pdf
   2. mailto:R-help at r-project.org
   3. https://stat.ethz.ch/mailman/listinfo/r-help
   4. http://www.R-project.org/posting-guide.html


More information about the R-help mailing list