Somme d'un vecteur de doubles
Comme les boucles s'exécutent généralement beaucoup plus vite en C++ qu'en R, savoir écrire des boucles est une compétence importante. Commençons par une fonction qui additionne les valeurs d'un NumericVector. Cela reprend les notions vues à l'Exercice 10 du chapitre 2 et à l'exercice précédent de ce chapitre.
Cette activité fait partie du cours
Optimiser le code R avec Rcpp
Instructions de l’exercice
- Complétez la définition d'une fonction,
sum_cpp, qui parcourt les éléments d'unNumericVectoret retourne leur somme.- Assignez à
nla valeur desize()dex. - Initialisez
resultà zéro. - Précisez les arguments de la boucle
for. Initialisezià0, définissez la condition d'itération commeiinférieur àn, et incrémentezide un à chaque étape. - À chaque itération, additionnez le iᵉ élément de
xàresult.
- Assignez à
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
#include
using namespace Rcpp;
// [[Rcpp::export]]
double sum_cpp(NumericVector x) {
// The size of x
int n = ___;
// Initialize the result
double result = ___;
// Complete the loop specification
for(int i = 0; ___; ___) {
// Add the next value
result = result + ___;
}
return result;
}
/*** R
set.seed(42)
x <- rnorm(1e6)
sum_cpp(x)
# Does the function give the same answer as R's sum() function?
all.equal(sum_cpp(x), sum(x))
*/