IniziaInizia gratis

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

Visualizza il corso

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 in x o w.
    • Aggiungi un blocco if che controlli se l’elemento i-esimo di x è NA oppure se l’elemento i-esimo di w è NA.
    • All’interno di quel blocco if, restituisci un NA numerico.

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)
*/
Modifica ed esegui il codice