我有一个非常大的数据集,想要进行一些统计分析。计算只需要一个行代码,但可能需要几天时间。有没有办法加速这个过程?
起初我认为并行化可能是一个很好的解决方案,但后来我被告知单个调用的并行化是不可能的。这是一个例子,
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 :(得分:1)
您需要获取NbClust
的源代码,然后优化此功能。
例如,您可以尝试将冗余计算移出此方法(只需执行一次)。
如果函数仍然是R代码,则用C ++(即Rcpp)重写它。这将大大加快功能,因为纯R代码非常慢。