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
Anleitung zur Übung
- Aktualisiere die Funktion
weighted_mean_cpp()aus der vorherigen Übung so, dass sie sofort einen fehlenden Wert zurückgibt, sobald aufxoderwein fehlender Wert auftritt.- Füge einen
if-Block hinzu, der prüft, ob das i-te Element vonxNAist oder das i-te Element vonwNAist. - Gib innerhalb dieses
if-Blocks ein numerischesNAzurück.
- Füge einen
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)
*/