我预先分配了一个大 data.frame 以便稍后填写,我通常这样做NA
是这样的:
n <- 1e6
a <- data.frame(c1 = 1:n, c2 = NA, c3 = NA)
我想知道如果我预先指定数据类型是否会让事情变得更快,所以我测试了
f1 <- function() {
a <- data.frame(c1 = 1:n, c2 = NA, c3 = NA)
a$c2 <- 1:n
a$c3 <- sample(LETTERS, size= n, replace = TRUE)
}
f2 <- function() {
b <- data.frame(c1 = 1:n, c2 = numeric(n), c3 = character(n))
b$c2 <- 1:n
b$c3 <- sample(LETTERS, size= n, replace = TRUE)
}
> system.time(f1())
user system elapsed
0.219 0.042 0.260
> system.time(f2())
user system elapsed
1.018 0.052 1.072
所以实际上慢得多!我也再次尝试使用因子列,差异并不接近 2 倍而不是 4 倍,但我很好奇为什么这会更慢,并且想知道使用数据类型而不是数据类型进行初始化是否合适NA
's.
--
编辑:Flodel 指出 1:n 是整数,而不是数字。经过修正后,运行时间几乎相同;当然,错误地指定数据类型并稍后更改它会很糟糕!