[Rcpp-devel] Indexing vector with x(i) and x[i] gives remarkable difference in computing time

Søren Højsgaard sorenh at math.aau.dk
Thu Nov 27 13:22:18 CET 2014


Dear all,
By "accident" I noticed that indexing with x(i) and x[i] gives remarkable difference in computing time. For example:

library(Rcpp)
cppFunction('
IntegerVector insert1 (int n){
  IntegerVector z(n);
  for (int i=0; i<n; ++i) z(i) = i;  // NOTICE: using ()
  return z;
}')
cppFunction('
IntegerVector insert2 (int n){
  IntegerVector z(n);
  for (int i=0; i<n; ++i) z[i] = i;  // NOTICE: using []
  return z;
}')

Both functions "work":
n <- 10; insert1(n); insert2(n)
 [1] 0 1 2 3 4 5 6 7 8 9
 [1] 0 1 2 3 4 5 6 7 8 9

But notice this difference in computing time:
n <- 50000
microbenchmark::microbenchmark( insert1(n), insert2(n) )
Unit: microseconds
       expr     min       lq     mean   median       uq      max neval cld
 insert1(n) 391.154 406.5500 416.9694 407.5005 421.1855  731.752   100   b
 insert2(n) 149.771 156.8045 189.9401 157.3745 163.0760 1204.635   100  a

So using z(i) is more than twice as slow as using z[i].

This prompts me to ask:
1) Why is that?
2) In the vignettes it is always [i] that are used for vectors. But why is it that (i,j) is then used for matrices. Wouldn't it be preferable if one could use both [] and () for indexing in both cases (and with the same speed) - or are there deeper reasons for this?

Best regards
Søren



More information about the Rcpp-devel mailing list