2016-11-15 15 views
0

私は非常に大きなデータセットを持っており、いくつかの統計分析を行いたいと考えています。計算に必要な回線コードは1つだけですが、数日かかることがあります。プロセスを加速する方法はありますか?Rの1行コードの計算速度を上げる方法は?

最初は並列化が良い解決策かもしれないと思っていますが、1回の呼び出しで並列化ができないと言われました。ここに例があります。

set.seed(1234) 
mydata=rnorm(5000*150) 
mydata=matrix(mydata,ncol=150) 

library(parallel) 
cl.cores <- detectCores() 
cl <- makeCluster(cl.cores) 
clusterSetRNGStream(cl,iseed=1234) 
clusterExport(cl,"mydata") 
clusterEvalQ(cl,library(NbClust)) 
nc = clusterApply(cl,2,function(min.nc) fun=NbClust(mydata,min.nc=min.nc,max.nc = 8,method = "kmeans")) 
stopCluster(cl) 

この例では、デスクトップのCPU占有率が通常の値の約30%のままであるため、速度は増加しません。

+0

ありがとうございました。 –

+0

はい、より適しています。 – wrtsvkrfm

+0

並列化を最適化することができます。おそらく、ロードバランシングが少し助けになるかもしれません。おそらく、行列の塊を一度にノードに送るべきです。それ以外の場合は、コンパイル済みコードの使用を検討することができます(例:Rcppで実装)。しかし、まず、あなたがしていることが分かりやすいかどうかを検討するべきです。計算に何らかの時間がかかる場合は、アルゴリズムの再考に時間がかかるはずです。 – Roland

答えて

1

ソースコードをNbClustにして、この機能を最適化する必要があります。

たとえば、このメソッドから冗長な計算を移動してみることができます(1回だけ行う必要があります)。

関数がまだRコードの場合は、C++(つまりRcpp)で書き換えます。これは、純粋なRコードが非常に遅いので、機能を大幅に高速化します。

関連する問題