используйте append () и get () для формирования списка списков - PullRequest
1 голос
/ 28 октября 2019

У меня есть список имен списков и соответствующих списков, таких как:

list_names <- list("name1", "name2", "name3")
name1 <- list("apple", "banana", "orange", "peach")
name2 <- list("foo", "bar", "baz")
name3 <- list("house", "tree")

Теперь я хочу создать список списков, где каждая запись списка содержит один из списков name1 - name3.

Я попытался следующий код безуспешно, но застрял:

list_of_lists <- list()
for (i in 1:length(list_names)){
    ls <- list_names[[i]]
    append(list_of_lists, get(ls))
    }

Код работает без ошибок, но list_of_lists нас List of 0, хотя я ожидаю, что он будет выглядеть следующим образом:

> list_of_lists
$name1
$name1[[1]]
[1] "apple"
$name1[[2]]
[1] "banana"
$name1[[3]]
[1] "orange"
$name1[[4]]
[1] "peach"
$name2
$name2[[1]]
[1] "foo"
$name2[[2]]
[1] "bar"
$name2[[3]]
[1] "baz"
$name3
$name3[[1]]
[1] "house"
$name3[[2]]
[1] "tree"

Чего мне не хватает?

Ответы [ 2 ]

3 голосов
/ 28 октября 2019

append не работает так же, как list.append в Python - он возвращает новое значение, а не изменяет список на месте. Поэтому вы должны использовать list_of_lists <- append(list_of_lists, get(ls)) в вашем цикле.

Вы также можете рассматривать

list_of_lists <- lapply(list_names, get)

как однострочное (и, возможно, более R-идиоматическое) решение.

2 голосов
/ 28 октября 2019

Вместо итерации по числовому списку, итерируйте по каждому элементу:

list_of_lists <- list()
for (i in list_names){
   list_of_lists[[i]] <- get(i)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...