[R] save/load and package namespaces
    Duncan Murdoch 
    murdoch.duncan at gmail.com
       
    Tue Nov 13 20:12:27 CET 2012
    
    
  
On 13/11/2012 1:45 PM, Jamie Olson wrote:
> Correct me if I'm wrong, but it also seems that more generally, 
> everything works as long as the environment is 'below' .GlobalEnv. 
>  For example,
>
> x = function(){
>    y = 4
>    function()y
> }
> yfun = x()
> save(yfun,file = "yfun.RData")
>
> load("yfun.RData")
> yfun()
>
> This works fine even when there are more inherited environments.  I 
> imagine this is because in saving yfun, it also saves the environment 
> and any parent environments until some point?  Is it checking to see 
> if the environment inherits from .GlobalEnv or something like that?
The source is here: 
https://svn.r-project.org/R/trunk/src/main/serialize.c.  It's not the 
simplest code, but if you look, you can see that the empty, base and 
global environments are handled specially (by just writing a marker, not 
their contents).  Package and namespace environments are handled by 
writing out a string describing them.  Other environments are saved by 
saving their parent, their content, their hash table, and their attributes.
So yfun would be saved, along with its environment, but the parent of 
that environment is globalenv(), so just the marker is saved.
Duncan Murdoch
    
    
More information about the R-help
mailing list