Thanks, I'd started to look through serialize.c but got a bit lost. Thanks again! Jamie Olson
On Tue, Nov 13, 2012 at 2:12 PM, Duncan Murdoch <murdoch.dun...@gmail.com>wrote: > 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<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 > > > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.