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
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 emxouw.- Adicione um bloco
ifque verifique se o elemento i dexéNAou se o elemento i dewéNA. - Dentro desse bloco
if, retorne umNAnumérico.
- Adicione um bloco
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)
*/