2016-01-31 134 views
0

我只是無法在並行foreach中使用ovun.sample。在R doParallel foreach循環中運行ovun.sample

下面是最小的工作示例。

library(doParallel) 
library(ROSE) # ovun.sample 

if(!getDoParRegistered()){ 
    registerDoParallel(cores=detectCores()) 
} 

foreach(i=1:2,.combine=rbind, .packages=c("ROSE")) %dopar% { 
    my_data = iris[iris$Species != "setosa",] 
    under_data <- ovun.sample(Species ~ ., data=my_data, N=40, seed = 1)$data 
} 
print(r) 

我得到錯誤:

Error in { : task 1 failed - "object 'my_data' not found" 

任何想法,我錯過了什麼。或者也許是另一種類似於與doParallel一起使用的ROSE的過度/不足採樣包?在Windows上運行。

回答

0

foreach循環對於尋找my_data的地方有不同的環境背景。嘗試用data=get("my_data", sys.frame(1))代替data=my_data

另一種方法是foreach之前設置數據變量並使用.export=my_data選項在foreach呼叫,以確保數據被執行前推到每個芯。

+0

感謝您的建議,但'data = get(「my_data」,sys.frame(1))'也不起作用。我也試過.export = c(「my_data」),也不起作用。 但是這是有效的: 結果< - foreach(i = 1:2,.combine = rbind,.packages = c(「SDR」,「ROSE」))%dopar%my_data = iris [iris $種類!= 「setosa」,] 總和(虹膜$物種== 「弗吉尼亞」) } 打印(結果)' 我只是不知道爲什麼不與功能ovun.sample工作。 –

+0

對於'.export = my_data'工作,'my_data'必須在主代碼的foreach循環之前定義。這真的應該工作。 它必須是關於執行環境。 ''ovun.sample'將'data'選項描述爲'如果未指定,則變量取自「環境(公式)。」。這表明它可能是公式中的'.'和'my_data'之間的衝突。如果完全刪除'data = my_data'選項會發生什麼情況? –