Optimiser le code R avec Rcpp
Romain François
Consulting Datactive, ThinkR
// un nombre tiré d'une N(0,1)
double x = R::rnorm( 0, 1 ) ;
// un nombre tiré d'une U(-2,2)
double y = R::runif( -2, 2 ) ;
// ...
Générateurs de nombres aléatoires dans l'espace de noms Rcpp::.
NumericVector x = rnorm(10, 0, 2) ;
// identique à ci-dessous
// grâce à using namespace Rcpp ;
//
// NumericVector x = Rcpp::rnorm(10, 0, 2) ;
Autre option : versions scalaires via R::
// équivalent à
NumericVector x(10) ;
for(int i=0; i<10; i++){
x[i] = R::rnorm(0, 2) ;
}

// on génère n nombres
NumericVector x(n) ;
// remplir le vecteur dans une boucle
for( int i=0; i<n; i++){
// continuer jusqu'à obtenir une valeur positive
double d ;
do {
d = ... ;
} while( d < 0 ) ;
x[i] = d ;
}

int component( NumericVector weights, double total_weight ){
// retourner l'indice de la composante sélectionnée}
NumericVector rmix( int n, NumericVector weights, NumericVector means,
NumericVector sds ){
NumericVector res(n) ;
for( int i=0; i<n; i++){
// déterminer la composante à utiliser
...
// simuler avec la moyenne et l'écart type de la composante
... }
return res ;
}
Optimiser le code R avec Rcpp