Ross,

This is generally a hard problem in software systems. The only language I know 
that explicitly addresses it is Erlang. Ultimately you need a system upgrade 
process, which defines how to update the data in your system to match a new 
version of the system. You could do this by writing a script that 
1) loads the old version of your library
2) loads your data/serialized reference classes
3) exports data to some intermediate format (eg a list)
4) loads new version of library
5) imports data from intermediate format

Once you've gone through the upgrade process, arguably it's better to persist 
the data in a format that is decoupled from your objects since then future 
upgrades would simply be
1) load new library
2) import data from intermediate format

which is no different from day-to-day operation of your app/system (ie you're 
always writing to and reading from the intermediate format). 

Warm regards,
Brian

•••••
Brian Lee Yung Rowe
Founder, Zato Novo
Professor, M.S. Data Analytics, CUNY

> On Aug 1, 2014, at 1:54 PM, Ross Boylan <r...@biostat.ucsf.edu> wrote:
> 
> I saved objects that were defined using several reference classes.
> Later I modified the definition of reference classes a bit, creating new
> functions and deleting old ones.  The total number of functions did not
> change.  When I read them back I could only access some of the original
> data.
> 
> I asked on the user list and someone suggested sticking with the old
> class definitions, creating new classes, reading in the old data, and
> converting it to the new classes.  This would be awkward (I want the
> "new" classes to have the same name as the "old" ones), and I can
> probably just leave the old definitions and define the new functions I
> need outside of the reference classes.
> 
> Are there any better alternatives?
> 
> On reflection, it's a little surprising that changing the code for a
> reference class makes any difference to an existing instance, since all
> the function definitions seem to be attached to the instance.  One
> problem I've had in the past was precisely that redefining a method in a
> reference class did not change the behavior of existing instances.  So
> I've tried to follow the advice to keep the methods light-weight.
> 
> In this case I was trying to move from a show method (that just printed)
> to a summary method that returned a summary object.  So I wanted to add
> a summary method and redefine the show to call summary in the base
> class, removing all the subclass definitions of show.
> 
> Regular S4 classes are obviously not as sensitive since they usually
> don't include the functions that operate on them, but I suppose if you
> changed the slots you'd be in similar trouble.
> 
> Some systems keep track of versions of class definitions and allow one
> to write code to migrate old to new forms automatically when the data
> are read in.  Does R have anything like that?
> 
> The system on which I encountered the problems was running R 2.15.
> 
> ______________________________________________
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to