Zacznij terazZacznij za darmo

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

Zobacz kurs

Instrukcje do ćwiczenia

  • Zaktualizuj funkcję weighted_mean_cpp() z poprzedniego ćwiczenia tak, aby zwracała brakującą wartość od razu po napotkaniu wartości NA w x lub w.
    • Dodaj blok if, który sprawdza, czy i-ty element x lub i-ty element w ma wartość NA.
    • Wewnątrz tego bloku if zwróć numeryczną wartość NA.

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)
*/
Edytuj i uruchom kod