2016-03-23 75 views
-1

並行計算我新的R. 我已經通過各個環節上了計算器爲主題,以並行計算後,寫了一個初始代碼寫入數據傳回數據幀中的R

library(doParallel) 
library(foreach) 

detectCores() 
## [1] 4 
# Create cluster with desired number of cores 
cl <- makeCluster(3) 
# Register cluster 
registerDoParallel(cl) 
# Find out how many cores are being used 
getDoParWorkers() 

我的目標是做每一行重複計算,我的功能看起來像

func2<-function(i) 
{ 
    msgbody<-tolower(as.character(purchase$msg_body[i])) 
    purchase$category[i]<-category_fun(i,msgbody) 
} 

爲此我寫了一個foreach循環

foreach(i = 1:nrow(purchase)) %dopar% func2(i) 

但是,問題是,「FUNC2」應該寫回到數據幀,但它沒有寫任何東西,所有的項目都是一樣的老

欣賞你的幫助。

+0

你是否將'foreach'結果保存到任何東西?另外,您可能需要將一些變量導出到所有工作人員。嘗試先在一個小的虛擬數據集中運行你的代碼。 –

+0

您的函數缺少正確的返回值。尤其是對於並行處理,您應該進行適當的功能編程,這一點非常重要將函數內部需要的每個對象作爲函數參數傳遞,並返回函數外部需要的每個對象。 – Roland

回答

0

我相信這會在您指示的場景中效果更好。你可以寫在每個msg_body字符串工作的功能:

func2 <- function(msg_body) 
    { 
     return(category_fun(i,tolower(as.character(purchase$msg_body[i]))) 
    } 

    result <- foreach(i=1:nrow(purchase),.combine=c) %dopar% {func2(purchase$msg_body[i]} 

    purchase$category <- result 

我不認爲你會使用apply()解決這雖然會更好。