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

Prof Brian Ripley ripley at stats.ox.ac.uk
Tue May 16 15:16:31 CEST 2000


> 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.
> 

Another similar idea is to use the Numerical Recipes support functions
as in e.g. package nnet (part of the VR bundle).

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272860 (secr)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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