CommencezCommencez gratuitement

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

Voir le cours

Instructions de l’exercice

  • Complétez la définition d'une fonction, sum_cpp, qui parcourt les éléments d'un NumericVector et retourne leur somme.
    • Assignez à n la valeur de size() de x.
    • Initialisez result à zéro.
    • Précisez les arguments de la boucle for. Initialisez i à 0, définissez la condition d'itération comme i inférieur à n, et incrémentez i de un à chaque étape.
    • À chaque itération, additionnez le iᵉ élément de x à result.

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))
*/
Modifier et exécuter le code