Rcpp 類別與向量

用 Rcpp 最佳化 R 程式碼

Romain François

Consulting Datactive, ThinkR

本課回顧

  • 建立 C++ 函式 ✅
  • 撰寫迴圈 ✅
用 Rcpp 最佳化 R 程式碼

向量類別

Rcpp 向量類別:

  • NumericVector 操作 numeric 向量,如 c(1,2,3)
  • IntegerVector 用於 integer,如 1:3
  • LogicalVector 用於 logical,如 c(TRUE, FALSE)
  • CharacterVector 用於字串,如 c("a", "b", "c")

另外:

  • List 表示清單,即任意 R 物件的向量
用 Rcpp 最佳化 R 程式碼

向量類別 API

最重要的方法:

  • x.size() 取得向量 x 的元素數
  • x[i] 取得向量 x 中第 i 個位置的元素
用 Rcpp 最佳化 R 程式碼

C++ 索引

C++ 的索引從 0 開始。索引是到第一個位置的位移。

// 向量的第一個元素
x[0]

// 最後一個元素
x[x.size()-1]

R 的索引從 1 開始。

# 第一個 
x[1]

# 最後一個
x[length(x)]
用 Rcpp 最佳化 R 程式碼

用 Rcpp 最佳化 R 程式碼

向量的第一個元素

// x 來自其他地方(稍待片刻...)
NumericVector x = ... ; 

double value = x[0] ;

x[0] = 12.0 ;
用 Rcpp 最佳化 R 程式碼

向量的最後一個元素

// x 來自其他地方(稍待片刻...)
NumericVector x = ... ; 
int n = x.size() ;

double value = x[n-1] ;

x[n-1] = 12.0 ;
用 Rcpp 最佳化 R 程式碼

遍歷向量

// x 來自其他地方
NumericVector x = ... ; 
int n = x.size() ;

for( int i=0; i<n; i++){
    // 操作 x[i]
}

用 Rcpp 最佳化 R 程式碼

一起來練習吧!

用 Rcpp 最佳化 R 程式碼

Preparing Video For Download...