Skip to content

R and C pointers

3 messages · Simon Urbanek, Adrian Dusa

#
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'

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.

Thanks very much in advance,
Adrian
#
On Jun 19, 2012, at 11:40 AM, Adrian Du?a wrote:

            
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.
Obviously, you want

Rboolean *py = LOGICAL(y);

Cheers,
Simon