NBClust并行R程序设计中的随机抽样

NBClust并行R程序设计中的随机抽样,r,parallel-processing,cluster-analysis,R,Parallel Processing,Cluster Analysis,我有一个250万行(和7或8个相关列)的大数据框,我正在尝试使用NBClustR包来计算数据有多少个集群。我只使用了190万行,这就满足了一个条件。因为对于NBClust和我的PC来说,这么多行仍然太多,所以我想我将使用dplyr::sample\u frac随机获取数据帧的子部分。0.1%的数据是1900行,我想我会在上面做8次NBClust(每个CPU核心2次)。我的问题是,根据结果,似乎在foreach中,随机抽样的1900行每次都是相同的。我显然希望他们每次都不一样。这是我的密码: cl

我有一个250万行(和7或8个相关列)的大数据框,我正在尝试使用
NBClust
R包来计算数据有多少个集群。我只使用了190万行,这就满足了一个条件。因为对于NBClust和我的PC来说,这么多行仍然太多,所以我想我将使用
dplyr::sample\u frac
随机获取数据帧的子部分。0.1%的数据是1900行,我想我会在上面做8次NBClust(每个CPU核心2次)。我的问题是,根据结果,似乎在foreach中,随机抽样的1900行每次都是相同的。我显然希望他们每次都不一样。这是我的密码:

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

cl我不明白为什么它不适合你。在
foreach
中使用
set.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
NP