Меня смущает предварительное распределение в R. Все мы знаем, что предварительное распределение будет намного быстрее, и это может решить проблемы излишней памяти. Однако, если мы хотим получить список с неизвестной длиной, должны ли мы назначить гораздо более длинную длину? Или мы могли бы назначить «подходящую» длину, и если конечная длина списка превышает назначенную длину, мы можем затем добавить расширенные элементы в список. Например, мы предполагаем, что длина окончательного списка составляет 20000.
Первый метод будет:
# the length of A should be unknown, I just set it as 20000 here for convenience
A <- rep(1:10, each=2000)
x <- vector(mode = "list", length = 50000)
for (i in 1:length(x)) {x[i] <- A[i]}
x <- x[!is.na(x)]
#or
x <- na.omit(x)
Второй метод будет:
A <- rep(1:10, each=2000)
x <- vector(mode = "list", length = 10000)
for (i in 1:length(A)) {
if (i<=length(x)) {
x[i] <- A[i]
}
else {
x <- c(x, A[i])
}
}
Какой из них будет лучше? Или, пожалуйста, дайте мне знать, если у вас есть лучшие идеи? Спасибо.