# RcppGSL 0.3.0

**Thinking inside the box**, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)

Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

A new version of RcppGSL just arrived on CRAN. The RcppGSL package provides an interface from R to the GNU GSL using our Rcpp package.

Following on the heels of an update last month we updated the package (and its vignette) further. One of the key additions concern memory management: Given that our proxy classes around the GSL vector and matrix types are real C++ object, we can monitor their scope and *automagically* call `free()`

on them rather then insisting on the user doing it. This renders code *much simpler* as illustrated below. Dan Dillon added *const correctness* over a series on pull request which allows us to write more standard (and simply *nicer*) function interfaces. Lastly, a few new `typedef`

declaration further simply the use of the (most common) `double`

and `int`

vectors and matrices.

Maybe a code example will help. RcppGSL contains a full and complete example package illustrating how to write a package using the RcppGSL facilities. It contains an example of computing a column norm — which we blogged about before when announcing an much earlier version. In its full glory, it looks like this:

#include <RcppGSL.h> #include <gsl/gsl_matrix.h> #include <gsl/gsl_blas.h> extern "C" SEXP colNorm(SEXP sM) { try { RcppGSL::matrix<double> M = sM; // create gsl data structures from SEXP int k = M.ncol(); Rcpp::NumericVector n(k); // to store results for (int j = 0; j < k; j++) { RcppGSL::vector_view<double> colview = gsl_matrix_column (M, j); n[j] = gsl_blas_dnrm2(colview); } M.free() ; return n; // return vector } catch( std::exception &ex ) { forward_exception_to_r( ex ); } catch(...) { ::Rf_error( "c++ exception (unknown reason)" ); } return R_NilValue; // -Wall }

We manually translate the `SEXP`

coming from R, manually cover the `try`

and `catch`

exception handling, manually free the memory etc pp.

Well in the current version, the example is written as follows:

#include <RcppGSL.h> #include <gsl/gsl_matrix.h> #include <gsl/gsl_blas.h> // [[Rcpp::export]] Rcpp::NumericVector colNorm(const RcppGSL::Matrix & G) { int k = G.ncol(); Rcpp::NumericVector n(k); // to store results for (int j = 0; j < k; j++) { RcppGSL::VectorView colview = gsl_matrix_const_column (G, j); n[j] = gsl_blas_dnrm2(colview); } return n; // return vector }

This takes full advantage of *Rcpp Attributes* automagically creating the interface and exception handler (as per the previous release), adds a `const &`

interface, does away with the tedious and error-pronce `free()`

and uses the shorter-`typedef`

forms for `RcppGSL::Matrix`

and `RcppGSL::VectorViews`

using `double`

variables. Now the function is short and concise and hence easier to read and maintain. The package vignette has more details on using RcppGSL.

The NEWS file entries follows below:

## Changes in version 0.3.0 (2015-08-30)

The RcppGSL matrix and vector class now keep track of object allocation and can therefore automatically free allocated object in the destructor. Explicit

`x.free()`

use is still supported.The matrix and vector classes now support const reference semantics in the interfaces (thanks to PR #7 by Dan Dillon)

The matrix_view and vector_view classes are reorganized to better support const arguments (thanks to PR #8 and #9 by Dan Dillon)

Shorthand forms such as

`Rcpp::Matrix`

have been added for`double`

and`int`

vectors and matrices including views.Examples such as

`fastLm`

can now be written in a much cleaner and shorter way as GSL objects can appear in the function signature and without requiring explicit`.free()`

calls at the end.The included examples, as well as the introductory vignette, have been updated accordingly.

Courtesy of CRANberries, a summary of changes to the most recent release is available.

More information is on the RcppGSL page. Questions, comments etc should go to the rcpp-devel mailing list off the R-Forge page.

This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.

**leave a comment**for the author, please follow the link and comment on their blog:

**Thinking inside the box**.

R-bloggers.com offers

**daily e-mail updates**about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.

Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.