Classes e vetores em Rcpp

Otimizando código R com Rcpp

Romain François

Consulting Datactive, ThinkR

O que vimos até aqui

  • Criar funções em C++ ✅
  • Escrever loops ✅
Otimizando código R com Rcpp

Classes de vetores

Classes de vetor em Rcpp:

  • NumericVector para manipular vetores numeric, ex.: c(1,2,3)
  • IntegerVector para integer, ex.: 1:3
  • LogicalVector para logical, ex.: c(TRUE, FALSE)
  • CharacterVector para strings, ex.: c("a", "b", "c")

Também:

  • List para listas, ou seja, vetores de objetos R arbitrários
Otimizando código R com Rcpp

API de classes de vetores

Métodos mais importantes:

  • x.size() retorna o número de elementos do vetor x
  • x[i] retorna o elemento na posição i do vetor x
Otimizando código R com Rcpp

Indexação em C++

A indexação em C++ começa em 0. O índice é um deslocamento a partir da primeira posição.

// primeiro elemento do vetor
x[0]

// último elemento
x[x.size()-1]

A indexação em R começa em 1.

# primeiro
x[1]

# último
x[length(x)]
Otimizando código R com Rcpp

Otimizando código R com Rcpp

O primeiro elemento de um vetor

// x vem de outro lugar (calma ...)
NumericVector x = ... ; 

double value = x[0] ;

x[0] = 12.0 ;
Otimizando código R com Rcpp

O último elemento de um vetor

// x vem de outro lugar (calma ...)
NumericVector x = ... ; 
int n = x.size() ;

double value = x[n-1] ;

x[n-1] = 12.0 ;
Otimizando código R com Rcpp

Percorrendo um vetor com loop

// x vem de outro lugar
NumericVector x = ... ; 
int n = x.size() ;

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

Otimizando código R com Rcpp

Vamos praticar!

Otimizando código R com Rcpp

Preparing Video For Download...