Classes et vecteurs Rcpp

Optimiser du code R avec Rcpp

Romain François

Consulting Datactive, ThinkR

Récapitulatif du cours

  • Créer des fonctions C++ ✅
  • Écrire des boucles ✅
Optimiser du code R avec Rcpp

Classes de vecteurs

Classes de vecteurs Rcpp :

  • NumericVector pour manipuler des vecteurs numeric, p. ex. c(1,2,3)
  • IntegerVector pour les integer, p. ex. 1:3
  • LogicalVector pour les logical, p. ex. c(TRUE, FALSE)
  • CharacterVector pour les chaînes, p. ex. c("a", "b", "c")

Également :

  • List pour les listes, c.-à-d. des vecteurs d'objets R arbitraires
Optimiser du code R avec Rcpp

API des classes de vecteurs

Méthodes clés :

  • x.size() renvoie le nombre d'éléments du vecteur x
  • x[i] renvoie l'élément à la position i dans le vecteur x
Optimiser du code R avec Rcpp

Indexation en C++

L'indexation en C++ commence à 0. L'indice est un décalage depuis la première position.

// premier élément du vecteur
x[0]

// dernier élément
x[x.size()-1]

En R, l'indexation commence à 1.

# premier
x[1]

# dernier
x[length(x)]
Optimiser du code R avec Rcpp

Optimiser du code R avec Rcpp

Le premier élément d'un vecteur

// x vient d'ailleurs (patience ...)
NumericVector x = ... ; 

double value = x[0] ;

x[0] = 12.0 ;
Optimiser du code R avec Rcpp

Le dernier élément d'un vecteur

// x vient d'ailleurs (patience ...)
NumericVector x = ... ; 
int n = x.size() ;

double value = x[n-1] ;

x[n-1] = 12.0 ;
Optimiser du code R avec Rcpp

Parcourir un vecteur

// x vient d'ailleurs
NumericVector x = ... ; 
int n = x.size() ;

for( int i=0; i<n; i++){
    // manipuler x[i]
}

Optimiser du code R avec Rcpp

Passons à la pratique !

Optimiser du code R avec Rcpp

Preparing Video For Download...