Viktat medelvärde (C++-version)
Nu är det dags att omsätta dina kunskaper i praktiken genom att skapa en funktion som beräknar det viktade medelvärdet av en vektor.
Givet en numerisk vektor med datavärden, x, och en numerisk vektor med vikter, w, är det viktade medelvärdet summan av datavärdena multiplicerade med vikterna, dividerat med summan av vikterna. Observera att x och w måste ha samma antal element.
I R beräknas detta med weighted.mean(), som gör sum(x * w) / sum(w).
Den här övningen är en del av kursen
Optimera R-kod med Rcpp
Övningsinstruktioner
- Komplettera definitionen av funktionen
weighted_mean_cpp().- Initiera
total_xwochtotal_wtill noll, ochntill storleken påx. - Ange argumenten till
for-loopen, med ett heltal,i, som räknare. - Inuti loopen adderar du den i:te vikten till
total_woch det i:te datavärdet multiplicerat med den i:te vikten tilltotal_xw. - Returnera den totala produkten dividerad med den totala vikten.
- Initiera
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
#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))
*/