Romain Francois — written Dec 14, 2012 — source
Here we take the square root of each item of a matrix and return a
new matrix with the tranformed values. We do this by using
std::transform
to call the sqrt
function on each element of
the matrix:
#include <Rcpp.h>
#include <cmath>
using namespace Rcpp;
// [[Rcpp::export]]
NumericMatrix matrixSqrt(NumericMatrix orig) {
// allocate the matrix we will return
NumericMatrix mat(orig.nrow(), orig.ncol());
// transform it
std::transform(orig.begin(), orig.end(), mat.begin(), ::sqrt);
// return the new matrix
return mat;
}
Here we call the function from R:
m <- matrix(c(1,2,3, 11,12,13), nrow = 2, ncol=3)
matrixSqrt(m)
[,1] [,2] [,3] [1,] 1.000 1.732 3.464 [2,] 1.414 3.317 3.606Tweet