double 向量求和
由于在 C++ 中循环通常比在 R 中快得多,编写循环是一项重要技能。让我们从一个对 NumericVector 中的值求和的函数开始。这将复习您在第 2 章第 10 个练习以及本章上一个练习中学到的技能。
本练习是课程的一部分
用 Rcpp 优化 R 代码
练习说明
- 完成函数
sum_cpp的定义,对NumericVector的各元素进行循环并返回其和。- 将
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))
*/