Вместо добавления в список каждый раз, предварительно выделите его с фиксированной длиной.Затем, когда список полон, удвойте его, как описано в статье в Википедии.Это должно дать вам производительность, которую вы хотите.
foo <- vector("list", 1000)
# populate the list, with N >> 1000...
for(i in seq(N))
{
foo[[i]] <- ...
# if the list is full, extend it
if(i == length(foo))
foo <- c(foo, vector("list", length(foo)))
}