如何汇集列表列表中的所有元素?在 R 中

Posted

技术标签:

【中文标题】如何汇集列表列表中的所有元素?在 R 中【英文标题】:how to pool all the elements from a list of lists? in R 【发布时间】:2013-03-26 20:59:47 【问题描述】:

我有一个列表列表(我认为),所以在列表的每个元素中:res[[i]],我还有另一个列表,类似于:

[[1]]

[[1]]$a

[[1]]$a$`1`
"aa" "bb" "cc"

[[1]]$a$`2`
"aa" "bb" "cc" "dd"

[[2]]

[[2]]$a

[[2]]$a$`1`
"aa" "bb" "cc"

[[2]]$a$`2`
"aa" "bb" "cc" "dd"

...

我想将所有对象合并到一个新列表中,其中只有以下内容:

"aa" "bb" "cc"

"aa" "bb" "cc" "dd"

"aa" "bb" "cc" "cc"

...

有什么想法???

【问题讨论】:

你能做一个可重现的小例子吗? ***.com/questions/5963269/… 【参考方案1】:

看起来您想要一个“平面”列表。为此,您可以使用unlistrecursive = FALSE,但根据列表的深度,这可能会很乏味。这是一个例子:

您的数据:

myList <- list(list(a = list("1" = letters[1:3], "2" = letters[1:4])),
               list(a = list("1" = letters[1:3], "2" = letters[1:4])))
myList
# [[1]]
# [[1]]$a
# [[1]]$a$`1`
# [1] "a" "b" "c"
# 
# [[1]]$a$`2`
# [1] "a" "b" "c" "d"
# 
# 
# 
# [[2]]
# [[2]]$a
# [[2]]$a$`1`
# [1] "a" "b" "c"
# 
# [[2]]$a$`2`
# [1] "a" "b" "c" "d"

使用嵌套的unlists:

unlist(unlist(myList, recursive=FALSE), recursive=FALSE)
# $a.1
# [1] "a" "b" "c"
# 
# $a.2
# [1] "a" "b" "c" "d"
# 
# $a.1
# [1] "a" "b" "c"
# 
# $a.2
# [1] "a" "b" "c" "d"

还有一个名为 LinearizeNestedList (https://sites.google.com/site/akhilsbehl/geekspace/articles/r/linearize_nested_lists_in_r) 的漂亮函数可以在 R 中下载/获取并按如下方式使用(适用于任何嵌套深度的列表):

LinearizeNestedList(myList, NameSep=".")
# $`1.a.1`
# [1] "a" "b" "c"
# 
# $`1.a.2`
# [1] "a" "b" "c" "d"
# 
# $`2.a.1`
# [1] "a" "b" "c"
# 
# $`2.a.2`
# [1] "a" "b" "c" "d"

编辑

这个问题似乎与How to flatten a list to a list without coercion?重复

查看该问题和一组答案以获取其他有用的解决方案。

【讨论】:

以上是关于如何汇集列表列表中的所有元素?在 R 中的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中使用混合类型将嵌套列表中的字符数字转换为数字

如何获取 R Shiny 中所有输出元素的列表

如何将元素添加到R中的列表(循环)[重复]

如何对R中的列表中的元素进行排序?

如何删除此列表中的重复元素?

如何从R中的字符串列表中删除一个元素