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
Pokyny k cvičení
- Dokonči definici funkce
sum_cpp, která prochází prvky vektoruNumericVectora vrátí jejich součet.- Nastav
nna hodnotusize()vektorux. - Inicializuj
resultna nulu. - Zadej argumenty cyklu
for: inicializujina0, nastav podmínku iterace jakoimenší nežna v každém kroku zvyšio jedničku. - V každé iteraci přičti i-tý prvek vektoru
xk proměnnéresult.
- Nastav
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))
*/