Предварительно выделить память для неизвестного размера списка в R - PullRequest
0 голосов
/ 16 апреля 2020

Меня смущает предварительное распределение в 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])
  }
}

Какой из них будет лучше? Или, пожалуйста, дайте мне знать, если у вас есть лучшие идеи? Спасибо.

...