2017-05-23 54 views
0

私は250万行(および7または8関連する列)の大きなデータフレームを持っており、NBClust Rパッケージを使用して、データのクラスタ数を把握しようとしています持っている。私はこのために190万行しか使用していません。その多くの行はまだNBClustと私のPCのためにあまりにも多いので、私はdplyr::sample_fracとデータフレームのランダムなサブセクションを取ると思っていた。データの0.1%が1900行で、私はその8回(私のCPUコアごとに2つ)のNBClustをやると思っていました。私の問題は、foreach内のように思われる結果に基づいて、ランダムにサンプリングされた1900行が毎回同じであるということです。私は明らかに彼らが毎回異なっていることを望んでいます。ここに私のコードです:私は最初の結果を見た後にNBClustのランダムRプログラミング

cl <- makeCluster(NumberOfCluster) 
registerDoSNOW(cl) 
noenergy.scaled.results <- foreach(i = 1:8, .combine = "rbind", .packages = c("dplyr", "NbClust")) %dopar% { 
    set.seed(i) 
    noenergy.scaled.sampled <- sample_frac(clustering69.noenergy.scaled, 0.001) 
    noenergy.scaled.res<-NbClust(noenergy.scaled.sampled, distance = "euclidean", min.nc=2, max.nc=8, 
         method = "kmeans", index = "all") 
    return(noenergy.scaled.res) 
} 
stopCluster(cl) 

bestpartition.noenergy.scaled <- data.frame(noenergy.scaled.results[,4]) 
summary(bestpartition.noenergy.scaled) #3 result for 3 cluster, 5 result for 2 cluster 

は私がset.seed(I)の部分を書きましたが、それは何の効果も持っていなかったように思えます。

(私もしたいスケーリングなし、プラス余分な(エネルギー関連)コラムでこれを試してみてください、私は2つの異なるコンバーチブルないユニットで、その列を持っているので、変数名は、そのようなものです。)

答えて

0

私はドン」それがあなたのために働いていない理由を理解していない。 foreachset.seed(i)を使用して%dopar%を使用してください。あなたは試してみることができます:

NP <- lapply(1:5, function(xx) { set.seed(xx) 
            sample_frac(mtcars,0.1) }) # single-core 

library(doParallel) # setting up parallel 
library(foreach) 
cl <- makeCluster(detectCores()) 
registerDoParallel(cl) 

P <- foreach(i=1:5, .packages = c("dplyr")) %dopar% { set.seed(i) 
                sample_frac(mtcars,0.1)} # parallel equivalent 
stopCluster(cl) 

identical(P,NP) 
[1] TRUE 

私はこの評価のためにTRUEを得ます。何を手に入れますか?

関連する問題