Lớp và vector trong Rcpp

Tối ưu hóa mã R với Rcpp

Romain François

Consulting Datactive, ThinkR

Nội dung trước đó trong khóa học

  • Tạo hàm C++ ✅
  • Viết vòng lặp ✅
Tối ưu hóa mã R với Rcpp

Các lớp vector

Các lớp vector trong Rcpp:

  • NumericVector để thao tác vector numeric, ví dụ c(1,2,3)
  • IntegerVector cho integer ví dụ 1:3
  • LogicalVector cho logical ví dụ c(TRUE, FALSE)
  • CharacterVector cho chuỗi, ví dụ c("a", "b", "c")

Ngoài ra:

  • List cho danh sách, tức vector của các đối tượng R bất kỳ
Tối ưu hóa mã R với Rcpp

API của lớp vector

Phương thức quan trọng nhất:

  • x.size() trả về số phần tử của vector x
  • x[i] trả về phần tử ở vị trí i trong vector x
Tối ưu hóa mã R với Rcpp

Đánh chỉ mục trong C++

Đánh chỉ mục trong C++ bắt đầu từ 0. Chỉ mục là độ lệch so với vị trí đầu.

// phần tử đầu tiên của vector
x[0]

// phần tử cuối cùng
x[x.size()-1]

Đánh chỉ mục trong R bắt đầu từ 1.

# phần tử đầu tiên 
x[1]

# phần tử cuối cùng
x[length(x)]
Tối ưu hóa mã R với Rcpp

Tối ưu hóa mã R với Rcpp

Phần tử đầu tiên của một vector

// x đến từ nơi khác (chờ chút ...)
NumericVector x = ... ; 

double value = x[0] ;

x[0] = 12.0 ;
Tối ưu hóa mã R với Rcpp

Phần tử cuối cùng của một vector

// x đến từ nơi khác (chờ chút ...)
NumericVector x = ... ; 
int n = x.size() ;

double value = x[n-1] ;

x[n-1] = 12.0 ;
Tối ưu hóa mã R với Rcpp

Lặp qua một vector

// x đến từ đâu đó
NumericVector x = ... ; 
int n = x.size() ;

for( int i=0; i<n; i++){
    // thao tác với x[i]
}

Tối ưu hóa mã R với Rcpp

Cùng luyện tập nào!

Tối ưu hóa mã R với Rcpp

Preparing Video For Download...