Tổng của vector double
Vì vòng lặp thường chạy nhanh hơn nhiều trong C++ so với R, viết vòng lặp là một kỹ năng quan trọng. Hãy bắt đầu với một hàm cộng dồn các giá trị từ NumericVector. Bài này ôn lại kỹ năng bạn đã học ở Chương 2 Bài tập 10 và bài tập trước trong chương này.
Bài tập này là một phần của khóa học
Tối ưu hóa mã R với Rcpp
Hướng dẫn bài tập
- Hoàn thiện định nghĩa hàm
sum_cpplặp qua các phần tử củaNumericVectorvà trả về tổng của nó.- Gán
nbằngsize()củax. - Khởi tạo
resultbằng 0. - Chỉ định các đối số của vòng lặp
for. Khởi tạoibằng0, đặt điều kiện lặp làinhỏ hơnn, và tăngithêm một ở mỗi bước. - Ở mỗi vòng lặp, cộng phần tử thứ i của
xvàoresult.
- Gán
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
#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))
*/