2016-03-23 19 views
-1

における並列計算の後、私はトピックのためにStackOverflowの上の様々なリンクを経てい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() 

私の目的はにあります各行の繰り返し計算を行い、私の機能は、私は、foreachループに

foreach(i = 1:nrow(purchase)) %dopar% func2(i) 
0123を書かれている。この目的のために

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

ようになります

しかし、問題は「関数func2」が戻ってデータフレームに書き込むようになっているということですが、それが戻って何かを書いていない、すべてのエントリが古い

と同じですが、あなたが助けて感謝しています。

+0

あなたは 'foreach'結果を何かに保存していますか?また、おそらくいくつかの変数をすべてのワーカーにエクスポートする必要があります。小さなダミーのデータセットでコードを実行してみてください。 –

+0

関数に適切な戻り値がありません。特に並列処理の場合、適切な関数プログラミングを行うことが非常に重要です。関数の中で必要なすべてのオブジェクトを関数の引数として渡し、関数の外で必要なすべてのオブジェクトを返します。 – Roland

答えて

0

私はこれがあなたが示しているシナリオでうまくいくと思います。私はあなたがこのかかわらずを解決するためにapply()を使用したほうが良いだろうと思います

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 

:あなたは、各msg_body文字列上で動作する関数を記述することができます。