[Rd] passing matrix as argument to a C function
christos at nuverabio.com
Sun Dec 3 07:17:29 CET 2006
Although this is not directly an R-related question, it is relevant as I am
trying to port some R code to C to speed things up in a computation.
I am working through my first attempts to generate and link compiled C code
in R. I could make the 'convolve' function to work and similar functions
that take vectors as arguments. In my application I need to pass a couple
of matrices to the C function and could not figure out how to make it work
As an example, I tried to code first a simple matrix-vector product
function. Here is my code:
void matrix_mult( double **A, double *b, double *ab, int *nrow, int *ncol )
int i, j, nr = *nrow, nc = *ncol;
for( i = 0; i < nr; i++ )
ab[i] = 0.0;
for( j = 0; j < nc; j++ )
ab[i] += A[i][j] * b[j];
As I understand, passing the matrix A as (double **) is not standard C and
does not compile (to try things out I am using Microsoft Visual C++ compiler
in Windows XP). I tried to find the C code for crossprod for some hints,
but could not locate it in the R source. But probably this does not use the
Is there a way this can be done with .C? I suspect it will use in some way
the "vector of pointers to row vectors" concept, but I am not familiar
enough in C yet to figure it out. Any hints on how in can be done with
.Call if easier?
Christos Hatzis, Ph.D.
Nuvera Biosciences, Inc.
400 West Cummings Park
Woburn, MA 01801
More information about the R-devel