From warnes@biostat.washington.edu  Wed Mar 31 23:17:40 1999
From: warnes@biostat.washington.edu (Gregory R. Warnes)
Date: Wed, 31 Mar 1999 14:17:40 -0800 (PST)
Subject: "dump" Splus -> R
In-Reply-To: <Pine.LNX.4.04.9903311354020.14356-100000@localhost>
Message-ID: <Pine.LNX.4.04.9903311409010.14356-100000@localhost>


A couple of comments for core...

In my examples, it looks like the only calls that need to be evaluated
inside the structure are "c()" and "list()".  A heuristic approach for
loading the dump files, is to assume that any other call ought to be
returned as a call, rather than evaluated.  Providing an undump() command
with this behavour might make it easier for people to move data between
Splus and R.

-Greg 


On Wed, 31 Mar 1999, Gregory R. Warnes wrote:

  GRW>> 
  GRW>> Hi All,
  GRW>> 
  GRW>> I just used "dump" on Splus to transfer a pile of survival objects from
  GRW>> Splus 3.4 on Solaris 7 to R 0.63.3 on Intel. 
  GRW>> 
  GRW>> The only trick is that survival objects contain an element holding the
  GRW>> original call that generated the object.  When Splus writes these out, it
  GRW>> doesn't mark them in any way, so when R tries to read them in, it ends up
  GRW>> trying to reevaluate the call.  Not nice.  
  GRW>> 
  GRW>> Anyway, as all but one** of the offending calls occur in statements
  GRW>> that look like
  GRW>>    "blah" <- structure( [...], call = func( param1, param2, [...], )
  GRW>>                  class = "myclass" [...] )
  GRW>> 
  GRW>> so I wrote the following perl script to encapsulate each call in 
  GRW>> as.call(expression(...)) :
  GRW>> 
  GRW>> -------begin translate.dump.pl--------
  GRW>> $RS="<-";
  GRW>> $OS="<-";
  GRW>> 
  GRW>> while(<>)
  GRW>>   {
  GRW>>         s/call\s*=(.*?),(\s+?)class/call=as.call(expression($1)),$2
  GRW>> class/s;
  GRW>>         print $_;
  GRW>>    }
  GRW>> ---------end translate.dump.pl----------
  GRW>> 
  GRW>> Now the data can be transfered by :
  GRW>> 
  GRW>>    Splus on Unix:
  GRW>>    > dump(ls())
  GRW>> 
  GRW>> Downloading the resulting "dumpdata" file.
  GRW>> 
  GRW>>    Linux shell:
  GRW>>    $  translate.dump.pl < dumpdata > dumpdata.fixed
  GRW>> 
  GRW>>    R on Linux:
  GRW>> 
  GRW>>    > source("dumpdata.fixed")
  GRW>> 
  GRW>> Just thought this might help someone out...
  GRW>> 
  GRW>> 
  GRW>> -Greg 
  GRW>> 
  GRW>> 
  GRW>> **The only exception was the ".Last.warning" object, which contained
  GRW>> something like 
  GRW>>   structure( "Warning Message" = offending(call) )
  GRW>> 
  GRW>> 

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._


"dump" Splus -> R
Gregory R. Warnes