Media ponderată (versiunea C++)
Este momentul să îți pui cunoștințele în practică, creând o funcție care calculează media ponderată a unui vector.
Dat fiind un vector numeric de valori, x, și un alt vector numeric de ponderi, w, media ponderată este suma produselor dintre valorile datelor și ponderi, împărțită la suma ponderilor. Reține că x și w trebuie să aibă același număr de elemente.
În R, aceasta se calculează cu weighted.mean(), care face sum(x * w) / sum(w).
Acest exercițiu face parte din cursul
Optimizarea codului R cu Rcpp
Instrucțiuni pentru exercițiu
- Completează definiția funcției
weighted_mean_cpp().- Inițializează
total_xwșitotal_wcu zero, iarncu dimensiunea luix. - Specifică argumentele buclei
for, folosind un număr întreg,i, drept contor. - În interiorul buclei, adaugă ponderea de pe poziția i la
total_wși produsul dintre valoarea de pe poziția i și ponderea de pe poziția i latotal_xw. - Returnează produsul total împărțit la ponderea totală.
- Inițializează
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
#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))
*/