Rata-rata tertimbang (versi C++)
Saatnya mempraktikkan keterampilan Anda dengan membuat sebuah fungsi untuk menghitung rata-rata tertimbang dari sebuah vektor.
Diberikan vektor numerik berisi nilai data, x, dan vektor numerik lain berisi bobot, w, rata-rata tertimbang adalah jumlah dari nilai data dikali bobot dibagi jumlah dari bobot. Perhatikan bahwa x dan w harus memiliki jumlah elemen yang sama.
Di R, perhitungan ini dilakukan dengan weighted.mean(), yang menghitung sum(x * w) / sum(w).
Latihan ini adalah bagian dari kursus
Mengoptimalkan Kode R dengan Rcpp
Petunjuk latihan
- Lengkapi definisi fungsi
weighted_mean_cpp().- Inisialisasi
total_xwdantotal_wke nol, sertanke ukuranx. - Tentukan argumen untuk perulangan
for, dengan bilangan bulatisebagai pencacah. - Di dalam perulangan, tambahkan bobot ke-i ke
total_wdan nilai data ke-i dikalikan bobot ke-i ketotal_xw. - Kembalikan total hasil kali dibagi total bobot.
- Inisialisasi
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
#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))
*/