Если я создаю простую модель, Еогеасп возвращает каждый результат так, как я думаю, что он должен:отсутствует выход из Еогеаспа
m=function(i,j){data.frame(i=i,j=j)}
> foreach(i=1:2, .combine='rbind') %:% foreach(j=1:2, .combine='rbind') %dopar%{
+ m(i,j)
+ }
i j
1 1 1
2 1 2
3 2 1
4 2 2
, но с использованием более сложной функции пропускает первый цикл:
# Loop through the prediction model (in parallel) with different parameters
results = foreach(i=1:2, .combine='rbind') %:% foreach(j=1:2, .combine='rbind') %dopar%{
model(i,j)
}
> results
i j tpr fpr rj day
1 1 2 0 0.2127812 1.022387 Wed Oct 29 11:53:45 2014
2 2 1 0 0.2161888 1.023102 Wed Oct 29 11:54:41 2014
3 2 2 0 0.2127812 1.022387 Wed Oct 29 11:53:45 2014
Вы можете предположить, что функция генерирует ошибку, когда i = 1, j = 1, но выполнение функции вне цикла foreach дает хороший результат:
> model(1,1)
i j tpr fpr rj day
1 1 1 0 0.2161888 1.023102 Wed Oct 29 12:30:31 2014
Так что я предполагаю, что я неправильно установил итераторы foreach. Надеюсь, проблема более очевидна для вас, чем для меня.
Редактировать: Он также работает, если% dopar% заменено на% do%. Конечно, это решение поражает цель использования foreach.
Минимальный воспроизводимый пример был бы хорош, чтобы помочь вам отлаживать. Без него и не зная, как определяется «model (i, j)», трудно сказать, в чем проблема. –
Мне не удалось воспроизвести проблему с общими данными. И, фактически, повторное подключение к серверу, похоже, устранило проблему. (Хотя это может снова появиться в будущем.) Я подозреваю, что произошла ошибка из-за памяти, хотя это не было очевидно из подробного вывода. –
Я не могу воспроизвести ваш пример без модели, но, возможно, вы хотите написать 'results = foreach (i = 1: 2, .combine = 'rbind')%:% foreach (j = 1: 2 ')' ie, т.е. без второго комбинировать аргумент? – Jens