[Rcpp-devel] 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 r-enthusiasts.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 element-by-element, 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 vector-returning 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, element-wise 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.2-2
| >
| >
| 
| 
| 
| -- 
| A man, a plan, a cat, a ham, a yak, a yam, a hat, a canal – Panama!
| _______________________________________________
| Rcpp-devel mailing list
| Rcpp-devel at lists.r-forge.r-project.org
| https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

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


More information about the Rcpp-devel mailing list