Bonjour
J'ai besoin de faire une fonction qui fait des boucles donc j'utilise Rcpp.
On m'a toujours dit de passer les objets par references.
Or dans les tutoriels que j'ai vu, ils n'en parlent pas.
Je crée 2 fonctions simples:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 // [[Rcpp::export]] double meanC1(NumericVector &x) { int n = x.size(); double total = 0; for(int i = 0; i < n; ++i) { total += x[i]; } return total / n; } // [[Rcpp::export]] double meanC2(NumericVector x) { int n = x.size(); double total = 0; for(int i = 0; i < n; ++i) { total += x[i]; } return total / n; }
Et j’utilise
microbenchmark(meanC1(x), meanC2(x)) pour me fournir des statistiques sur la vitesse d’exécution:
Surprise, la version avec une référence est globalement plus lente que sans références.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Unit: milliseconds expr min lq mean median uq max neval cld meanC1(x) 176.4979 176.6425 178.0519 177.0741 178.8011 188.5153 100 b meanC2(x) 176.3904 176.5870 177.4585 176.8858 177.6912 185.0183 100 a
Est ce que quelqu'un serait e dire pourquoi?
Merci d'avance de votre aide.
Partager