取消列出 R 中列表的最后一级
Posted
技术标签:
【中文标题】取消列出 R 中列表的最后一级【英文标题】:Unlist LAST level of a list in R 【发布时间】:2022-01-09 07:35:23 【问题描述】:我有一个类似 ll 的列表:
ll <- list(a = list(data.frame(c = 1, d = 2), data.frame(h = 3, j = 4)), b = list(data.frame(c = 5, d = 6), data.frame(h = 7, j = 9)))
我想取消嵌套/取消列出结构的最后一层(内部列表)。 请注意,每个列表都包含相同的结构。我要获取lj:
lj <- list(a = (data.frame(c = 1, d = 2, h = 3, j = 4)), b = data.frame(c = 5, d = 6, h = 7, j = 9))
我尝试了以下代码但没有成功:
lj_not_success <- unlist(ll, recursive = F)
但是,此代码未列出 FIRST 级别,而不是 LAST 级别。
有什么线索吗?
【问题讨论】:
【参考方案1】:我们可能需要cbind
内部的list
元素而不是unlist
ing,因为预期的输出也是list
的data.frame
s
ll_new <- lapply(ll, function(x) do.call(cbind, x))
-检查
> identical(lj, ll_new)
[1] TRUE
【讨论】:
有没有办法将您的代码与“bind_rows”一起使用,以将每个列表的名称/值作为变量包含在内?代码将以这种方式工作bind_rows(df, .id = 'grp')
@vog 你的意思是bind_cols
在当前上下文中,即purrr::map(ll, bind_cols)
,或者如果它是bind_rows,purrr::map(ll, ~ bind_rows(.x, .id = 'grp'))
谢谢@Akrun!以上是关于取消列出 R 中列表的最后一级的主要内容,如果未能解决你的问题,请参考以下文章