Allmän princip: Minnesallokering

Effektiv R-kod

Colin Gillespie

Jumping Rivers & Newcastle University

Effektiv R-kod

Om vi programmerade i C...

Vi ansvarar för minnesallokeringen
// C code: request memory for a number
x = (double *) malloc(sizeof(double));

// Free the memory
free(x);
  • I R sker minnesallokering automatiskt
  • R allokerar minne i RAM för att lagra variabler
  • Minimera variabeltilldelning för bättre prestanda
Effektiv R-kod

Exempel: Sekvens av heltal

$$ 1, 2, \ldots, n $$

Det självklara och bästa sättet
## Method 1
x <- 1:n
Inte så dåligt
## Method 2
x <- vector("numeric", n) # length n
for(i in 1:n)
    x[i] <- i
Gör aldrig så här!
## Method 3
x <- NULL # Length zero
for(i in 1:n)
    x <- c(x, i)
Effektiv R-kod

Benchmarking

  • Metod 1: 1:n
  • Metod 2: Förallokera
  • Metod 3: Tillväxt
Tid i sekunder
n 1 2 3
$10^5$ 0.00 0.02 0.2
$10^6$ 0.00 0.2 30
$10^7$ 0.00 2 3800

Effektiv R-kod

Välkommen till R-klubben!

R-klubbens första regel: utöka aldrig en vektor.

Effektiv R-kod

Nu kör vi en övning!

Effektiv R-kod

Preparing Video For Download...