On Thu, Sep 1, 2011 at 9:19 AM, Dirk Eddelbuettel <e...@debian.org> wrote: > > > I think (but feel to free me wrong by looking at headers and code :-) that > operator() and operator[] do the same thing.
I see a huge difference in this set of examples ( which are painfully repetitive on many levels) that are identical except for [] vs. (). This is true whether or not ret appears on the RHS. Am I missing something here? library(inline); library(Rcpp); library(rbenchmark); src1<-' int nn=as<int>(n); NumericVector ret(nn); for (int i=0; i<nn; i++) { for (int j=0; j<nn; j++) { ret[i] = ret[i]+1; // alternately, // ret[i] = 1; } }; return(ret); ' src1a<-' int nn=as<int>(n); NumericVector ret(nn); for (int i=0; i<nn; i++) { for (int j=0; j<nn; j++) { ret(i) = ret(i)+1; // alternately, // ret(i) = 1; } }; return(ret); ' mysample<-cxxfunction( signature(n="numeric"), src1, plugin='Rcpp') mysamplea<-cxxfunction( signature(n="numeric"), src1a, plugin='Rcpp') benchmark( bracket = mysample( 1e4), parens = mysamplea( 1e4), replications = 10 ) test replications elapsed relative user.self sys.self user.child sys.child 1 bracket 10 1.132 1.000000 1.13 0 0 0 2 parens 10 10.190 9.001767 10.18 0 0 > There is a noNA() wrapper for Rcpp sugar to push performance -- NA checking > is implemented on access 'because that is how R does' (and our first task to > reproduce numbers you'd get at the R prompt) but if you know what you are > doing and are aware of possible pitfalls you can skip this. Ah, so that's for sugar. Thanks. So I *can* do linear access on a NumericMatrix, ala myMatrix[ computed_index ], which goes in column-major order. Curiously, I don't see any timing difference here. Now I'm confused... src2<-' int index, nn=as<int>(n); NumericMatrix ret(nn, nn); for (int i=0; i<nn; i++) { for (int j=0; j<nn; j++) { index = i+j*nn; ret[index] = ret[index] + index; } }; return(ret); ' src2a<-' int index, nn=as<int>(n); NumericMatrix ret(nn, nn); for (int i=0; i<nn; i++) { for (int j=0; j<nn; j++) { index = i+j*nn; ret(i, j) = ret(i, j) + index; } }; return(ret); ' matfil<-cxxfunction( signature(n="numeric"), src2, plugin='Rcpp') matfila<-cxxfunction( signature(n="numeric"), src2a, plugin='Rcpp') benchmark( bracket = matfil( 1e4), parens = matfila( 1e4), replications = 10 ) test replications elapsed relative user.self sys.self user.child sys.child 1 bracket 10 17.495 1.000000 13.14 4.24 0 0 2 parens 10 17.514 1.001086 13.10 4.31 0 0 -xian -- 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