LoslegenKostenlos loslegen

Summe eines Double-Vektors

Da Schleifen in C++ in der Regel deutlich schneller laufen als in R, ist das Schreiben von Schleifen eine wichtige Fähigkeit. Lass uns mit einer Funktion beginnen, die Werte aus einem NumericVector aufsummiert. Damit greifst du die Fähigkeiten aus Kapitel 2, Übung 10, und aus der vorherigen Übung in diesem Kapitel wieder auf.

Diese Übung ist Teil des Kurses

R-Code mit Rcpp optimieren

Kurs anzeigen

Anleitung zur Übung

  • Vervollständige die Definition einer Funktion sum_cpp, die über die Elemente eines NumericVector iteriert und deren Summe zurückgibt.
    • Setze n auf die size() von x.
    • Initialisiere result mit null.
    • Gib die Argumente der for-Schleife an. Initialisiere i mit 0, setze die Iterationsbedingung auf i kleiner als n und erhöhe i in jedem Schritt um eins.
    • Addiere in jeder Iteration das i-te Element von x zu result.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

#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))
*/
Code bearbeiten und ausführen