我有一個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"))
但有修改我的做法就像在第二lapply
等廢棄,另外添購w
儘量減少內存使用和速度的東西了呢?在這種情況下foo
喜歡矩陣,所以data.table
不會是我的答案。在其他foo
的I將所有需要w
和類將需要一個data.frame
請讓您的代碼具有可重複性。你需要顯示'foo'。 – Roland
一種策略可能是將所有'data.frame's合併爲一個'data.table',然後將其拆分應用合併。 – Roland
我使用了許多'foo'作爲參數,你可以使它成爲'cor'。我關注的是'foo'的代碼,但也許我錯過了這一點。 – user1320502