【问题标题】:How do I set loop such that a core in my PC do half while the other the other half in R如何设置循环,以便我的 PC 中的一个核心执行一半,而另一半在 R
【发布时间】:2020-09-03 21:43:13
【问题描述】:

我有模拟ARIMA 数据的R 脚本,并为ARIMA order ARIMA(p, d, q) 检查相同的数据100 次。我的系统 CPU 上有 2 个内核,我如何给一个内核发出 R 命令来计算 1 to 50 而第二个内核同时计算 51 to 100,然后组合结果。

library(forecast)
system.time({
  for (i in 1:100) {
    a <- arima.sim(n = 50, model=list(ar = 0.8), sd = 1)
    b <- arimaorder(auto.arima(b, ic = "aicc"))
    #print(b)
  }

我使用的是 Windows 10 64 位

【问题讨论】:

标签: r windows parallel-processing arima


【解决方案1】:

我使用 foreachdoParallel 库将 for 循环分成许多部分。

我相信处理更好地让计算机决定如何在可用内核之间划分循环。

#…
library(parallel)
library(foreach)
library(doParallel)

#detectCores()                   ### Count number of cores available
numCores  <- 2
registerDoParallel(numCores)

#for (i in 1:100) {          ### Original For loop
foreach(i = 1:100) %dopar% { ### Replacement parallel foreach loop
    #…
}
#…

【讨论】:

  • auto.arima() 函数不适用于此foreach,即使我加载了预测包
  • 我在你的回答中使用 foreach(i = 1:100, .packages = c("forecast")) %dopar% { 而不是 foreach(i = 1:100) %dopar% { 并且它有效
猜你喜欢
  • 2023-02-16
  • 2016-09-26
  • 2022-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多