0

我对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])
  }
}

哪一个会更好?或者如果您有更好的想法,请告诉我?谢谢。

4

0 回答 0