[R] converting R objects to C types in .Call
Faheem Mitha
faheem at email.unc.edu
Mon Jan 24 20:13:49 CET 2005
Hi Barry,
Thanks for your reply.
On Mon, 24 Jan 2005, Barry Rowlingson wrote:
> Firstly, R is expecting an SEXP as a return value!
Ouch...
I haven't found anything that says this explicitly, but it looks like
.Call expects a SEXP to be returned to R. At any rate, trying to use void
instead gives a segfault.
> And secondly, your SEXP chstr is still a vector - so you need to get an
> element from it. If there's only one element, then that'll be the zeroth
> element. Here's my code:
> #include <R.h>
> #include <Rinternals.h>
> #include <stdio.h>
>
> SEXP testfn(SEXP chstr)
> {
> char * charptr = CHAR(VECTOR_ELT(chstr,0));
> printf("%s", charptr);
> return(chstr);
> }
> - I'm just returning the same object back in the return() statement, and
> using VECTOR_ELT(chstr,0) to get to the 0'th element.
> SO in R:
>
> > foo = .Call("testfn","fnord")
>
> should print 'fnord' and return foo as "fnord".
>
> > foo = .Call("testfn",c("bar","baz"))
>
> will print 'bar' and return foo as c("bar","baz")
Thanks for your help. That works fine. Faheem.
More information about the R-help
mailing list