Yes, I see the reinvent-the-wheel problem, especially after combing through rcpp-devel archives some more. I admit that I don't well understand the relative costs/benefits of extending the R proxy class versus outsourcing to Armadillo. Two examples that come to mind are Rcpp::Array and Rcpp::DataFrame.
In the first case, could I conceivably turn an input 3D SEXP array into, e.g., NumericVector( Dimension(2,3,4) ), create an arma::cube out of it, process it and return? In the second case, there's a column level but no row-level accessor for the DataFrame (that I could find), nor is there a mapping into Armadillo. I get the impression that DataFrame is more of a convenience class for *returning* data rather than processing it? best, Christian On Tue, Sep 7, 2010 at 5:48 PM, Dirk Eddelbuettel <e...@debian.org> wrote: > > 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 > | <rom...@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@lists.r-forge.r-project.org > | https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel > > -- > Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com > -- A man, a plan, a cat, a ham, a yak, a yam, a hat, a canal – Panama! _______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel