Začněte nyníZačněte zdarma

Práce s chybějícími hodnotami

V R se k testování chybějících hodnot používá funkce is.na(x). (Co se stane, když zkusíš x == NA?)

Ekvivalentem v Rcpp je statická metoda is_na(). Připomeňme, že statická metoda patří třídě samotné, nikoli konkrétní proměnné. Například NumericVector::is_na(x) ověří, zda je double x chybějící hodnotou.
Podobně statická metoda get_na() vrátí hodnotu NA pro příslušnou třídu. Například CharacterVector::get_na() vrátí chybějící hodnotu znakového typu.

Pozor: logický operátor nebo je v C++ stejný jako v R — ||.

Toto cvičení je součástí kurzu

Optimizing R Code with Rcpp

Zobrazit kurz

Pokyny k cvičení

  • Uprav funkci weighted_mean_cpp() z předchozího cvičení tak, aby vrátila chybějící hodnotu, jakmile narazí na NA v x nebo w.
    • Přidej blok if, který zkontroluje, zda je i-tý prvek x roven NA nebo zda je i-tý prvek w roven NA.
    • Uvnitř tohoto bloku if vrať číselnou hodnotu NA.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

#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)
*/
Upravit a spustit kód