Я предварительно выделил большой файл 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
Так было на самом деле намного медленнее! Я попробовал еще раз с колонкой факторов, и разница была не ближе к 2x, чем к 4x, но мне интересно, почему это происходит медленнее, и задайтесь вопросом, действительно ли целесообразно инициализировать типы данных, а не NA
с.
-
Edit: Flodel указал, что 1: n является целым, а не числовым. С этой коррекцией время работы почти одинаково; конечно, больно неправильно указывать тип данных и впоследствии менять его!