Gewichtetes Mittel (C++-Version)
Zeit, dein Wissen anzuwenden, indem du eine Funktion zum Berechnen des gewichteten Mittels eines Vektors erstellst.
Gegeben sind ein numerischer Vektor mit Datenwerten x und ein weiterer numerischer Vektor mit Gewichten w. Das gewichtete Mittel ist die Summe aus Datenwert mal Gewicht, geteilt durch die Summe der Gewichte. Hinweis: x und w sollten gleich viele Elemente haben.
In R wird es mit weighted.mean() berechnet, was sum(x * w) / sum(w) entspricht.
Diese Übung ist Teil des Kurses
R-Code mit Rcpp optimieren
Anleitung zur Übung
- Vervollständige die Definition der Funktion
weighted_mean_cpp().- Initialisiere
total_xwundtotal_wmit Null undnmit der Größe vonx. - Gib die Argumente der
for-Schleife an, mit einer Ganzzahlials Zähler. - Addiere in der Schleife das i-te Gewicht zu
total_wund den i-ten Datenwert mal das i-te Gewicht zutotal_xw. - Gib das Gesamtprodukt geteilt durch das Gesamtgewicht zurück.
- Initialisiere
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
#include
using namespace Rcpp;
// [[Rcpp::export]]
double weighted_mean_cpp(NumericVector x, NumericVector w) {
// Initialize these to zero
double total_w = ___;
double total_xw = ___;
// Set n to the size of x
int n = ___;
// Specify the for loop arguments
for(int i = 0; ___) {
// Add ith weight
total_w += ___;
// Add the ith data value times the ith weight
total_xw ___;
}
// Return the total product divided by the total weight
return ___;
}
/*** R
x <- c(0, 1, 3, 6, 2, 7, 13, 20, 12, 21, 11)
w <- 1 / seq_along(x)
weighted_mean_cpp(x, w)
# Does the function give the same results as R's weighted.mean() function?
all.equal(weighted_mean_cpp(x, w), weighted.mean(x, w))
*/