Optymalizacja kodu R za pomocą Rcpp
Romain François
Consulting Datactive, ThinkR
Klasy wektorów Rcpp:
NumericVector do obsługi wektorów numeric, np. c(1,2,3)IntegerVector dla integer, np. 1:3LogicalVector 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 RNajważniejsze metody:
x.size() zwraca liczbę elementów wektora xx[i] zwraca element na pozycji i w wektorze xIndeksowanie 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)]

// x comes from somewhere else (patience ...)
NumericVector x = ... ;
double value = x[0] ;
x[0] = 12.0 ;
// x comes from somewhere else (patience ...)
NumericVector x = ... ;
int n = x.size() ;
double value = x[n-1] ;
x[n-1] = 12.0 ;
// 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