[R] pass an element in a list() from R to C

teazrq rzhu at live.unc.edu
Thu Oct 13 02:42:40 CEST 2011


Hi all,

I'm new to this "call C from R" so bear with me.
I'v been writing some C code and compile it to .dll files that can be called
from R.
It was successful until today, when I start a new part of this project.
So, my R code passes arguments to this C code, and these arguments including
some integers and matrices.
it looks like this, and it works fine:
.C("Myfunction", as.matrix(dataset), as.integer(dim(dataset)) )
btw, In the C code, I will read the dataset as double *

Now, I have several datasets that in a list(),
you can think of it as 
A = list()
A[[1]] = dataset1
A[[2]] = dataset2

when I run this function again, by using
.C("Myfunction", as.matrix(A[[1]]), as.integer(dim(A[[1]])) )
it does not work anymore. It seems like the C code does not recognize 
"as.matrix(A[[1]])" as a pointer to A[[1]]. Anyone knows why is that?

btw, I did some reading on similar issue, and it seems that people use SEXP
more offen to pass arguments from R to C. I tried some of those by trying to
pass the whole list A to the C code and then use something like
REAL(VECTOR_ELT(A, 1))[0] to read each element from the list, however, it
still does not work... if using SEXP as object type is the currect way to do
it, could anyone give an example of how to extract element from the list in
the c code? and also, when I claim the function in C, should it be 

SEXP myfunction2(SEXP *list)

or 

SEXP myfunction2(SEXP list)  

these things are really confusing me....

Thank you for going through this post... Any helps are appreciated.

Ruoqing










--
View this message in context: http://r.789695.n4.nabble.com/pass-an-element-in-a-list-from-R-to-C-tp3900221p3900221.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list