The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
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[@]metanet.ch.

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.