[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