X-Priority: 3 (Normal)
Date: Tue, 16 May 2000 14:45:47 +0200 (CEST)
From: Martyn Plummer <plummer at iarc.fr>
To: nicolas baurin <nicolas.baurin at univ-orleans.fr>
Subject: RE: [R] C code: how to handle *double as a matrix t[] []
Cc: "r-help at stat.math.ethz.ch" <r-help at stat.math.ethz.ch>
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.