1. Učit se
  2. /
  3. Kurzy
  4. /
  5. Optimizing R Code with Rcpp

Connected

cvičení

Přenesení poslední platné hodnoty dopředu

Když v časové řadě narazíš na chybějící data, jednou z běžných technik je přenést dopředu poslední hodnotu, která chybějící nebyla. Tato metoda se nazývá last observation carried forward. Přirozeně ji lze vyjádřit pomocí iterativního kódu. Zde je implementace v R:

na_locf1 <- function(x) {
  current <- NA  
  res <- x
  for(i in seq_along(x)) {
    if(is.na(x[i])) {
      # Replace with current
      res[i] <- current
    } else {
      # Set current 
      current <- x[i]
    }
  }  
  res
}

Podobně jako u klouzavých průměrů je tento kód velmi obtížné vektorizovat a zároveň zachovat jeho čitelnost. Protože se ale jedná jen o smyčku for, lze ho snadno přepsat do C++.

Funkce na_locf1() je dostupná v tvém pracovním prostředí. Převeď ji do C++ a výsledek přiřaď funkci na_locf2().

Pokyny

100 XP
  • Inicializuj proměnnou current na hodnotu NA typu NumericVector.
  • Podmínka if má ověřovat, zda je i-tý prvek vektoru x roven hodnotě NA typu NumericVector.
  • Pokud je podmínka splněna, nastav i-tý prvek vektoru res na hodnotu current.
  • V opačném případě nastav current na i-tý prvek vektoru x.