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
Ö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 ixellerw.- Lägg till ett
if-block som kontrollerar om det i:te elementet ixärNAeller om det i:te elementet iwärNA. - Inuti det
if-blocket returnerar du ett numerisktNA.
- Lägg till ett
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)
*/