RcppArmadillo 0.2.2

[This article was first published on 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.

Following the
Rcpp 0.8.1
release we made yesterday
, we released
RcppArmadillo
release 0.2.2 this morning.
RcppArmadillo uses Rcpp
(and some ‘glue’ code) to provide a transparent interface from
R to
Conrad Sanderson’s impressive Armadillo library for linear algebra.

This release works well with the most recent
inline
release 0.3.5. One can now employ inlined R code as we generalized
how/which headers are included and how library / linking information is added
thanks a plugin mechanism. This is the first RcppArmadillo version to provide such
a plugin, We also updated the included Armadillo headers to its most recent release 0.9.10, added
some more operators and provide a utility function RcppArmadillo:::CxxFlags()
to provide include directory information on the fly.

An example of the direct inline approach for the fastLm function:

library(inline)
library(RcppArmadillo)

src <- '
	Rcpp::NumericVector yr(ys);			// creates Rcpp vector from SEXP
	Rcpp::NumericMatrix Xr(Xs);			// creates Rcpp matrix from SEXP
	int n = Xr.nrow(), k = Xr.ncol();

	arma::mat X(Xr.begin(), n, k, false);   	// reuses memory and avoids extra copy
	arma::colvec y(yr.begin(), yr.size(), false);

	arma::colvec coef = arma::solve(X, y);      	// fit model y ~ X
	arma::colvec res = y - X*coef;			// residuals

	double s2 = std::inner_product(res.begin(), res.end(), res.begin(), double())/(n - k);
							// std.errors of coefficients
	arma::colvec std_err = arma::sqrt(s2 * arma::diagvec( arma::inv(arma::trans(X)*X) ));

	return Rcpp::List::create(Rcpp::Named("coefficients") = coef,
				  Rcpp::Named("stderr")       = std_err,
				  Rcpp::Named("df")           = n - k
				  );
'

fun <- cxxfunction(signature(ys="numeric", Xs="numeric"), src, plugin="RcppArmadillo")

This creates a compiled function fun which, by using
Armadillo, regresses a vector ys
on a matrix Xs (just how the fastLmPure() function in the
package does) --- yet is constructed on the fly using cxxfunction
from
inline.

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

To 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.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)