[Rcpp-devel] Matrix rows/columns
Dirk Eddelbuettel
edd at debian.org
Mon Dec 20 13:58:12 CET 2010
Hi Cedric,
On 20 December 2010 at 11:11, Cedric Ginestet wrote:
| Dear Rcpp users and developers,
|
| I seem to be unable to understand how to extract a row/column from an
| Rcpp Matrix. Here are some reproducible codes:
|
| ###############################
| library(Rcpp);
| library(inline)
| src <- '
| IntegerMatrix D;
| IntegerVector Drow = D.row(1);
| return Drow;
| '
| rowExtraction <-
| cxxfunction(signature(D="matrix"),body=src,plugin="Rcpp",verbose=TRUE)
| D <- matrix(1:9,3,3)
| rowExtraction(D)
| ################################
|
| Although this code compile, I get the following error when executing
| rowExtraction:
| Error in rowExtraction(D) : index out of bounds
|
| How can I extract a row into an Rcpp:vector?
You did it right, you just overlooked one small point: your matrix D was
empty! Hence the 'out of bounds' error. There was no connection between the
matrix D you created in R and the one you tried to operate on in C++.
Here I name the matrix passed in 'Dsexp' and construct D from it:
R> src <- '
+ IntegerMatrix D(Dsexp);
+ IntegerVector Drow = D.row(1);
+ return Drow;
+ '
R> rowExtraction <- cxxfunction(signature(Dsexp="matrix"),body=src,plugin="Rcpp")
R> D <- matrix(1:9,3,3)
R> rowExtraction(D)
[1] 2 5 8
R>
That gets you the second (!!) row as per the 0-based indexing in C and C++.
Dirk
--
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
More information about the Rcpp-devel
mailing list