Zacznij terazZacznij za darmo

Suma wektora typu double

Pętle w C++ działają zazwyczaj znacznie szybciej niż w R, dlatego warto je dobrze opanować. Zacznijmy od funkcji, która sumuje wartości z NumericVector. To nawiązanie do umiejętności z Rozdziału 2, Ćwiczenia 10 oraz poprzedniego ćwiczenia w tym rozdziale.

To ćwiczenie jest częścią kursu

Optymalizacja kodu R za pomocą Rcpp

Zobacz kurs

Instrukcje do ćwiczenia

  • Uzupełnij definicję funkcji sum_cpp, która iteruje po elementach NumericVector i zwraca ich sumę.
    • Ustaw n jako size() obiektu x.
    • Zainicjalizuj result wartością zero.
    • Podaj argumenty pętli for: zainicjalizuj i wartością 0, ustaw warunek iteracji jako i mniejsze od n i zwiększaj i o jeden w każdym kroku.
    • W każdej iteracji dodaj i-ty element x do result.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

#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))
*/
Edytuj i uruchom kod