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
<Kurs>R-Code mit Rcpp optimieren</Kurs>Übungsanweisungen
- Vervollständige die Definition einer Funktion
sum_cpp, die über die Elemente einesNumericVectoriteriert und deren Summe zurückgibt.- Setze
nauf diesize()vonx. - Initialisiere
resultmit null. - Gib die Argumente der
for-Schleife an. Initialisiereimit0, setze die Iterationsbedingung aufikleiner alsnund erhöheiin jedem Schritt um eins. - Addiere in jeder Iteration das i-te Element von
xzuresult.
- Setze
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
#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))
*/