在 R 中的数据帧列表列表上应用函数

Gab*_*e B 1 r

我有一个嵌套结构,例如:

  • 由可变数量的项目组成的父列表“parent”
  • 父列表的每个节点都是三个命名元素的列表(假设“foo”、“bar”、“puppy”)
  • 内部列表的这些(命名)元素是由可变数量的列组成的数据框

(实际上,我什至很难构建这种结构的可重复示例)

我正在寻找一种有效的方法,将函数(比如说 toLower)应用于内部数据帧的每个单元格,ofc 应用于父列表的每个元素。

我想我可以嵌套一些 lapply,但我不知道如何引用内部元素以及使用哪个 FUN 作为 lapply 参数本身

Joh*_*ell 5

如果我理解正确的话,你的结构是这样的:

parent <- list(
    a=list(foo=data.frame(first=c(1,2,3), second=c(4,5,6)),
       bar=data.frame(first=c(1,2,3), second=c(4,5,6)),
       puppy=data.frame(first=c(1,2,3), second=c(4,5,6))
      ),
    b=list(foo=data.frame(first=c(1,2,3), second=c(4,5,6)),
       bar=data.frame(first=c(1,2,3), second=c(4,5,6)),
       puppy=data.frame(first=c(1,2,3), second=c(4,5,6))
      )
    )
Run Code Online (Sandbox Code Playgroud)

并且您想要运行 function f,该函数适用于数据帧中的每个标量, over parent,这是正确的吗?

如果是这样,以下函数nested_lapply应该执行此操作:

nested_lapply <- function(data, fun) {
    lapply(data, function(sublist) { lapply(sublist, fun) })
}
Run Code Online (Sandbox Code Playgroud)

它可以像这样应用:

nested_lapply(parent, sqrt)
Run Code Online (Sandbox Code Playgroud)