Suma wektora typu double
Pętle w C++ działają zazwyczaj znacznie szybciej niż w R, dlatego warto je dobrze opanować. Zacznijmy od funkcji, która sumuje wartości z NumericVector. To nawiązanie do umiejętności z Rozdziału 2, Ćwiczenia 10 oraz poprzedniego ćwiczenia w tym rozdziale.
To ćwiczenie jest częścią kursu
Optymalizacja kodu R za pomocą Rcpp
Instrukcje do ćwiczenia
- Uzupełnij definicję funkcji
sum_cpp, która iteruje po elementachNumericVectori zwraca ich sumę.- Ustaw
njakosize()obiektux. - Zainicjalizuj
resultwartością zero. - Podaj argumenty pętli
for: zainicjalizujiwartością0, ustaw warunek iteracji jakoimniejsze odni zwiększajio jeden w każdym kroku. - W każdej iteracji dodaj i-ty element
xdoresult.
- Ustaw
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
#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))
*/