Ответ 1
Вы не должны добавлять в свой список, используя c
внутри цикла, потому что это может привести к очень медленному коду. В основном, когда вы делаете c(l, new_element)
, все содержимое списка копируется. Вместо этого вам нужно получить доступ к элементам списка по индексу. Если вы знаете, как долго ваш список будет, лучше всего его инициализировать до этого размера, используя l <- vector("list", N)
. Если вы этого не сделаете, вы можете инициализировать его, чтобы иметь длину, равную некоторому большому числу (например, если у вас есть верхняя граница числа итераций), а затем просто выберите элементы, отличные от NULL, после завершения цикла. Во всяком случае, основной момент состоит в том, что у вас должен быть индекс для отслеживания элемента списка и добавления с использованием, например,
i <- 1
while(...) {
l[[i]] <- new_element
i <- i + 1
}
Для получения дополнительной информации см. Patrick Burns The R Inferno (глава 2).