IniziaInizia gratis

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

Visualizza il corso

Istruzioni dell'esercizio

  • Completa la definizione di una funzione, sum_cpp, che itera sugli elementi di un NumericVector e ne restituisce la somma.
    • Imposta n come la size() di x.
    • Inizializza result a zero.
    • Specifica gli argomenti del ciclo for. Inizializza i a 0, imposta la condizione di iterazione come i minore di n e incrementa i di uno a ogni passo.
    • A ogni iterazione, aggiungi l’elemento i-esimo di x a result.

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))
*/
Modifica ed esegui il codice