Suma unui vector de tip double
Deoarece buclele rulează de obicei mult mai rapid în C++ decât în R, scrierea lor este o abilitate importantă. Să începem cu o funcție care calculează suma valorilor dintr-un NumericVector. Acesta reia conceptele învățate în Capitolul 2, Exercițiul 10, și în exercițiul anterior din acest capitol.
Acest exercițiu face parte din cursul
Optimizarea codului R cu Rcpp
Instrucțiuni pentru exercițiu
- Completează definiția funcției
sum_cpp, care parcurge elementele unuiNumericVectorși returnează suma lor.- Setează
nca valoarea returnată desize()aplicată pex. - Inițializează
resultcu zero. - Specifică argumentele buclei
for: inițializeazăila0, setează condiția de iterare caimai mic decâtnși incrementeazăicu unu la fiecare pas. - La fiecare iterație, adaugă al i-lea element al lui
xlaresult.
- Setează
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
#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))
*/