Comece agoraComece grátis

Tratamento de valores ausentes

Em R, para testar um valor ausente você deve usar is.na(x). (O que acontece se você tentar x == NA?)

O equivalente em Rcpp é o método estático is_na(). Lembre-se de que estático significa que o método faz parte da classe, não da variável específica. Por exemplo, NumericVector::is_na(x) testa se o double x é um valor ausente.
De forma semelhante, o método estático get_na() fornece o NA da classe associada. Por exemplo, CharacterVector::get_na() retorna um valor de caractere ausente.

Observe que o operador lógico OU em C++ é o mesmo que em R, ||.

Este exercicio faz parte do curso

Otimizando código R com Rcpp

Ver curso

Instruções do exercicio

  • Atualize a função weighted_mean_cpp() do exercício anterior para que ela retorne um valor ausente assim que um valor ausente for encontrado em x ou w.
    • Adicione um bloco if que verifique se o elemento i de x é NA ou se o elemento i de w é NA.
    • Dentro desse bloco if, retorne um NA numérico.

exercicio interativo prático

Tente este exercicio completando este código de exemplo.

#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 e Executar Código