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 (将#修改为@)