# [Rcpp-devel] Use of SubMatrix function

Dirk Eddelbuettel edd at debian.org
Sun Apr 22 02:34:23 CEST 2012

```Søren,

On 21 April 2012 at 09:17, Dirk Eddelbuettel wrote:
| Because of that, I would take a good hard look at RcppArmadillo.  Whenever I
| want 'more' operations from matrices, I usually go there.  You still get all
| the Rcpp goodies of easy access to/from R data structures, tests via inline,
| etc pp but you also get a more fleshed out API for math.
|
| Armadillo docs are here:   http://arma.sourceforge.net/docs.html
|

I was in a rush this morning to get out of the house to a little
"unconference" / workshop downtown, so I didn't immediately realize that I
had actually answered a very similar question a few days ago on
StackOverflow.

With that, the solution is pretty easy -- thanks to non-contiguous
this month.  Your example passes almost unaltered once I apply it
RcppArmdillo rather than plain Rcpp. I use explicit arma:: and Rcpp::
prefixes here just to make it very explicit "what comes from where".

R> library(inline)
R>
R> submat <- cxxfunction(signature(r_SS='int', r_aa='int', r_bb='int'), body = '
+    arma::mat  SS = Rcpp::as<arma::mat>(r_SS);
+    arma::uvec aa = Rcpp::as<arma::uvec>(r_aa);
+    arma::uvec bb = Rcpp::as<arma::uvec>(r_bb);
+    arma::mat  yy = SS.submat(aa, bb);
+    return Rcpp::wrap(yy);
R>
R> submat(matrix(1:9,nr=3), 0:1, 1:2)
[,1] [,2]
[1,]    4    7
[2,]    5    8
R>

For the .rows(rowindvec), .cols(colindvev) and .submat(rv, cv) member
functions, unsigned ints are used -- hence the 'uvec' (rather than vec).

Hope this helps,  Dirk

--
R/Finance 2012 Conference on May 11 and 12, 2012 at UIC in Chicago, IL
See agenda, registration details and more at http://www.RinFinance.com
```