Chúc mừng!

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

Romain François

Consulting Datactive, ThinkR

evalCpp và cppFunction

  • Đánh giá các lệnh C++ đơn giản
evalCpp( "40+2" )
42
  • Tạo hàm C++ từ R console
cppFunction( "double add( double x, double y){
    return x + y ;
}")
add( 40, 2 )
42
Tối ưu hóa mã R với Rcpp

Vòng lặp for

for( init ; condition ; increment ){
    body
}
  • init: chạy lúc bắt đầu
  • condition: có tiếp tục vòng lặp không
  • increment: sau mỗi vòng lặp
  • body: vòng lặp làm gì
Tối ưu hóa mã R với Rcpp

Vòng lặp for

for( int i=0; i<n; i++){
    // làm gì đó với i
}
Tối ưu hóa mã R với Rcpp

Đánh chỉ số vector

NumericVector x = ... ; 
int n = x.size() ;
// giá trị đầu tiên
x[0]
// giá trị thứ hai
x[1]
// giá trị cuối
x[n-1]
Tối ưu hóa mã R với Rcpp

Tệp C++ với Rcpp

#include <Rcpp.h>
using namespace Rcpp ;
// [[Rcpp::export]]
double add( double x, double y){
    return x + y ;
}
// [[Rcpp::export]]
double twice( double x){
    return 2.0 * x;
}
Tối ưu hóa mã R với Rcpp

Hàm Rcpp điển hình

#include <Rcpp.h>
using namespace Rcpp ;
// [[Rcpp::export]]
double fun( NumericVector x ){

    // trích dữ liệu đầu vào và chuẩn bị đầu ra
    int n = x.size() ;
    double res = 0.0 ;

    // lặp qua đầu vào và/hoặc đầu ra
    for(int i=0; i<n; i++){
        // làm gì đó với x[i]
    }

    // trả về kết quả
    return res ;
}
Tối ưu hóa mã R với Rcpp

Chúc mừng!

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

Preparing Video For Download...