Kom igångKom igång gratis

Hantering av saknade värden

I R måste du använda is.na(x) för att testa om ett värde saknas. (Vad händer om du försöker med x == NA?)

Motsvarigheten i Rcpp är den statiska metoden is_na(). Kom ihåg att statisk innebär att metoden tillhör klassen, inte den specifika variabeln. Till exempel testar NumericVector::is_na(x) om double-värdet x är ett saknat värde.
På samma sätt ger den statiska metoden get_na() dig NA för den associerade klassen. Till exempel returnerar CharacterVector::get_na() ett saknat teckenvärde.

Observera att det logiska eller i C++ är detsamma som i R, ||.

Den här övningen är en del av kursen

Optimera R-kod med Rcpp

Visa kurs

Övningsinstruktioner

  • Uppdatera funktionen weighted_mean_cpp() från föregående övning så att den returnerar ett saknat värde så snart ett saknat värde påträffas i x eller w.
    • Lägg till ett if-block som kontrollerar om det i:te elementet i x är NA eller om det i:te elementet i w är NA.
    • Inuti det if-blocket returnerar du ett numeriskt NA.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

#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)
*/
Redigera och kör kod