微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

foreach 循环比 for 循环慢

如何解决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 举报,一经查实,本站将立刻删除。