Třídy Rcpp a vektory

Optimizing R Code with Rcpp

Romain François

Consulting Datactive, ThinkR

Co jsme se dosud naučili

  • Vytváření funkcí v C++ ✅
  • Psaní smyček ✅
Optimizing R Code with Rcpp

Vektorové třídy

Vektorové třídy Rcpp:

  • NumericVector pro vektory typu numeric, např. c(1,2,3)
  • IntegerVector pro typ integer, např. 1:3
  • LogicalVector pro typ logical, např. c(TRUE, FALSE)
  • CharacterVector pro řetězce, např. c("a", "b", "c")

Také:

  • List pro seznamy, tedy vektory libovolných R objektů
Optimizing R Code with Rcpp

API vektorových tříd

Nejdůležitější metody:

  • x.size() vrátí počet prvků vektoru x
  • x[i] vrátí prvek na pozici i ve vektoru x
Optimizing R Code with Rcpp

Indexování v C++

Indexování v C++ začíná od 0. Index je offset od první pozice.

// first element of the vector
x[0]

// last element
x[x.size()-1]

Indexování v R začíná od 1.

# first 
x[1]

# last
x[length(x)]
Optimizing R Code with Rcpp

Optimizing R Code with Rcpp

První prvek vektoru

// x comes from somewhere else (patience ...)
NumericVector x = ... ; 

double value = x[0] ;

x[0] = 12.0 ;
Optimizing R Code with Rcpp

Poslední prvek vektoru

// x comes from somewhere else (patience ...)
NumericVector x = ... ; 
int n = x.size() ;

double value = x[n-1] ;

x[n-1] = 12.0 ;
Optimizing R Code with Rcpp

Iterace přes vektor

// x comes from somewhere
NumericVector x = ... ; 
int n = x.size() ;

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

Optimizing R Code with Rcpp

Lass uns üben!

Optimizing R Code with Rcpp

Preparing Video For Download...