Bắt đầu ngayBắt đầu miễn phí

Xử lý giá trị thiếu

Trong R, để kiểm tra một giá trị thiếu bạn phải dùng is.na(x). (Điều gì xảy ra nếu bạn thử x == NA?)

Tương đương trong Rcpp là phương thức tĩnh is_na(). Hãy nhớ rằng "tĩnh" nghĩa là phương thức thuộc về lớp, không phải một biến cụ thể. Ví dụ, NumericVector::is_na(x) kiểm tra xem double x có phải là giá trị thiếu hay không.
Tương tự, phương thức tĩnh get_na() trả về giá trị NA cho lớp tương ứng. Ví dụ, CharacterVector::get_na() trả về một giá trị ký tự thiếu.

Lưu ý rằng toán tử logic "hoặc" trong C++ giống như trong R, ||.

Bài tập này là một phần của khóa học

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

Xem khóa học

Hướng dẫn bài tập

  • Cập nhật hàm weighted_mean_cpp() từ bài trước để hàm trả về giá trị thiếu ngay khi thấy giá trị thiếu ở x hoặc w.
    • Thêm một khối if kiểm tra liệu phần tử thứ i của xNA hoặc phần tử thứ i của wNA.
    • Bên trong khối if đó, trả về một NA kiểu số.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

#include 
using namespace Rcpp;

// [[Rcpp::export]]
double weighted_mean_cpp(NumericVector x, NumericVector w) {
  double total_w = 0;
  double total_xw = 0;
  
  int n = x.size();
  
  for(int i = 0; i < n; i++) {
    // If the ith element of x or w is NA then return NA
    ___
    
    
    total_w += w[i];
    total_xw += x[i] * w[i];
  }
  
  return total_xw / total_w;
}

/*** R 
x <- c(0, 1, 3, 6, 2, 7, 13, NA, 12, 21, 11)
w <- 1 / seq_along(x)
weighted_mean_cpp(x, w)
*/
Chỉnh sửa và Chạy Mã