ÎncepețiÎncepe gratuit

Gestionarea valorilor lipsă

În R, pentru a testa dacă o valoare este lipsă trebuie să folosești is.na(x). (Ce se întâmplă dacă încerci x == NA?)

Echivalentul în Rcpp este metoda statică is_na(). Reamintește-ți că „statică" înseamnă că metoda aparține clasei, nu unei variabile anume. De exemplu, NumericVector::is_na(x) verifică dacă double-ul x este o valoare lipsă.
Similar, metoda statică get_na() îți returnează valoarea NA specifică clasei respective. De exemplu, CharacterVector::get_na() returnează o valoare de tip caracter lipsă.

Reține că operatorul logic or în C++ este același ca în R, ||.

Acest exercițiu face parte din cursul

Optimizarea codului R cu Rcpp

Vezi cursul

Instrucțiuni pentru exercițiu

  • Actualizează funcția weighted_mean_cpp() din exercițiul anterior astfel încât să returneze o valoare lipsă imediat ce întâlnește o valoare lipsă în x sau w.
    • Adaugă un bloc if care verifică dacă elementul i din x este NA sau dacă elementul i din w este NA.
    • În interiorul acelui bloc if, returnează un NA numeric.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

#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)
*/
Editează și rulează codul