Tạo vector với các giá trị cho trước
Thay vì khai báo một vector rồi mới gán giá trị cho từng phần tử, bạn có thể tạo vector và chỉ định giá trị ngay trong một dòng mã bằng ::create(). Đây là một hàm thành viên tĩnh (static member function), tức là phương thức của chính kiểu vector, không phải của một biến vector cụ thể. Bạn có thể chỉ định tối đa 20 phần tử bằng create. (Với vector dài hơn, bạn cần dùng nhiều dòng mã.)
Đoạn mã sau tạo một numeric vector, important_numbers, chứa pi, e, và vô cực.
NumericVector numbers = NumericVector::create(PI, exp(1), INFINITY);
::create cũng có thể dùng để tạo các vector có tên. Cú pháp đặt tên phần tử là _["name"] = value. Dưới đây là cùng đoạn mã, lần này có đặt tên cho các phần tử.
NumericVector numbers = NumericVector::create(_["pi"] = PI, _["e"] = exp(1), _["inf"] = INFINITY);
Giống như trong R, nếu bạn muốn kết hợp các biến có kiểu khác nhau vào một biến khác, hãy dùng list. Trong Rcpp, kiểu này được viết hoa: đó là List.
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
create_vectors()để tạo một số vector.- Tạo một character vector không có tên,
polygons, chứa lần lượt các giá trị"triangle","square", và"pentagon". - Tạo một integer vector có tên,
mersenne_primes, chứa lần lượt các giá trị3,7, và31. Các tên tương ứng là"first","second", và"third". - Tạo một list có tên,
both, chứa lần lượtpolygonsvàmersenne_primes. Tên phần tử cũng làpolygonsvàmersenne_primes.
- Tạo một character vector không có tê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]]
List create_vectors() {
// Create an unnamed character vector
CharacterVector polygons = CharacterVector::___("___", "___", "___");
// Create a named integer vector
IntegerVector mersenne_primes = ___(_["___"] = ___, ___, ___);
// Create a named list
List both = ___(___, ___);
return both;
}
/*** R
create_vectors()
*/