我有一个清单data.frames
。在我想通过分组 ( z
) 拆分的每个 data.frame 中运行一个函数,将结果重新组合在一起,然后将嵌套的所有结果lapply
放在一个 data.frame 中,然后将结果列表扁平data.frame
化为一个data.frame
.
library(plyr)
df <- data.frame(x = sample(1:200, 30000, replace = TRUE),
y = sample(1:200, 30000, replace = TRUE),
z = sample(LETTERS, 30000, replace = TRUE))
alist <- list(df,df,df) # longer in real life
answer <- lapply(alist, function(q) {
a <- split(q,q$z)
result.1 <- lapply(a, function(w) {
neww <- cbind(w[,1],w[,2])
result.2 <- colSums(neww)
})
ldply(result.1)
})
# cor(neww) can actually be a variey of foos I just use cor() for easy reproducibility
ldply(answer)
这有一些非常困难的内存使用,而且速度也很慢。感谢@Andrie,我知道如何在开始之前清理我的工作区:
rm(list=setdiff(ls(), "alist"))
但是有没有办法修改我的方法,比如w
在第二个lapply
等中进行垃圾处理,以尝试减少内存使用并加快速度?在这种情况下foo
喜欢矩阵,所以data.table
不会是我的答案。在其他方面foo
,我将需要所有w
,而班级将需要成为data.frame