Obsługa brakujących wartości
W R do sprawdzania brakujących wartości służy funkcja is.na(x). (Co się stanie, gdy spróbujesz użyć x == NA?)
Odpowiednikiem w Rcpp jest metoda statyczna is_na(). Przypomnij sobie, że metoda statyczna należy do klasy, a nie do konkretnej zmiennej. Na przykład NumericVector::is_na(x) sprawdza, czy wartość double x jest brakująca.
Podobnie metoda statyczna get_na() zwraca wartość NA dla danej klasy. Na przykład CharacterVector::get_na() zwraca brakującą wartość znakową.
Zwróć uwagę, że logiczny operator lub w C++ jest taki sam jak w R: ||.
To ćwiczenie jest częścią kursu
Optymalizacja kodu R za pomocą Rcpp
Instrukcje do ćwiczenia
- Zaktualizuj funkcję
weighted_mean_cpp()z poprzedniego ćwiczenia tak, aby zwracała brakującą wartość od razu po napotkaniu wartościNAwxlubw.- Dodaj blok
if, który sprawdza, czy i-ty elementxlub i-ty elementwma wartośćNA. - Wewnątrz tego bloku
ifzwróć numeryczną wartośćNA.
- Dodaj blok
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
#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)
*/