dplyr和可重用的参数列表

use*_*795 4 r dplyr

我玩dplyr了一点,非常喜欢它.我错过了一些东西.在plyr,我能够将函数传递给ddply并重用它.

library('dplyr')
library('plyr')

fn = function(df) {
    summarise(df,
        count = length(id))
}

ddply(DF1,'group', fn)
ddply(DF2,'group', fn)
Run Code Online (Sandbox Code Playgroud)

因此,我可以将一长串记录应用于多个数据集,而无需复制所有参数summarise.在dplyr,但是,我必须这样做

dplyr::summarise(group_by(DF1,group),
    count = length(id))
dplyr::summarise(group_by(DF2,group),
    count = length(id))
Run Code Online (Sandbox Code Playgroud)

所以summarise每次都必须重复这些论点.我定义参数列表时会评估带有list('.data'=DF1,'count'=length(id))do.call不起作用length(id)的参数列表.这有什么解决方案吗?

dic*_*koa 8

我喜欢@RomanLustrik的答案,所以这是dplyr他100%的答案.

do(mylist, function(df)
   df %.%
   group_by(b) %.%
   summarise(count = n()))

## [[1]]
## Source: local data frame [2 x 2]

##   b count
## 1 b     5
## 2 a     5

## [[2]]
## Source: local data frame [2 x 2]

##   b count
## 1 b     5
## 2 a     5
Run Code Online (Sandbox Code Playgroud)

在这个答案中,我只是试图复制Roman的方法,但你可以重用你的函数(fn):

fn <- function(df) {
    summarise(df,
        count = n())
}

group_by(df1, b) %.% fn()
## Source: local data frame [2 x 2]

##   b count
## 1 b     5
## 2 a     5

group_by(df2, b) %.% fn()
## Source: local data frame [2 x 2]

##   b count
## 1 b     5
## 2 a     5
Run Code Online (Sandbox Code Playgroud)

你甚至可以像这样包装它

do(list(df1, df2), function(df) group_by(df, b) %.% fn())
Run Code Online (Sandbox Code Playgroud)