#r #foreach #rparallel #r-future
Вопрос:
Я пытаюсь параллельное программирование в R foreach
с использованием future.apply
и.
Ниже приведен пример кода.
# libraries library(doFuture) library(future.apply) library(foreach) registerDoFuture() plan(cluster, workers = 4) # function mean_rnorm lt;- function(n, mean, sd) { # numbers num lt;- rnorm(n = n, mean = mean, sd = sd) # mean mean(num) } # 1. calculate means in parallel using 'foreach' res lt;- foreach(n = seq(10, 10000, 10)) %dopar% mean_rnorm(n, mean = 2, sd = 3) # 2. calculate means in parallel using 'future.apply' res lt;- future_lapply(n = seq(10, 10000, 10), FUN = mean_rnorm, mean = 2, sd = 3)
Вопрос 1. — Поскольку количество задач велико и каждая задача генерации случайных чисел и вычисления среднего значения выполняется очень быстро. Поэтому, чтобы свести к минимуму накладные расходы на связь между мастером и работником, я хочу дать работникам несколько задач одновременно и позволить им возвращать результаты вместе.
а) foreach
работает, но как я могу разделить задачу на 4 части для foreach
?
б) Почему в future_lapply
части кода есть ошибка и как можно разделить задачу на 4 части ? (Ошибка в is.vector(X) : аргумент «X» отсутствует, по умолчанию отсутствует)
…………………………………….
Вопрос 2. — Код ниже — я варьировал оба n
и mean
. foreach
работает, но future_lapply
не работает.
# 1. calculate means in parallel using 'foreach' res lt;- foreach(n = seq(10, 10000, 10), mean = seq(10, 10000, 10)) %dopar% mean_rnorm(n, sd = 3) # 2. calculate means in parallel using 'future.apply' res lt;- future_lapply(n = seq(10, 10000, 10), mean = seq(10, 10000, 10), FUN = mean_rnorm, sd = 3)
Комментарии:
1. Для Q2 вы используете функцию с несколькими аргументами, поэтому я думаю, что вместо этого вам следует использовать
future_Map(mean_rnorm, n = ..., mean = ..., sd = 3)
.