Unlist вложенный список по имени - PullRequest
1 голос
/ 05 марта 2020

Я импортирую вложенный список неизвестной длины (здесь 2) и неизвестных имен (здесь iter1 и iter2) и получаю названия списка:

iter1 <- list(1, 2, 3, 4)
iter2 <- list(1, 2, 3, 4)

nested_list <- list(iter1 = iter1, iter2 = iter2)

names <- names(nested_list)

Следующее, что я хочу сделать, это на самом деле это:

unlist <- data.frame(x=unlist(nested_list$iter1))

Но из-за того, что я заранее не знаю имен, я хочу сделать что-то вроде этого:

unlist <- data.frame(x=unlist(nested_list$names[1]))

Что, конечно, не работает. Нет ошибки, но созданный список пуст.

В конце я хочу сделать что-то вроде этого:

for(i in 1:length(nested_list)) {
   unlist <- data.frame(x=unlist(nested_list$names[i]))
   print(unlist)
}

Ответы [ 3 ]

1 голос
/ 05 марта 2020

Я не уверен, что получил то, что вы намеревались в результате, не могли бы вы уточнить это при необходимости?

iter1 <- list(1, 2, 3, 4)
iter2 <- list(1, 2, 3, 4)

nested_list <- list(iter1 = iter1, iter2 = iter2)
names <- names(nested_list)

cbind.data.frame(lapply(nested_list, unlist))
#>   iter1 iter2
#> 1     1     1
#> 2     2     2
#> 3     3     3
#> 4     4     4
1 голос
/ 05 марта 2020

Используя Map, избегая вектора names.

data.frame(Map(unlist, nested_list)[1])
#   iter1
# 1     1
# 2     2
# 3     3
# 4     4

Или, чтобы дать имена столбцов с mapply:

data.frame(x=mapply(unlist, nested_list)[,1])
#   x
# 1 1
# 2 2
# 3 3
# 4 4

1 в скобках указано имя первого списка, используйте 2 для второго имени соответственно.


Данные

nested_list <- list(iter1 = list(1, 2, 3, 4), iter2 = list(1, 2, 3, 4))
1 голос
/ 05 марта 2020

Может быть, вы можете попробовать код ниже

unlist <- data.frame(x=unlist(nested_list[names[1]]))

такой, что

       x
iter11 1
iter12 2
iter13 3
iter14 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...