Summa av en double-vektor
Eftersom slingor vanligtvis körs mycket snabbare i C++ än i R är det en viktig färdighet att kunna skriva dem. Vi börjar med en funktion som summerar värdena i en NumericVector. Det här bygger vidare på det du lärde dig i kapitel 2, övning 10, och den föregående övningen i det här kapitlet.
Den här övningen är en del av kursen
Optimera R-kod med Rcpp
Övningsinstruktioner
- Slutför definitionen av funktionen
sum_cpp, som loopar över elementen i enNumericVectoroch returnerar deras summa.- Sätt
ntillsize()avx. - Initiera
resulttill noll. - Ange argumenten till
for-slingan. Initieraitill0, sätt iterationsvillkoret till attiär mindre änn, och ökaimed ett för varje steg. - Lägg till det i:te elementet i
xtillresulti varje iteration.
- Sätt
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
#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))
*/