如何解决foreach 循环比 for 循环慢
我有大量的时间序列要建模,每个时间序列大约需要 2 分钟。
我有很多 csv,里面有几个时间序列。
numCores <- detectCores()
numCores
registerDoParallel(numCores)
foreach (i=1:numfiles,.packages = c("tidyverse","forecast","TSA","tseries","caschrono") ) %dopar% {
df <- read_delim(myfiles[i],delim = ";")
for (key in (df[["KEY"]] %>% unique())){
df_b <- df[df["KEY"] == key,]
[...]
if (...) {
[...]
serie <- ts(train,frequency = 365)
model <- Arima(serie,order = c(0,1,3),seasonal = list(order = c(0,0),period = 365))
i <- i + 1
name <- paste(modeldir,key,sep = "-")
saveRDS(object = model,file = name)
}
else {
}
})
}
}
我放了一些 [...] 因为它是无用的代码,不需要任何时间。 我有 8 个内核,速度要慢得多,我认为有很多事情需要很短的时间是正常的,每个 for 循环大约需要 12 分钟,因为一个 csv 上有多个时间序列。
我没有找到 R 中存在的任何其他解决方案。更准确地说,通过在所有 csv 上使用简单的 for 循环启动,计算时间通常超过 20 天。
抱歉我的英语不好:)
编辑:
谢谢你们俩。 所以我像这样尝试了 map() :
map(.x = myfiles,.f = treatment)
处理函数在哪里:
treatment <- function(path){
df <- read_delim(path,file = name)
}
else {
}
})
}
}
它起作用并使我在我的目录中建立模型,但它不是并行的,而是一个接一个...我使用了 registerDoParallel(numCores)
,我该怎么做?
对于 lapply/parLapply 我没能成功。
谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。