Как составить список целочисленных векторов в R - PullRequest
31 голосов
/ 28 апреля 2011

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

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

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

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

Ответы [ 2 ]

34 голосов
/ 28 апреля 2011

Согласно ?"[" (в разделе «рекурсивные (подобные списку) объекты»):

 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
25 голосов
/ 28 апреля 2011

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

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

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

l <- vector(mode="list", length=N)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...