CommencerCommencer gratuitement

Gestion des valeurs manquantes

En R, pour tester une valeur manquante, vous devez utiliser is.na(x). (Que se passe-t-il si vous essayez x == NA ?)

L’équivalent dans Rcpp est la méthode statique is_na(). Rappelez-vous que « statique » signifie que la méthode fait partie de la classe, et non de la variable en particulier. Par exemple, NumericVector::is_na(x) teste si le double x est une valeur manquante.
De même, la méthode statique get_na() vous donne le NA pour la classe associée. Par exemple, CharacterVector::get_na() renvoie une valeur manquante de type caractère.

Notez que l’opérateur logique « ou » en C++ est le même qu’en R, ||.

Cet exercice fait partie du cours

Optimiser du code R avec Rcpp

Afficher le cours

Instructions

  • Mettez à jour la fonction weighted_mean_cpp() de l’exercice précédent afin qu’elle renvoie une valeur manquante dès qu’une valeur manquante est détectée dans x ou w.
    • Ajoutez un bloc if qui vérifie si le ie élément de x est NA ou si le ie élément de w est NA.
    • À l’intérieur de ce bloc if, retournez un NA numérique.

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

#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)
*/
Modifier et exécuter le code