Общий принцип: выделение памяти

Эффективный код на R

Colin Gillespie

Jumping Rivers & Newcastle University

Эффективный код на R

Если бы мы писали на C...

Управление памятью — наша задача
// C code: request memory for a number
x = (double *) malloc(sizeof(double));

// Free the memory
free(x);
  • В R выделение памяти происходит автоматически
  • R выделяет память в RAM для хранения переменных
  • Меньше присваиваний — выше скорость
Эффективный код на R

Пример: последовательность целых чисел

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

Лучший и очевидный способ
## Method 1
x <- 1:n
Приемлемый вариант
## Method 2
x <- vector("numeric", n) # length n
for(i in 1:n)
    x[i] <- i
Никогда так не делайте!
## Method 3
x <- NULL # Length zero
for(i in 1:n)
    x <- c(x, i)
Эффективный код на R

Бенчмаркинг

  • Метод 1: 1:n
  • Метод 2: Предварительное выделение
  • Метод 3: Наращивание
Время в секундах
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

Эффективный код на R

Добро пожаловать в R-клуб!

Первое правило R-клуба: никогда не наращивайте вектор.

Эффективный код на R

Давайте потренируемся!

Эффективный код на R

Preparing Video For Download...