Média ponderada (versão em C++)
Hora de colocar suas habilidades em prática criando uma função para calcular a média ponderada de um vetor.
Dado um vetor numérico de valores, x, e outro vetor numérico de pesos, w, a média ponderada é a soma dos valores multiplicados pelos pesos, dividida pela soma dos pesos. Observe que x e w devem ter o mesmo número de elementos.
Em R, ela é calculada com weighted.mean(), que faz sum(x * w) / sum(w).
Este exercicio faz parte do curso
Otimizando código R com Rcpp
Instruções do exercicio
- Complete a definição da função
weighted_mean_cpp().- Inicialize
total_xwetotal_wcom zero, encom o tamanho dex. - Especifique os argumentos do loop
for, com um inteiroicomo contador. - Dentro do loop, some o peso do i-ésimo elemento a
total_we o valor do i-ésimo dado vezes o i-ésimo peso atotal_xw. - Retorne o produto total dividido pelo peso total.
- Inicialize
exercicio interativo prático
Tente este exercicio completando este código de exemplo.
#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))
*/