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] 返回向量 xi 个位置的元素
用 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...