绑定R中多个列表的对应数据框元素(带gapply功能)

Binding corresponding data frame elements of multiple lists in R (with gapply for function)

我有一个函数可以输出 3 个数据帧的列表。举个例子:

tfunction<-function(x){
d1a<-data.frame(a=1*x$variable[1],b=2*x$variable[1])
d1b<-data.frame(c=letters[x$variable[1]],d=3*x$variable[1])
d1c<-data.frame(e=4*x$variable[1],f=letters[x$variable[1]])
l1<-list(d1a,d1b,d1c)
return(l1)
}

然后我想将该函数应用于我数据集中的不同组。假设在这个玩具示例中,我的数据框是:

df<-data.frame(variable=c(1,2,3),other=c(4,5,6))

我想要的输出是:

[[1]]  a   b
       1   2
       2   4
       3   6 
[[2]]  c   d
       a   3
       b   6
       c   9 
[[3]]  e   f
       4   a
       8   b
       12  c

通常,当我的函数输出单个数据帧时,我通过以下方式执行此操作:

library(nlme)    
do.call(rbind.data.frame, gapply(df, groups=df$variable, FUN=tfunction))

但是,因为我的函数输出是数据帧列表,而不是单个数据帧,所以这不起作用。我知道我可以通过以下方式合并两个数据框列表:

mapply(rbind, list1, list2)

但是,我不知道如何结合 gapply 来执行此操作。我的尝试:

mapply(rbind, gapply(z, groups=z$variable, FUN=function))

导致所有数据帧都被编译成一个列表。我怎样才能让 R 将每个相应的数据帧绑定到一个包含 3 个数据帧的最终列表中? (或者,如果有人有比 gapply 更好的方法来按组应用函数然后合并数据框,我也欢迎!)感谢您的帮助!

我成功了!我确信有一种更优雅的方法可以做到这一点,但以下似乎可以完成这项工作:

Reduce(function(x,y) Map(rbind, x, y),gapply(df, groups=df$variable, FUN=tfunction))