Somma di un vettore double
Dato che i cicli in C++ sono in genere molto più veloci che in R, saperli scrivere è fondamentale. Iniziamo con una funzione che somma i valori di un NumericVector. Questo riprende le abilità che hai visto nell’Esercizio 10 del Capitolo 2 e nell’esercizio precedente di questo capitolo.
Questo esercizio fa parte del corso
Ottimizzare il codice R con Rcpp
Istruzioni dell'esercizio
- Completa la definizione di una funzione,
sum_cpp, che itera sugli elementi di unNumericVectore ne restituisce la somma.- Imposta
ncome lasize()dix. - Inizializza
resulta zero. - Specifica gli argomenti del ciclo
for. Inizializzaia0, imposta la condizione di iterazione comeiminore dine incrementaidi uno a ogni passo. - A ogni iterazione, aggiungi l’elemento i-esimo di
xaresult.
- Imposta
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
#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))
*/