Kom igångKom igång gratis

Summa av en double-vektor

Eftersom slingor vanligtvis körs mycket snabbare i C++ än i R är det en viktig färdighet att kunna skriva dem. Vi börjar med en funktion som summerar värdena i en NumericVector. Det här bygger vidare på det du lärde dig i kapitel 2, övning 10, och den föregående övningen i det här kapitlet.

Den här övningen är en del av kursen

Optimera R-kod med Rcpp

Visa kurs

Övningsinstruktioner

  • Slutför definitionen av funktionen sum_cpp, som loopar över elementen i en NumericVector och returnerar deras summa.
    • Sätt n till size() av x.
    • Initiera result till noll.
    • Ange argumenten till for-slingan. Initiera i till 0, sätt iterationsvillkoret till att i är mindre än n, och öka i med ett för varje steg.
    • Lägg till det i:te elementet i x till result i varje iteration.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

#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))
*/
Redigera och kör kod