開始使用免費開始

處理遺漏值

在 R 中,要測試是否為遺漏值,必須使用 is.na(x)。(如果你嘗試 x == NA 會怎樣?)

在 Rcpp 中的對應作法是使用靜態方法 is_na()。回想一下,靜態代表這個方法是類別的一部分,而不是特定變數的成員。例如,NumericVector::is_na(x) 會測試 double 型別的 x 是否為遺漏值。 同樣地,靜態方法 get_na() 會回傳該類別對應的 NA。例如,CharacterVector::get_na() 會回傳遺漏的字元值。

請注意,C++ 中的邏輯「或」與 R 相同,都是 ||

本練習屬於課程

用 Rcpp 最佳化 R 程式碼

檢視課程

練習說明

  • 將前一個練習中的 weighted_mean_cpp() 函式更新為:一旦在 xw 中遇到遺漏值就立刻回傳遺漏值。
    • 新增一個 if 區塊,用來檢查 x 的第 i 個元素是否為 NA,或 w 的第 i 個元素是否為 NA
    • 在該 if 區塊中,回傳數值型的 NA

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

#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)
*/
編輯並執行程式碼