Существует ли функция R для преобразования списка списков списков в список списков векторов? - PullRequest
0 голосов
/ 31 марта 2020

У меня есть список списков списков, и я хочу преобразовать его в список списков, где элементы будут векторами.

В деталях, l: list of 180 elements, l[[1]]: list of 12 elements и l[[1]][[1]]: list of 20 elements, у каждого есть имя с одним значением. Как получить один список из 12 элементов, где каждый элемент является списком из 20 векторов, каждый вектор содержит 180 элементов.

Вместо вызова mapply(c,l[[1]][[1]]$id, l[[2]][[1]]$id, .... l[[180]][[1]]$id, SIMPLIFY=FALSE) и повторения этого для каждого ключа, Есть ли способ сделать это внутри al oop?

Пример:

> a<-list(1,'a',1.2)
> b<-list(2,'b',0.1)
> d<-list(3,'d',3)
> e<-list(4,'e',0.1)
> x<-list(a,b)
> y<-list(d,e)
> z<-list(x,y)

Желаемый результат:

#> [[1]]
#> [[1]][[1]]
#> [1] 1 3
#> 
#> [[1]][[2]]
#> [1] 'a' 'd'
#>
#> [[1]][[3]]
#> [1] 1.2 3
#>
#> [[2]][[1]]
#> [1] 2 4
#>
#> [[2]][[2]]
#> [1] 'b' 'e'
#>
#> [[2]][[3]]
#> [1] 0.1 0.1

Есть идеи?

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Может быть, вы можете попробовать вложенный Map, как показано ниже

z <- Map(function(...) Map(c,...), x,y)

такой, что

> z
[[1]]
[[1]][[1]]
[1] 1 3

[[1]][[2]]
[1] "a" "d"

[[1]][[3]]
[1] 1.2 3.0


[[2]]
[[2]][[1]]
[1] 2 4

[[2]][[2]]
[1] "b" "e"

[[2]][[3]]
[1] 0.1 0.1
0 голосов
/ 31 марта 2020

Вы можете просто вложить lapply.

Пример данных:

a <- list(1, 2, 3)
b <- list(a, a)
x <- list(b, b)
x
#> [[1]]
#> [[1]][[1]]
#> [[1]][[1]][[1]]
#> [1] 1
#> 
#> [[1]][[1]][[2]]
#> [1] 2
#> 
#> [[1]][[1]][[3]]
#> [1] 3
#> 
#> 
#> [[1]][[2]]
#> [[1]][[2]][[1]]
#> [1] 1
#> 
#> [[1]][[2]][[2]]
#> [1] 2
#> 
#> [[1]][[2]][[3]]
#> [1] 3
#> 
#> 
#> 
#> [[2]]
#> [[2]][[1]]
#> [[2]][[1]][[1]]
#> [1] 1
#> 
#> [[2]][[1]][[2]]
#> [1] 2
#> 
#> [[2]][[1]][[3]]
#> [1] 3
#> 
#> 
#> [[2]][[2]]
#> [[2]][[2]][[1]]
#> [1] 1
#> 
#> [[2]][[2]][[2]]
#> [1] 2
#> 
#> [[2]][[2]][[3]]
#> [1] 3

Теперь просто вызовите unlist через вложенные lapply функции:

lapply(x, function(x) lapply(x, unlist))
#> [[1]]
#> [[1]][[1]]
#> [1] 1 2 3
#> 
#> [[1]][[2]]
#> [1] 1 2 3
#> 
#> 
#> [[2]]
#> [[2]][[1]]
#> [1] 1 2 3
#> 
#> [[2]][[2]]
#> [1] 1 2 3

Создано в 2020-03-31 пакетом Представить (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...