基本原则:内存分配

高效 R 代码写作

Colin Gillespie

Jumping Rivers & Newcastle University

高效 R 代码写作

如果我们用 C 编程……

我们负责内存分配
// C 代码:为一个数申请内存
x = (double *) malloc(sizeof(double));

// 释放内存
free(x);
  • 在 R 中,内存分配是自动的
  • R 在内存中为变量分配空间
  • 尽量减少变量赋值以提速
高效 R 代码写作

示例:整数序列

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

最直接也最好
## 方法 1
x <- 1:n
也还不错
## 方法 2
x <- vector("numeric", n) # 长度 n
for(i in 1:n)
    x[i] <- i
绝对别这样!
## 方法 3
x <- NULL # 长度为 0
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...