[Rd] C Interface to R? New question

Alexander Schinner
Thu, 28 Apr 2005 16:01:43 -0000

Hi,

thanks for your help by pointing to the correct documentation and
tests/Embedding from 2.1.0. Using this information, I could realize most of
the work, I wanted to accomplish. Still, one problem is remaining.

In principle, I whould like to do

> dim(matrix)
[1] 100   3
> matrix[,3]
 [1] 201 202 203 ......

But how do I use the [ function from C? From the manual, I learned, that the
missing value before the "," is an empty list, but how to make one?

I tried something like

  R_result = getListElement(R_stl_y, "time.series");

  PROTECT(Rc_bracket = allocVector(LANGSXP, 4));
  SETCAR(Rc_bracket, Rf_findFun(Rf_install("["), R_GlobalEnv));
  SETCAR(CDR(Rc_bracket), R_result);

#if 1
  PROTECT(R_tmp = NEW_INTEGER(0));
  SETCAR(CDDR(Rc_bracket),  R_tmp);
#endif

#if 0
  PROTECT(R_tmp = allocVector(INTSXP, 0));
  SETCAR(CDDR(Rc_bracket),  R_tmp);
#endif

#if 0
 SETCAR(CDDR(Rc_bracket),  R_NilValue);
#endif

#if 0
 SETCAR(CDDR(Rc_bracket),  R_NilValue);
#endif

  PROTECT(R_tmp = NEW_INTEGER(1));
  INTEGER_DATA(R_tmp)[0] = 1;
  SETCAR(CDR(CDR(CDR(Rc_bracket))), R_tmp);

  PROTECT(R_remainder = Test_tryEval(Rc_bracket, &hadError));

but I always failed. So, How do I correctly call the [ function? How learn
from the source, which parameter has which function? And How do I generate an
empty vector/list?

Thanks,
Alexander Schinner