[Rcpp-devel] Making objects in the C++ "side" persistent

Martin Jakt mjakt at z2.keio.jp
Fri Jun 13 08:21:07 CEST 2014


Hi Dirk,

> | I'm wondering how you've gotten on with this. I'm struggling with a
> | somewhat similar problem in my own package. This uses the 'Rcpp modules'
> | to provide an interface to a couple of C++ functions. This works very
> | well, but accessing the objects (created by new()) after a save/reload
> | cycle results in R crashing.
> 
> It is a known shortcoming.

that's what I understood, but it's good to have it confirmed.
 

> I think this is the right route.  And we now have access to serialize() from
> the C/C++ side (via the small package RApiSerialize which I used in
> RcppRedis). It should not be too hard to move towards something like
> saveRDS/readRDS. Maybe you can experiment with explicitly deserialization
> of the 'payload' of your object, and then recreate it?

I'll have to have a look at that, and see how I can use it.

> There were some old discussions when Modules was new and fresh, but nobody
> has worked out a solution.  It should be doable, though, or at least
> "approximatively".  But we can rely on just 'save' or 'saveImage'.  We need
> to do the extra step.

I have a feeling that I've read at least part of that discussion, but I was 
unable to find the thread again. In particular I have a feeling that the use of 
.Last() was discussed. 

I played around a bit with interposing save() and defining a .Last() function 
(for details, see my previous email to Fernando), and this works, but has 
potential to conflict with other packages and hence cannot provide any 
guaranteed behaviour.

> | I'd also like to say that I _really_ appreciate Rcpp, especially the
> | sourceCpp function; it's makes R comfortable to use. Thanks to the
> | developers.
> Thanks for the kind words. Many of us use it too :)

I'm afraid that resorting to sourceCpp is often easier than trying to find out 
how to do something efficiently in R. Not sure if that's good for my R skills, 
but at least I can get my work done. And I do get a feeling that there are 
things that really can't be done fast in R, so being able to easily drop down 
into C++ makes it easy to do what otherwise would be either difficult or very 
slow.

cheers,

Martin

-- 
Martin Jakt
Department of Systems Medicine
Mitsunada Sakaguchi Laboratory
Keio University School of Medicine


More information about the Rcpp-devel mailing list