LoslegenKostenlos loslegen

Umgang mit fehlenden Werten

In R musst du zum Testen auf einen fehlenden Wert is.na(x) verwenden. (Was passiert, wenn du x == NA ausprobierst?)

Das entsprechende Pendant in Rcpp ist die statische Methode is_na(). Zur Erinnerung: Statisch bedeutet, dass die Methode zur Klasse gehört und nicht zu einer konkreten Variable. Zum Beispiel prüft NumericVector::is_na(x), ob das double x ein fehlender Wert ist.
Ähnlich gibt dir die statische Methode get_na() das NA der zugehörigen Klasse. Zum Beispiel liefert CharacterVector::get_na() einen fehlenden Zeichenwert.

Beachte, dass das logische Oder in C++ wie in R || ist.

Diese Übung ist Teil des Kurses

R-Code mit Rcpp optimieren

Kurs anzeigen

Anleitung zur Übung

  • Aktualisiere die Funktion weighted_mean_cpp() aus der vorherigen Übung so, dass sie sofort einen fehlenden Wert zurückgibt, sobald auf x oder w ein fehlender Wert auftritt.
    • Füge einen if-Block hinzu, der prüft, ob das i-te Element von x NA ist oder das i-te Element von w NA ist.
    • Gib innerhalb dieses if-Blocks ein numerisches NA zurück.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

#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)
*/
Code bearbeiten und ausführen