[R] Attempting to access an R list from within C code
Duncan Murdoch
murdoch.duncan at gmail.com
Wed Apr 27 16:59:10 CEST 2011
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.
More information about the R-help
mailing list