RcppArmadillo provides an interface from R to and from Armadillo by utilising the Rcpp R/C++ interface library.
Armadillo is a high-quality linear algebra library for the C++ language, aiming towards a good balance between speed and ease of use. It provides high-level syntax and functionality deliberately similar to Matlab (TM). See its website more information about Armadillo.
Glad you asked. Here is a light-weight and fast implementation of linear regression:
#include <RcppArmadillo/Lighter>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
::List fastLm(const arma::mat& X, const arma::colvec& y) {
Rcppint n = X.n_rows, k = X.n_cols;
::colvec coef = arma::solve(X, y); // fit model y ~ X
arma::colvec res = y - X*coef; // residuals
armadouble s2 = arma::dot(res, res) / (n - k); // std.errors of coefficients
::colvec std_err = arma::sqrt(s2 * arma::diagvec(arma::pinv(arma::trans(X)*X)));
arma
return Rcpp::List::create(Rcpp::Named("coefficients") = coef,
::Named("stderr") = std_err,
Rcpp::Named("df.residual") = n - k);
Rcpp}
You can Rcpp::sourceCpp()
the file above to compile the function. A version is also included in
the package as
the fastLm()
function.
The RcppArmadillo/Lighter
header includes Rcpp via its Rcpp/Lighter
header which precludes some more compile-time heavy features such as
‘Rcpp Modules’ which we may not need. See the Rcpp docs more details about ‘Light’,
‘Lighter’ and ‘Lightest’. In the example above, the switch saves about
15% of total compilation time.
The package is mature yet under active development with releases to CRAN about once every other month, and widely-used by other CRAN packages as can be seen from the CRAN package page. As of April 2024, there are 1135 CRAN packages using RcppArmadillo.
The package contains a pdf vignette which is a pre-print of the paper by Eddelbuettel and Sanderson in CSDA (2014), as well as an introductory vignette for the sparse matrix conversions.
RcppArmadillo is a CRAN package, and lives otherwise in its own habitat on GitHub within the RcppCore GitHub organization.
Run
install.packages("RcppArmadillo")
to install from your nearest CRAN mirror.
Dirk Eddelbuettel, Romain Francois, Doug Bates, Binxiang Ni, and Conrad Sanderson
GPL (>= 2)