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
Anleitung zur Übung
- 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 Ü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))
*/