modifying matrix allocation functions for use with R

Brian Gough bjg@network-theory.co.uk
Wed Dec 19 13:20:00 GMT 2001


Faheem Mitha writes:
 > One option I was considering was rewriting gsl_matrix_alloc (leaving out
 > the error checking) in terms of R_alloc. However, I can't find the code
 > for FUNCTION(gsl_block, alloc) (I assume this means gsl_block_alloc)
 > used in the code for gsl_matrix_alloc. gsl_matrix_alloc itself seems to be
 > in matrix/init_source.c. Can someone point me to the code for
 > gsl_block_alloc, or suggest any other options?

Based on my reading of the R documentation, I would suggest using the
standard gsl_matrix_alloc in this case, and handling any errors that
occur with the R libray function error().

e.g.,
         m = gsl_matrix_alloc(...)
         if (m == 0) { error ("could not allocate matrix"); } ;
         ....
         gsl_matrix_free(m);

This would only add a few lines to your code, and will work with the
standard GSL library so your extension will be more portable.

If you want to return an R object containing a gsl_matrix which can be
garbage collected then you could use a C++ wrapper, as the C++
interface in R allows the use of separate constructors and
destructors.

regards
Brian Gough



More information about the Gsl-discuss mailing list