如果我創建一個簡單的模型,的foreach返回每個結果,我認爲它應該的方式:從的foreach輸出缺
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)'是如何定義的,那很難說出什麼問題。 – 2014-10-29 17:15:42
我無法重現通用數據的問題。事實上,重新連接到服務器似乎解決了這個問題。 (雖然它可能會在未來重新出現)。我懷疑有一個內存不足的錯誤,雖然從詳細輸出中不明顯。 – 2014-10-29 20:23:09
我無法重現你的沒有模型的例子,但也許你想寫'results = foreach(i = 1:2,.combine ='rbind')%:%foreach(j = 1:2')'即沒有第二個結合論點? – Jens 2015-02-17 16:07:40