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;
}
};
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!