Gestione dei valori mancanti
In R, per verificare un valore mancante devi usare is.na(x). (Cosa succede se provi con x == NA?)
L’equivalente in Rcpp è il metodo statico is_na(). Ricorda che static significa che il metodo fa parte della classe, non della singola variabile. Per esempio, NumericVector::is_na(x) verifica se il double x è un valore mancante.
Allo stesso modo, il metodo statico get_na() restituisce l’NA associato alla classe. Per esempio, CharacterVector::get_na() restituisce un valore carattere mancante.
Nota che l’operatore logico OR in C++ è lo stesso che in R, ||.
Questo esercizio fa parte del corso
Ottimizzare il codice R con Rcpp
Istruzioni dell'esercizio
- Aggiorna la funzione
weighted_mean_cpp()dell’esercizio precedente in modo che restituisca un valore mancante non appena incontra un valore mancante inxow.- Aggiungi un blocco
ifche controlli se l’elemento i-esimo dixèNAoppure se l’elemento i-esimo diwèNA. - All’interno di quel blocco
if, restituisci unNAnumerico.
- Aggiungi un blocco
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
#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)
*/