取消列出 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 元素而不是unlisting,因为预期的输出也是listdata.frames

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 中列表的最后一级的主要内容,如果未能解决你的问题,请参考以下文章