Classes et vecteurs Rcpp

Optimiser le code R avec Rcpp

Romain François

Consulting Datactive, ThinkR

Récapitulatif du cours

  • Créer des fonctions C++ ✅
  • Écrire des boucles ✅
Optimiser le 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 integer, p. ex. 1:3
  • LogicalVector pour logical, p. ex. c(TRUE, FALSE)
  • CharacterVector pour les chaînes, p. ex. c("a", "b", "c")

Aussi :

  • List pour les listes, soit des vecteurs d'objets R arbitraires
Optimiser le code R avec Rcpp

API des classes de vecteurs

Méthodes clés :

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

Indexation en C++

En C++, l'indexation commence à 0. L'index 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 le code R avec Rcpp

Optimiser le code R avec Rcpp

Premier élément d'un vecteur

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

double value = x[0] ;

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

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 le 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 le code R avec Rcpp

Passons à la pratique !

Optimiser le code R avec Rcpp

Preparing Video For Download...