Trung bình có trọng số

Tối ưu hóa mã R với Rcpp

Romain François

Consulting Datactive, ThinkR

Trung bình của x với trọng số w

Tối ưu hóa mã R với Rcpp

Phiên bản R

# see also ?weighted.mean
weighted_mean_R <- function(x, w){
    sum(x*w) / sum(w)
}

Tối ưu hóa mã R với Rcpp

Phiên bản R

# see also ?weighted.mean
weighted_mean_R <- function(x, w){
    sum(x*w) / sum(w)
}

Tối ưu hóa mã R với Rcpp

Phiên bản R

# see also ?weighted.mean
weighted_mean_R <- function(x, w){
    sum(x*w) / sum(w)
}

Tối ưu hóa mã R với Rcpp

Phiên bản R

# see also ?weighted.mean
weighted_mean_R <- function(x, w){
    sum(x*w) / sum(w)
}

Tối ưu hóa mã R với Rcpp

Phiên bản R kém hiệu quả

weighted_mean_loop <- function(x, w){
    total_xw <- 0
    total_w  <- 0

    for( i in seq_along(x)){
        total_xw <- total_xw + x[i]*w[i]
        total_w  <- total_w  + w[i]
    }

    total_xw / total_w

}
Tối ưu hóa mã R với Rcpp

Khung sườn phiên bản C++

// [[Rcpp::export]]
double weighted_mean_cpp( NumericVector x, NumericVector w){
    double total_xw = 0.0 ;
    double total_w  = 0.0 ;

    int n = ___ ;

    for( ___ ; ___ ; ___ ){
        // accumulate into total_xw and total_w
    }

    return total_xw / total_w ;

}
Tối ưu hóa mã R với Rcpp

Giá trị thiếu

  • Kiểm tra giá trị thiếu trong một vector số
bool test = NumericVector::is_na(x) ;
  • Biểu diễn NA trong double
double y = NumericVector::get_na() ;
Tối ưu hóa mã R với Rcpp

Cùng luyện tập nào!

Tối ưu hóa mã R với Rcpp

Preparing Video For Download...