如何加快R中单行代码的计算速度?

时间:2016-11-15 02:57:03

标签: r cluster-analysis parallel-processing

我有一个非常大的数据集,想要进行一些统计分析。计算只需要一个行代码,但可能需要几天时间。有没有办法加速这个过程?

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

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%左右,这是正常值。

1 个答案:

答案 0 :(得分:1)

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

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

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