gpt4 book ai didi

r - 嵌套lapply性能,如何优化?

转载 作者:行者123 更新时间:2023-12-01 07:14:45 25 4
gpt4 key购买 nike

我有一个列表 data.frames .在每个 data.frame 中,我想通过一个分组( z )运行一个函数,将结果重新放在一起,然后将嵌套 lapply 的所有结果放在一起一起放在 data.frame 中,然后展平结果列表 data.frame s 合一 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 s 我需要所有 w并且类需要是 data.frame

最佳答案

尝试这样的事情:

ldply(alist, ddply, "z", summarize, xy.foo = foo(x, y))

如果你想要 xy要显示在最终的 data.frame 中,请替换 summarizetransform .另外,看看你的 foo用法,您可能需要更换 (x, y)cbind(x, y) .

另外,我建议您分析您的代码。最后, foo可能是让您慢下来的原因,而不是拆分/组合部分。

关于r - 嵌套lapply性能,如何优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14625190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com