Tối ưu hóa mã R với Rcpp
Romain François
Consulting Datactive, ThinkR
// một số từ N(0,1)
double x = R::rnorm( 0, 1 ) ;
// một số từ U(-2,2)
double y = R::runif( -2, 2 ) ;
// ...
Bộ tạo số ngẫu nhiên trong không gian tên Rcpp::.
NumericVector x = rnorm(10, 0, 2) ;
// giống như bên dưới
// vì có using namespace Rcpp ;
//
// NumericVector x = Rcpp::rnorm(10, 0, 2) ;
Cách khác: dùng phiên bản vô hướng từ R::
// tương đương
NumericVector x(10) ;
for(int i=0; i<10; i++){
x[i] = R::rnorm(0, 2) ;
}

// tạo n số
NumericVector x(n) ;
// điền vector trong vòng lặp
for( int i=0; i<n; i++){
// tiếp tục tạo d cho đến khi d dương
double d ;
do {
d = ... ;
} while( d < 0 ) ;
x[i] = d ;
}

int component( NumericVector weights, double total_weight ){
// trả về chỉ số của thành phần được chọn}
NumericVector rmix( int n, NumericVector weights, NumericVector means,
NumericVector sds ){
NumericVector res(n) ;
for( int i=0; i<n; i++){
// tìm thành phần sẽ dùng
...
// mô phỏng với mean và sd của thành phần đã chọn
... }
return res ;
}
Tối ưu hóa mã R với Rcpp