原則:記憶體配置

撰寫高效 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...