ComenzarEmpieza gratis

Suma de vector de dobles

Como los bucles suelen ejecutarse mucho más rápido en C++ que en R, escribir bucles es una habilidad importante. Empecemos con una función que sume los valores de un NumericVector. Esto retoma las habilidades que aprendiste en el Ejercicio 10 del Capítulo 2 y el ejercicio anterior de este capítulo.

Este ejercicio forma parte del curso

Optimizar código de R con Rcpp

Ver curso

Instrucciones del ejercicio

  • Completa la definición de una función, sum_cpp, que itere sobre los elementos de un NumericVector y devuelva su suma.
    • Asigna a n el size() de x.
    • Inicializa result a cero.
    • Especifica los argumentos del bucle for. Inicializa i en 0, establece la condición de iteración como i menor que n e incrementa i en uno en cada paso.
    • En cada iteración, suma el elemento i-ésimo de x a result.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

#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))
*/
Editar y ejecutar código