我们知道在R中通过Rcpp包调用C\C++代码可以把一些尤其是矩阵计算的算法加速,我们还知道如果机器足够给力就可以使用parallel包或者snowfall包运用多核或者多机并行计算来加速,但有时我们大可不必这么费劲。在R 2.14版本之后提供了一个compiler的基础包,使得我们可以在执行自己的函数之前把它编译成二进制程序(正如编译语言比脚本语言快)。如果仅仅想加速一些R中既有的函数,不妨试试这个办法。举个简单的for循环例子如下,可以看到带来的速度提升达到13.67倍之多。八卦一下,据说该包作者作为R Project核心成员进入开发组许多年都没有commit过,第一次commit就是这个成果,可谓十年磨一剑。废话不多说,看例子。
S> myFunction<-function() { for(i in 1:1e7) { 1*(1+1) } } S> library(compiler) S> myCompiledFunction <- cmpfun(myFunction) # 编译函数 S> system.time( myFunction() ) user system elapsed 10.280 0.017 10.303 S> system.time( myCompiledFunction() ) user system elapsed 0.752 0.024 0.776