Comece agoraComece grátis

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

Ver curso

Instruções do exercicio

  • Complete a definição da função weighted_mean_cpp().
    • Inicialize total_xw e total_w com zero, e n com o tamanho de x.
    • Especifique os argumentos do loop for, com um inteiro i como contador.
    • Dentro do loop, some o peso do i-ésimo elemento a total_w e o valor do i-ésimo dado vezes o i-ésimo peso a total_xw.
    • Retorne o produto total dividido pelo peso total.

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))
*/
Editar e Executar Código