Подтвердить что ты не робот

Как составить список целых векторов в R

Основной вопрос: в R, как я могу создать список, а затем заполнить его векторными элементами?

l <- list() 
l[1] <- c(1,2,3) 

Это дает ошибку "количество заменяемых элементов не кратно длины замены", поэтому R пытается распаковать вектор. Единственный способ, которым я нашел работу, - добавить векторы при создании списка.

l <- list(c(1,2,3), c(4,5,6))
4b9b3361

Ответ 1

В соответствии с ?"[" (в разделе "Рекурсивные (список-подобные) объекты" ):

 Indexing by ‘[’ is similar to atomic vectors and selects a list of
 the specified element(s).

 Both ‘[[’ and ‘$’ select a single element of the list.  The main
 difference is that ‘$’ does not allow computed indices, whereas
 ‘[[’ does.  ‘x$name’ is equivalent to ‘x[["name", exact =
 FALSE]]’.  Also, the partial matching behavior of ‘[[’ can be
 controlled using the ‘exact’ argument.

В принципе, для списков [ выбирает более одного элемента, поэтому замена должна быть списком (а не вектором, как в вашем примере). Вот пример использования [ в списках:

l <- list(c(1,2,3), c(4,5,6))
l[1] <- list(1:2)
l[1:2] <- list(1:3,4:5)

Если вы хотите заменить только один элемент, используйте [[ вместо этого.

l[[1]] <- 1:3

Ответ 2

Используйте [[1]], как в

l[[1]] <- c(1,2,3)
l[[2]] <- 1:4

и так далее. Также помните, что preallocation намного эффективнее, поэтому, если вы знаете, как долго ваш список будет, используйте что-то вроде

l <- vector(mode="list", length=N)