ComenzarEmpieza gratis

Gestión de valores ausentes

En R, para comprobar si un valor está ausente debes usar is.na(x). (¿Qué pasa si intentas x == NA?)

El equivalente en Rcpp es el método estático is_na(). Recuerda que estático significa que el método pertenece a la clase, no a la variable concreta. Por ejemplo, NumericVector::is_na(x) comprueba si el double x es un valor ausente. De forma similar, el método estático get_na() te da el NA de la clase asociada. Por ejemplo, CharacterVector::get_na() devuelve un valor de carácter ausente.

Ten en cuenta que el operador lógico OR en C++ es el mismo que en R, ||.

Este ejercicio forma parte del curso

Optimizar código de R con Rcpp

Ver curso

Instrucciones del ejercicio

  • Actualiza la función weighted_mean_cpp() del ejercicio anterior para que devuelva un valor ausente en cuanto se encuentre un valor ausente en x o en w.
    • Añade un bloque if que compruebe si el elemento i-ésimo de x es NA o si el elemento i-ésimo de w es NA.
    • Dentro de ese bloque if, devuelve un NA numérico.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

#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)
*/
Editar y ejecutar código