Somme d’un vecteur de doubles
Comme les boucles sont généralement beaucoup plus rapides en C++ qu’en R, savoir les écrire est essentiel. Commençons par une fonction qui additionne les valeurs d’un NumericVector. Cela reprend les compétences vues au chapitre 2, exercice 10, et à l’exercice précédent de ce chapitre.
Cet exercice fait partie du cours
Optimiser du code R avec Rcpp
Instructions
- Complétez la définition d’une fonction
sum_cppqui parcourt les éléments d’unNumericVectoret renvoie leur somme.- Définissez
ncomme étant lasize()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, ajoutez le iᵉ élément de
xàresult.
- Définissez
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
#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))
*/