Spacedman..
18
首先确保你的慢R版本是正确的.调试R代码可能比调试C代码更容易.完成了吗?大.您现在可以使用正确的代码进行比较.
接下来,找出花时间的东西.使用Rprof运行代码,看看花了多少时间.我为一些我继承过的代码做了这个,发现它花了90%的时间在t()函数中.这是因为程序员有一个矩阵A,并且在无数个地方做了t(A).我在开始时做了一个tA = t(A),并用tA替换每个t(A).大力加速,不费吹灰之力.首先描述您的代码.
现在,你已经找到了瓶颈.是你可以加速R的代码吗?它是一个可以矢量化的循环吗?去做.根据您的黄金标准正确代码检查您的结果.总是.是的,我知道很难比较依赖随机数的算法,因此设置种子相同并再试一次.
还不够快?好的,现在也许你需要在C或C++或Fortran中重写部分(一般是最低级别的部分,以及那些花费大部分时间进行分析的部分),或者如果你真的想用GPU代码那么.
再次,真的检查代码给出与正确的R代码相同的答案.真的检查一下.如果在此阶段您在常规方法中找到任何错误,请将其修复为您认为正确的R代码和最新版本,并重新运行所有测试.建立大量的自动测试.经常运行它们.
阅读有关代码重构的内容.它被称为重构,因为如果你告诉你的老板你正在重写你的代码,他或她会说'你为什么不第一次正确写它?'.如果你说你正在重构你的代码,他们会说"嗯......很好".这实际上是发生的.
正如其他人所说,Rcpp是胜利的.
是的:http://www.cafepress.co.uk/cp/customize/product2.aspx?from = CustomDesigner&number = 618625436 (11认同)