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

How to accelerate the calculation speed for one-line code in 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%左右,这是正常值。

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

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

如果函数还是R代码,用C++重写(即Rcpp)。这将大大加快函数速度,因为纯 R 代码非常慢。