[Rcpp-devel] Translating between Rcpp Vectors and Matrices?

Dirk Eddelbuettel edd at debian.org
Fri Feb 1 03:19:45 CET 2013


On 31 January 2013 at 17:41, Kevin Ushey wrote:
| I was wondering - is there a way to translate between Vectors and Matrices? Eg,
| reinterpreting a 100 length NumericVector as a 10x10 NumericMatrix by setting
| the dimensions explicitly, or something of that form; preferably with a minimal
| amount of copying.

I fear that just setting the dim argument won't be enough as we're strongly
typed in C++.
 
| Alternatively, is there a preferred method for constructing a  NumericMatrix
| for output from a std::vector?

Yes, there are constructors that that rows, cols and a pointer to the
contiguous memory.  That is what I would use.  There should be examples
ploting.  But as a sketch:

   Rcpp::NumericMatrix M(10, 10, X.begin() );

Actually, as it is so cheap to test:

-------------------------------------------------------------------------------
#include <Rcpp.h>

// [[Rcpp::export]]
Rcpp::NumericMatrix reshapePlusPlus(Rcpp::NumericVector X) {
  return Rcpp::NumericMatrix(sqrt(X.length()), sqrt(X.length()), X.begin());
}
-------------------------------------------------------------------------------

which pans out:

R> sourceCpp("/tmp/kevin.cpp")
R> 
R> reshapePlusPlus(1:9)
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
R> 

 
| The motivation is primarily for reshaping of R objects through Rcpp. I wasn't
| able to find anything specific in the vignettes.

Not sure if this faster than just setting dim in R though....

Dirk

-- 
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com  


More information about the Rcpp-devel mailing list