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

William Dunlap wdunlap at tibco.com
Thu Oct 13 18:31:27 CEST 2011


Functions with prototypes of the form
  SEXP myfunc(SEXP, SEXP, ..., SEXP)
must be called via .Call(), not .C().

Also, you declared myfunction as returning
SEXP but returned nothing.  Try ending the
function with
  return R_NilValue;
You should change the default compiler flags
to report all warnings (-Wall if you are using gcc).

And you left off a line or two of C code
that must have been there, or you code would
have compiled due to errors
  #include <R.h> /* not needed if Rinternals is included */
  #include <Rinternals.h>

Study 'Writing R Extensions' and work through the
examples in it.  In particular, look at section 5.9.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com 

> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of teazrq
> Sent: Wednesday, October 12, 2011 7:52 PM
> To: r-help at r-project.org
> Subject: Re: [R] pass an element in a list() from R to C
> 
> so, I did this:
> 
> B= list("a" = 1, "b" = 2, "c" = 3)
> 
> .C("myfunction", B)
> 
> 
> the c code is :
> 
> SEXP myfunction(SEXP matrix_temp)
> {
>     Rprintf("this element is %6.3f", REAL(VECTOR_ELT(matrix_temp,1))[0]);
> }
> 
> but after runing the R code, it says Error: VECTOR_ELT() can only be applied
> to a 'list', not a 'NULL'
> I guess this is because I did not acturally pass a list to the c function,
> but why is that?
> 
> --
> View this message in context: http://r.789695.n4.nabble.com/pass-an-element-in-a-list-from-R-to-C-
> tp3900221p3900426.html
> Sent from the R help mailing list archive at Nabble.com.
> 
> ______________________________________________
> 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