Oh, that was straightforward enough... Thanks very much, Simon. Adrian On Tuesday, June 19, 2012, Simon Urbanek wrote:
> > 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 <javascript:;> mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > -- 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 [[alternative HTML version deleted]]
______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel