2016-11-15 76 views
0

我有一个非常大的数据集,并希望进行一些统计分析。计算只需要一行代码,但可能需要几天时间。有什么方法可以加速这个过程吗?如何加快R中单行代码的计算速度?

起初,我认为并行化可能是一个很好的解决方案,但后来有人告诉我,单个调用的并行化是不可能的。下面是一个例子,

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

是的,更适合SO。 – wrtsvkrfm

+0

您可以尝试优化并行化。也许负载平衡可能会有所帮助,也许你应该立即将矩阵块发送到节点。否则,你可以考虑使用编译代码,例如,在Rcpp中实现。但首先你应该考虑你在那里做什么是明智的。如果某些事情需要数天计算,那么应该花一些时间重新考虑算法。 – Roland

回答

1

您需要获取NbClust的源代码,然后优化此功能。

例如,您可以尝试将冗余计算移出此方法(只需执行一次)。

如果函数仍然是R代码,请用C++重写它(即Rcpp)。这将大大加快功能,因为纯粹的R代码非常慢。