From christos at nuverabio.com  Sun Dec  3 07:17:29 2006
From: christos at nuverabio.com (Christos Hatzis)
Date: Sun, 3 Dec 2006 01:17:29 -0500
Subject: [Rd] passing matrix as argument to a C function
Message-ID: <003a01c716a2$b6828ab0$0202a8c0@headquarters.silicoinsights>

Hi,
 
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
in C.
 
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
.C interface.

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?

Thank you.
-Christos  

Christos Hatzis, Ph.D.
Nuvera Biosciences, Inc.
400 West Cummings Park
Suite 5350
Woburn, MA 01801
Tel: 781-938-3830
www.nuverabio.com <http://www.nuverabio.com/>



[Rd] passing matrix as argument to a C function
Christos Hatzis