MulaiMulai sekarang secara gratis

Penanganan nilai hilang

Di R, untuk memeriksa nilai hilang Anda harus menggunakan is.na(x). (Apa yang terjadi jika Anda mencoba x == NA?)

Padanannya di Rcpp adalah metode statis is_na(). Perlu diingat bahwa "statis" berarti metode tersebut merupakan bagian dari kelas, bukan variabel tertentu. Misalnya, NumericVector::is_na(x) memeriksa apakah double x adalah nilai hilang. Demikian pula, metode statis get_na() memberikan NA untuk kelas terkait. Misalnya, CharacterVector::get_na() mengembalikan nilai karakter yang hilang.

Perhatikan bahwa operator logika "atau" di C++ sama seperti di R, yaitu ||.

Latihan ini adalah bagian dari kursus

Mengoptimalkan Kode R dengan Rcpp

Lihat Kursus

Petunjuk latihan

  • Perbarui fungsi weighted_mean_cpp() dari latihan sebelumnya sehingga fungsi tersebut mengembalikan nilai hilang segera setelah ditemukan nilai hilang pada x atau w.
    • Tambahkan blok if yang memeriksa apakah elemen ke-i dari x adalah NA atau elemen ke-i dari w adalah NA.
    • Di dalam blok if tersebut, kembalikan NA numerik.

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) {
  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)
*/
Edit dan Jalankan Kode