On Nov 28, 2009, at 7:50 PM, Guillaume Yziquel wrote:

FWIW what I think you should be really looking at is
R_PreserveObject/R_ReleaseObject.

OK. Thanks.
I would suggest looking at the many other R embeddings in other
languages that already exist since I don't think you approach is
very viable (but I think I expressed that already before).

Lisp - the only thing I've seen is a translator:

http://dan.corlan.net/R_to_common_lisp_translator/

I haven't found a binding for Haskell. Nor for Scheme.

Do you know of any bindings of R to functional languages?

It does not have to be a functional language.
To see it in use within a some-language-to-R bridge, you can check the
source in JRI, rpy2.
I can mostly speak for rpy2, and the way it is done there relies on both R and Python's GC. Creating a anonymous R object presented to the Python world is first "R_preserved" (from garbage collection from R) then using Python's reference counting mechanism, calling an "R_Release" whenever the Python wrapper is available for garbage collection (in fact there is a twist, but this is roughly the way it is working). In your case, you'll use the OCaml GC system (and "R_release" the R object when its OCaml representation is going for garbage collection).



since I don't think you approach is very viable (but I think I
expressed that already before).

You expressed the sentiment that it would be a very bad idea to
bypass the current API. I would be happy to hear why you would think
that a low-level binding is not possible, or not very viable.

By low-level, I mean a binding that takes hold of R objects without using symbols all over to reference them. (Using symbols in the
formals, the body or the environment of a closure is fine, for
instance, but I'd like to execute a closure directly, and eventually
be able to construct R closure from OCaml functions).

Rpy2 can do a lot of that, and probably so can JRI.

Please elaborate on the difficulties you perceive. That would be
helpful.

Symbols are used in various places in R, checking the outcome of deparse(substitute()) on an anonymous variable of large size could tell you that some things will not work out of the box nicely.


HTH,


L.




Cheers, Simon

All the best,

Guillaume.

-- Guillaume Yziquel http://yziquel.homelinux.org/

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

Reply via email to