始める無料で始める

double ベクトルの合計

C++ では一般に R よりループが高速に動作するため、ループを書く力は重要です。ここでは、NumericVector の値を合計する関数から始めましょう。これは、第2章の演習10と、この章の前の演習で学んだ内容の復習にもなります。

この演習はコースの一部です

Rcpp で R コードを最適化する

コースを見る

演習の手順

  • NumericVector の要素をループして合計を返す関数 sum_cpp の定義を完成させてください。
    • nxsize() に設定します。
    • result を 0 で初期化します。
    • for ループの引数を指定します。i0 に初期化し、反復条件を in より小さい間とし、各ステップで i を 1 ずつ増やします。
    • 各反復で、xi番目の要素を result に加えます。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

#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))
*/
コードを編集して実行