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
Petunjuk latihan
- Perbarui fungsi
weighted_mean_cpp()dari latihan sebelumnya sehingga fungsi tersebut mengembalikan nilai hilang segera setelah ditemukan nilai hilang padaxatauw.- Tambahkan blok
ifyang memeriksa apakah elemen ke-i darixadalahNAatau elemen ke-i dariwadalahNA. - Di dalam blok
iftersebut, kembalikanNAnumerik.
- Tambahkan blok
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)
*/