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
Instrucciones del ejercicio
- Completa la definición de una función,
sum_cpp, que itere sobre los elementos de unNumericVectory devuelva su suma.- Asigna a
nelsize()dex. - Inicializa
resulta cero. - Especifica los argumentos del bucle
for. Inicializaien0, establece la condición de iteración comoimenor quene incrementaien uno en cada paso. - En cada iteración, suma el elemento i-ésimo de
xaresult.
- Asigna a
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))
*/