如何在 R 中将两个嵌套列表展平为一个列表?

问题描述 投票:0回答:1

我有一个列表,其中嵌套了这样的列表:

 >>>View(mylist)
[

[{"id":1, "name": "Jack"},{"id":2, "name": "Mike"}],

[{"id":3, "name": "Mary"},{"id":4, "name": "Bob"}],

]

现在,我想删除这个列表的内层,所以它应该是:

 >>>View(mylist)
[

{"id":1, "name": "Jack"},{"id":2, "name": "Mike"},

{"id":3, "name": "Mary"},{"id":4, "name": "Bob"},

]

在Python中,很容易实现,只需使用压缩列表即可:

[subitem for item in mylist for subitem in item]

或使用itertools:

import itertools
list(itertools.chain.from_iterable(mylist))

但是,在R语言中,我感觉有点棘手。我尝试使用 do.call:

do.call(c, mylist)

效果很好。然而,当我的巢列表像这样大时:

enter image description here

enter image description here

使用 do.call() 后,我得到的结果是这样的:

enter image description here

输出格式和之前不一样了,那有什么问题吗?

顺便说一句,您可以使用以下 R 代码构建上述“mylist”:

mylist <- list(
  list(
    list(id = 1, name = "Jack"),
    list(id = 2, name = "Mike")
  ),
  list(
    list(id = 3, name = "Mary"),
    list(id = 4, name = "Bob")
  )
)

和“数据1”:

data1 <- list(
  data.frame(
    id = c(3, 4),
    name = c("John", "Anna")
  ),
  data.frame(
    id = c(5, 6),
    name = c("Tom", "Jerry")
  )
)
r list data-structures
1个回答
0
投票

这是使用基本 R 的一种选择:

data_1 <- do.call(rbind, 
        lapply(unlist(mylist, recursive = FALSE), data.frame)
        )

data_2 <- do.call(rbind, data1)

rbind(data_1, data_2)

#  id  name
#1  1  Jack
#2  2  Mike
#3  3  Mary
#4  4   Bob
#5  3  John
#6  4  Anna
#7  5   Tom
#8  6 Jerry
© www.soinside.com 2019 - 2024. All rights reserved.