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.duncan@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]]


