double ベクトルの合計
C++ では一般に R よりループが高速に動作するため、ループを書く力は重要です。ここでは、NumericVector の値を合計する関数から始めましょう。これは、第2章の演習10と、この章の前の演習で学んだ内容の復習にもなります。
この演習はコースの一部です
Rcpp で R コードを最適化する
演習の手順
NumericVectorの要素をループして合計を返す関数sum_cppの定義を完成させてください。nをxのsize()に設定します。resultを 0 で初期化します。forループの引数を指定します。iを0に初期化し、反復条件をiがnより小さい間とし、各ステップでiを 1 ずつ増やします。- 各反復で、
xのi番目の要素を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))
*/