The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Sparse matrices

Limited support

cpp11armadillo, as of v0.5.0, supports the dgCMatrix class from the Matrix package. This class is a sparse matrix class that stores the matrix in a compressed column format.

The strategy for an efficient conversion from R to C++ and vice versa is to create an indexing of the non-zero elements of the input matrix and then use this indexing to create dgCMatrix (R) or SpMat (Armadillo/C++) object.

Note that cpp11 does not provide sparse matrices as it is the case for the dense data types doubles_matrix<> or integers_matrix<>. cpp11armadillo uses SEXP to provide a method to convert dgCMatrix objects to SpMat objects and vice versa using some properties of S4 objects.

Here is an example of how to convert a dgCMatrix object to a SpMat object and re-import it to R:

[[cpp11::register]] SEXP sum_matrices_(SEXP x) {
  // Convert from dgCMatrix to SpMat
  SpMat<double> A = as_SpMat(x);

  // Create a matrix B with a diagonal of random numbers
  SpMat<double> B(A.n_rows, A.n_cols);
  for (uword i = 0; i < A.n_rows; ++i) {
    B(i, i) = randu<double>();
  }

  A += B; // Add the two matrices

  // Convert back to dgCMatrix and return
  return as_dgCMatrix(A);
}

References

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.