An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20110427/9437a2fa/attachment.pl>
Attempting to access an R list from within C code
2 messages · Cormac Long, Duncan Murdoch
On 27/04/2011 9:43 AM, Cormac Long wrote:
Hello R-help,
I am wondering if anyone can help me with this:
I want to access data in a list which has been passed
into a C function, but I cannot work out how to access
the values. How do I move from the given SEXP pointer
to the next object in the list? I have tried to use CDR,
but to no avail. The following code gives an
'address (nil), cause unknown'
error:
Generally questions like this are better in the R-devel list, but I'll answer this one: What R calls a list() isn't really a list in the Lisp sense, it's a vector. You access elements in C code by index, e.g. val = VECTOR_ELT(obj, i); You set values using code like SET_VECTOR_ELT(obj, i, newvalue); Duncan Murdoch
R Code:
dyn.load("thelib.so")
list1<-list(c(1:3),c(11:13),c(21:23))
listLen<-length(list1)
.C("myfunc",list1,listLen)
C Code (kept in file thelib.c, compiled on Ubuntu x64
machine using R2.13.0):
void showList(SEXP *obj, int *size)
{
SEXP *locObj=obj;
int i;
for(i=0;i<*size;i++){
Rprintf("Entry is %d: value is %f",i,REAL(*locObj)[1]);
*locObj=CDR(*locObj);
}
return;
}
Any help is greatfully appreciated!
Best wishes,
Dr. Cormac Long.
[[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.