가중 평균(C++ 버전)
이제 벡터의 가중 평균을 계산하는 함수를 직접 만들어 보겠습니다.
데이터 값의 수치형 벡터 x와 가중치의 수치형 벡터 w가 주어지면, 가중 평균은 데이터 값과 가중치의 곱을 모두 더한 값을 가중치의 합으로 나눈 값입니다. x와 w는 원소 개수가 같아야 합니다.
R에서는 weighted.mean()으로 계산하며, 내부적으로 sum(x * w) / sum(w)를 수행합니다.
이 연습은 강의의 일부입니다
Rcpp로 R 코드 최적화하기
연습 안내
weighted_mean_cpp()함수 정의를 완성하세요.total_xw와total_w는 0으로,n은x의 크기로 초기화하세요.- 정수형 카운터
i를 사용하는for루프의 인자를 지정하세요. - 루프 안에서 i번째 가중치를
total_w에 더하고, i번째 데이터 값과 i번째 가중치의 곱을total_xw에 더하세요. - 전체 곱의 합을 전체 가중치의 합으로 나눈 값을 반환하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
#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))
*/