【发布时间】:2020-04-08 17:45:06
【问题描述】:
我在以下简单代码上应用并行以在多个循环中使用 Openxlsx 保存输出的努力失败了。
任何人都可以帮助将此代码转换为并行模式。此代码基于实际大小的数据(超过 5000 万次观察,需要 13 小时才能运行)。减少 2 小时对我来说是一项艰巨的工作。
library(dplyr)
library(readxl)
library(openxlsx)
library(foreach)
library(doParallel)
rawdata <- readxl::read_xlsx("~/Desktop/Book1.xlsx")
TYPE1 <- rawdata %>% filter(TYPE == "A")
TYPE2 <- rawdata %>% filter(TYPE == "B")
Split.TYPE1 <- split(TYPE1, TYPE1$Name)
Split.TYPE2 <- split(TYPE2, TYPE2$Name)
#--------------------------------- Save the TYPE A reports------------------------------------------------------------------------------
###################################(the foreach lines are coded)
for (nm in names(Split.TYPE1)){
#foreach(nm=1:names(Split.TYPE1), .combine=cbind) %dopar% {
file<-paste0(nm,".xlsx")
d1<-as.data.frame(Split.TYPE1[[nm]])
wb<-createWorkbook(file)
addWorksheet(wb, "test", gridLines = T)
writeData(wb, sheet = "test", x = d1)
saveWorkbook(wb, file, overwrite = TRUE)
}
# #------------------------------ Save the TYPE B in a folder ----------------------------------
for (dn in names(Split.TYPE2)){
dnn <- paste0(dn)
dir.create(dnn)
sub_Split.TYPE2 <- split(Split.TYPE2[[dn]], Split.TYPE2[[dn]]$Surname)
for (fn in names(sub_Split.TYPE2)){
file<-file.path(dnn, paste0(fn,".xlsx"))
d1<-as.data.frame(sub_Split.TYPE2[[fn]])
wb<-createWorkbook(file)
addWorksheet(wb, "test", gridLines = T)
writeData(wb, sheet = "test", x = d1)
saveWorkbook(wb, file, overwrite = TRUE)
}}
数据:
Name Surname TYPE
John Greer A
David bear A
Rose beer B
Tara tea B
Sam Mac B
Alan Glass B
Brad Newman A
Kristen Goodman A
Jessica Goodwin A
Heather Poker B
【问题讨论】:
-
标准
for循环不会在R中并行运行。试试foreach包中的foreach函数。 -
不确定如何为我的代码中的第二个嵌套循环应用 Foreach。嵌套的 Foreach 代码通常紧跟在每个代码之后。我在嵌套循环的第一层有一些事情要做。
标签: r parallel.foreach doparallel snow