On Jun 19, 2012, at 11:40 AM, Adrian Duşa wrote: > Dear R devel, > > Apologies for these (most probably trivial) questions, doing my first > attempt to call C from R (and actually learning C in the process). > > I need to pass a matrix to C, and after reading R-exts.pdf (many > times), I was unable to find how to handle matrices at C-level... > except for, what probably is the answer, that matrices are in fact > vectors with dimensions. > > This is a sample code I am using at C level: > ±±±±±±±±±±±±±±±±±±±±±±±± > # include <R.h> > # include <Rinternals.h> > # include <R_ext/Rdynload.h> > > SEXP foo(SEXP x) { > SEXP dimx; > double *px, *pdimx; > > PROTECT(dimx = getAttrib(x, R_DimSymbol)); > px = REAL(x); > UNPROTECT(1); > return(dimx); > } > ±±±±±±±±±±±±±±±±±±±±±±±± > > The question is: how to create pointers to dimx (in order to extract > individual values)? > > I tried: > pdimx = REAL(dimx); > > This is where R complains that: > REAL() can only be applied to a 'numeric', not a 'integer' >
And it is right - dimensions are integers, not reals, you want int *pdimx = INTEGER(dimx); You can use REAL() only on real vectors, not on anything else. > Much in the same line, what would be the procedure to create pointers > to a logical vector y? > I tried: > PROTECT(y = coerceVector(y, LGLSXP)); > py = REAL(y); > > where R throws a similar error. > Obviously, you want Rboolean *py = LOGICAL(y); Cheers, Simon > Thanks very much in advance, > Adrian > > -- > Adrian Dusa > Romanian Social Data Archive > 1, Schitu Magureanu Bd. > 050025 Bucharest sector 5 > Romania > Tel.:+40 21 3126618 \ > +40 21 3120210 / int.101 > Fax: +40 21 3158391 > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel