Rcpp-klasser och vektorer

Optimera R-kod med Rcpp

Romain François

Consulting Datactive, ThinkR

Tidigare i kursen

  • Skapa C++-funktioner ✅
  • Skriva loopar ✅
Optimera R-kod med Rcpp

Vektorklasser

Rcpp-vektorklasser:

  • NumericVector för numeric-vektorer, t.ex. c(1,2,3)
  • IntegerVector för integer, t.ex. 1:3
  • LogicalVector för logical, t.ex. c(TRUE, FALSE)
  • CharacterVector för strängar, t.ex. c("a", "b", "c")

Även:

  • List för listor, dvs. vektorer av godtyckliga R-objekt
Optimera R-kod med Rcpp

Vektorklassernas API

Viktigaste metoderna:

  • x.size() returnerar antalet element i vektorn x
  • x[i] returnerar elementet på position i i vektorn x
Optimera R-kod med Rcpp

C++-indexering

Indexering i C++ börjar på 0. Indexet är en offset från första positionen.

// first element of the vector
x[0]

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

Indexering i R börjar på 1.

# first 
x[1]

# last
x[length(x)]
Optimera R-kod med Rcpp

Optimera R-kod med Rcpp

Vektorns första element

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

double value = x[0] ;

x[0] = 12.0 ;
Optimera R-kod med Rcpp

Vektorns sista element

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

double value = x[n-1] ;

x[n-1] = 12.0 ;
Optimera R-kod med Rcpp

Loopa över en vektor

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

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

Optimera R-kod med Rcpp

Nu kör vi en övning!

Optimera R-kod med Rcpp

Preparing Video For Download...