Soma de vetor double
Como loops geralmente executam muito mais rápido em C++ do que em R, escrever loops é uma habilidade importante. Vamos começar com uma função que soma os valores de um NumericVector. Isso retoma as habilidades que você aprendeu no Exercício 10 do Capítulo 2 e no exercício anterior deste capítulo.
Este exercicio faz parte do curso
Otimizando código R com Rcpp
Instruções do exercicio
- Complete a definição de uma função,
sum_cpp, que percorre os elementos de umNumericVectore retorna sua soma.- Defina
ncomo osize()dex. - Inicialize
resultem zero. - Especifique os argumentos do loop
for. Inicializeicomo0, defina a condição de iteração comoimenor quene incrementeide um em um a cada passo. - Em cada iteração, some o elemento i-ésimo de
xaresult.
- Defina
exercicio interativo prático
Tente este exercicio completando este código de exemplo.
#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))
*/