Klasy i wektory Rcpp

Optymalizacja kodu R za pomocą Rcpp

Romain François

Consulting Datactive, ThinkR

Dotychczas w tym kursie

  • Tworzenie funkcji C++ ✅
  • Pisanie pętli ✅
Optymalizacja kodu R za pomocą Rcpp

Klasy wektorów

Klasy wektorów Rcpp:

  • NumericVector do obsługi wektorów numeric, np. c(1,2,3)
  • IntegerVector dla integer, np. 1:3
  • LogicalVector dla logical, np. c(TRUE, FALSE)
  • CharacterVector dla napisów, np. c("a", "b", "c")

Ponadto:

  • List dla list, czyli wektorów dowolnych obiektów R
Optymalizacja kodu R za pomocą Rcpp

API klas wektorów

Najważniejsze metody:

  • x.size() zwraca liczbę elementów wektora x
  • x[i] zwraca element na pozycji i w wektorze x
Optymalizacja kodu R za pomocą Rcpp

Indeksowanie w C++

Indeksowanie w C++ zaczyna się od 0. Indeks oznacza przesunięcie względem pierwszej pozycji.

// first element of the vector
x[0]

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

Indeksowanie w R zaczyna się od 1.

# first 
x[1]

# last
x[length(x)]
Optymalizacja kodu R za pomocą Rcpp

Optymalizacja kodu R za pomocą Rcpp

Pierwszy element wektora

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

double value = x[0] ;

x[0] = 12.0 ;
Optymalizacja kodu R za pomocą Rcpp

Ostatni element wektora

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

double value = x[n-1] ;

x[n-1] = 12.0 ;
Optymalizacja kodu R za pomocą Rcpp

Iterowanie po wektorze

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

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

Optymalizacja kodu R za pomocą Rcpp

Czas na ćwiczenia!

Optymalizacja kodu R za pomocą Rcpp

Preparing Video For Download...