Bắt đầu ngayBắt đầu miễn phí

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

Xem khóa học

Hướng dẫn bài tập

  • Hoàn thiện định nghĩa hàm sum_cpp lặp qua các phần tử của NumericVector và trả về tổng của nó.
    • Gán n bằng size() của x.
    • Khởi tạo result bằng 0.
    • Chỉ định các đối số của vòng lặp for. Khởi tạo i bằng 0, đặt điều kiện lặp là i nhỏ hơn n, và tăng i thêm một ở mỗi bước.
    • Ở mỗi vòng lặp, cộng phần tử thứ i của x vào result.

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))
*/
Chỉnh sửa và Chạy Mã