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

Součet vektoru typu double

Protože cykly běží v C++ výrazně rychleji než v R, je jejich psaní důležitou dovedností. Začněme funkcí, která sečte hodnoty z vektoru NumericVector. Navazuje na dovednosti z Kapitoly 2, cvičení 10, i na předchozí cvičení v této kapitole.

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

Optimizing R Code with Rcpp

Zobrazit kurz

Pokyny k cvičení

  • Dokonči definici funkce sum_cpp, která prochází prvky vektoru NumericVector a vrátí jejich součet.
    • Nastav n na hodnotu size() vektoru x.
    • Inicializuj result na nulu.
    • Zadej argumenty cyklu for: inicializuj i na 0, nastav podmínku iterace jako i menší než n a v každém kroku zvyš i o jedničku.
    • V každé iteraci přičti i-tý prvek vektoru x k proměnné result.

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 sum_cpp(NumericVector x) {
  // The size of x
  int n = ___;
  // Initialize the result
  double result = ___;
  // Complete the loop specification
  for(int i = 0; ___; ___) {
    // Add the next value
    result = result + ___;
  }
  return result;
}

/*** R
set.seed(42)
x <- rnorm(1e6)
sum_cpp(x)
# Does the function give the same answer as R's sum() function?
all.equal(sum_cpp(x), sum(x))
*/
Upravit a spustit kód