[R] C code: how to handle *double as a matrix t[] []

Martyn Plummer plummer at iarc.fr
Tue May 16 14:45:47 CEST 2000


On 16-May-00 nicolas baurin wrote:
> Helle R people,
> 
> here's my slightly out of range question: i am in c code (dll call from
> R - passing a matrix as double * data, int * row and int * col). In
> C/C++, i'd like to handle this *double as a 2D matrix with (*row-1) rows
> and (*col - 1) columns. Something like double t [*row -1 ] [*col -1]
> doesn't work (of course) but this is the idea - declaration of a 2D
> array with dimensions passed as arguments.

I faced this problem myself writing routines for multivariate time
series and came up with a solution which you will find in the C source for
the "ts" package in files carray.c, carray.h.  I have used a structure called
"Array" to represent a multi-dimensional array of doubles using arrays
of pointers. (and pointers to pointers...) A matrix would be created with
the function

Array make_matrix(double vec[], int nrow, int ncol);

Then you would use the macro MATRIX(x) to cast the result to an
array of pointers which behaves just like a two-dimensional array,
e.g. MATRIX(x)[i][j] would access the (i,j)th element.  There are
some convenience functions for doing element-wise arithmetic,
matrix multiplication and so on.

I hope this helps.
Martyn
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list