Rastgele sayı üretimi

Rcpp ile R Kodunu Optimize Etme

Romain François

Consulting Datactive, ThinkR

Tek rastgele sayılar üretme

// N(0,1)'den tek sayı
double x = R::rnorm( 0, 1 ) ;

// U(-2,2)'den tek sayı
double y = R::runif( -2, 2 ) ;

// ...
Rcpp ile R Kodunu Optimize Etme

Vektörler üretme

Rcpp:: ad alanındaki rastgele sayı üreteçleri.

NumericVector x = rnorm(10, 0, 2) ;
// aşağıdakinin aynısı
// çünkü using namespace Rcpp ;
// 
// NumericVector x = Rcpp::rnorm(10, 0, 2) ;

Alternatif: R:: içindeki skaler sürümlerle

// aynısı
NumericVector x(10) ; 
for(int i=0; i<10; i++){
    x[i] = R::rnorm(0, 2) ;
}
Rcpp ile R Kodunu Optimize Etme

Rcpp ile R Kodunu Optimize Etme

Reddetme örneklemesi

// n sayı üretiriz
NumericVector x(n) ;

// vektörü döngüde doldur
for( int i=0; i<n; i++){
    // d pozitif olana kadar üretmeye devam et
    double d  ;
    do {
        d = ... ;
    } while( d < 0 ) ;

    x[i] = d ;    
}
Rcpp ile R Kodunu Optimize Etme

Rcpp ile R Kodunu Optimize Etme
  • Ağırlıkları kullanarak karışımın bileşenini seç
int component( NumericVector weights, double total_weight ){
    // seçilen bileşenin indeksini döndür}
  • Seçilen bileşenin parametreleriyle sayıyı üret
NumericVector rmix( int n, NumericVector weights, NumericVector means, 
                    NumericVector sds ){
    NumericVector res(n) ;    
    for( int i=0; i<n; i++){
        // hangi bileşenin kullanılacağını bul
        ...        
        // seçilen bileşenin mean ve sd'siyle simüle et
        ...    }    
    return res ;
}
Rcpp ile R Kodunu Optimize Etme

Hadi pratik yapalım!

Rcpp ile R Kodunu Optimize Etme

Preparing Video For Download...