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

时间:2015-02-18 09:56:38

标签: r

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

  • 父项列表“父项”由可变数量的项目组成
  • 父列表的每个节点都是三个命名元素的列表(让我们说'foo', 'bar','puppy')
  • 内部列表的这些(命名)元素是由可变数量的列组成的数据框

(实际上我很难建立一个可重复的这种结构的例子)

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

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

1 个答案:

答案 0 :(得分:3)

如果我理解正确,你就有这样的结构:

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))
      )
    )

您希望运行函数f,它适用于数据框中的每个标量,超过parent,是否正确?

如果是这样,以下函数nested_lapply应该这样做:

nested_lapply <- function(data, fun) {
    lapply(data, function(sublist) { lapply(sublist, fun) })
}

可以这样应用:

nested_lapply(parent, sqrt)