Делайте что-то только в первом шаге для цикла в параллель - PullRequest
0 голосов
/ 15 ноября 2018

Я хотел бы выполнить команды на первом шаге цикла for и другой список команд на всех шагах того же цикла for. Это легко сделать в непараллельном цикле:

for (i in 1:5) {
  if (i == 1) {
    print("First step")
  }
  print("Same code")
}

но я бы хотел выполнить цикл for параллельно, то есть цикл записи foreach, что означает, что i не будет равно 1 для всех узлов (процессов). Цикл non-paralell foreach:

library(foreach)
foreach(i = 1:5) %do% {
  if (i == 1) {
    print("First step")
  }
  print("Same code")
}

Как выполнить print("First") только в первом шаге для каждого узла?

1 Ответ

0 голосов
/ 15 ноября 2018

Вы можете сделать:

library(doParallel)
registerDoParallel(cl <- makeCluster(3, outfile = ""))
do_print <- TRUE
foreach(i = 1:5) %dopar% {
  if (do_print) {
    print("First step")
    do_print <- FALSE
  }
  print("Same code")
}
stopCluster(cl)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...