我有一个列表,其中嵌套了这样的列表:
>>>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)
效果很好。然而,当我的巢列表像这样大时:
使用 do.call() 后,我得到的结果是这样的:
输出格式和之前不一样了,那有什么问题吗?
顺便说一句,您可以使用以下 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 的一种选择:
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