[Rcppdevel] Filling NumericMatrix with NumericVectors with apply by row/column?
Dirk Eddelbuettel
edd at debian.org
Wed Sep 8 02:48:54 CEST 2010
On 7 September 2010 at 17:26, Christian Gunning wrote:
 I was thinking about this today, and I wondered if getter/setter
 functions for NumericMatrix, along with MatrixIndex classes might make
 any sense, as opposed to sugar? Something like this:

 SEXP foo1( int n ){
 NumericVector x(n);
 MatrixIndex i(1); // row index
 NumericMatrix xx(n,n) ;
 // possible to assign by row or column?
 for (i.index =0; i.index < n; i.index++) {
 xx.Setter(i) = zeros(n) ;
 }
 return(xx)
 }

 class MatrixIndex:
 {
 // use apply()'s convention of 1=row, 2=col
 // row/col specification is set on creation
 private:
 int m_rowcol;
 public:
 int index;
 MatrixIndex( int rowcol, int i=0) {
 m_rowcol = rowcol;
 index = i;
 }
 };
I have to admit that questions like this always leads to _numeric classes_
such as Armadillo or NewMat rather than our R proxy classes. Did you see
what Armadillo: http://arma.sourceforge.net/docs.html#insert_rows
Would that help? Passing matrices from R via Rcpp to Armadillo (and back) is
pretty easy.
Cheers, Dirk
PS We are a little behind wrapping Armadillo 0.9.70 in RcppArmadillo but we
will get there "soon".
 best,
 Christian

 On Sun, Aug 22, 2010 at 5:23 AM, Romain Francois
 <romain at renthusiasts.com> wrote:
 > Hello,
 >
 > There currently is no sugar facility to generate a matrix the way you want.
 > The last option is probably the best thing to do for now.
 >
 > Perhaps outer can help you :
 >
 > NumericVector xx(x) ;
 > NumericVector yy(y);
 > NumericMatrix m = outer( xx, yy, std::plus<double>() ) ;
 > return m ;
 >
 > Romain
 >
 > Le 21/08/10 23:13, Christian Gunning a écrit :
 >>
 >> Dear list,
 >>
 >> I'm amazed at the ability to use the apply family in Rcpp. Yet I'm still
 >> unsure of the best way to assign NumericVector objects into
 >> NumericMatrix objects. Must this be done elementbyelement, or is
 >> there something equivalent to R's MyMatrix[,1] = MyColVector?
 >> (As an aside, are both mymatrix[i,j] and mymatrix(i,j) equivalent? It
 >> seems that I've seen them used interchangably on the list.)
 >>
 >> A simple example of what I'm aiming for:
 >> Make an n*n matrix, and use sapply to perform a vector operation by
 >> row, here constructing a vector of length n full of zeros.
 >>
 >> // a simple vectorreturning function
 >> NumericVector zeros( int n){
 >> NumericVector ret(n);
 >> ret = 0;
 >> return ret;
 >> }
 >>
 >> // sapply version, doesn't work but is easy to read
 >> SEXP foo( int n ){
 >> NumericVector x(n);
 >> x = n;
 >> NumericMatrix xx(n,n) ;
 >> // possible to assign by row or column?
 >> xx = sapply( x, zeros ) ;
 >> return(xx);
 >> }
 >>
 >> // the looped version, where xx[,i] is not syntactically valid
 >> SEXP foo1( int n ){
 >> NumericVector x(n);
 >> int i;
 >> NumericMatrix xx(n,n) ;
 >> // possible to assign by row or column?
 >> for (i =0; i<n; i++) {
 >> xx[,i] = zeros(n) ;
 >> }
 >> return(xx)
 >> }
 >>
 >>
 >> // syntactically valid, elementwise assignment
 >> SEXP foo2( int n ){
 >> NumericVector x(n);
 >> int i, j;
 >> NumericMatrix xx(n,n) ;
 >> // possible to assign by row or column?
 >> for (i=0; i<n; i++) {
 >> x = zeros(n) ;
 >> for (j=0; j<n; j++) {
 >> xx(i,j) = x[j]
 >> }
 >> }
 >> return(xx)
 >> }
 >>
 >> thanks so much,
 >> Christian Gunning
 >> 
 >> A man, a plan, a cat, a ham, a yak, a yam, a hat, a canal – Panama!
 >
 > 
 > Romain Francois
 > Professional R Enthusiast
 > +33(0) 6 28 91 30 30
 > http://romainfrancois.blog.free.fr
 >  http://bit.ly/bzoWrs : Rcpp svn revision 2000
 >  http://bit.ly/b8VNE2 : Rcpp at LondonR, oct 5th
 > ` http://bit.ly/aAyra4 : highlight 0.22
 >
 >



 
 A man, a plan, a cat, a ham, a yak, a yam, a hat, a canal – Panama!
 _______________________________________________
 Rcppdevel mailing list
 Rcppdevel at lists.rforge.rproject.org
 https://lists.rforge.rproject.org/cgibin/mailman/listinfo/rcppdevel

Dirk Eddelbuettel  edd at debian.org  http://dirk.eddelbuettel.com
More information about the Rcppdevel
mailing list