优化R代码 - Rcpp

时间:2018-05-31 20:15:53

标签: r rcpp

除了基准测试功能外,R中是否有任何工具可以获取R代码中最大的瓶颈?

我经常对在C ++中重写R代码时获得的计算增益非常不确定。例如,在每个迭代需要进行优化的引导程序中,我不知道使用 GSL 库来执行对数似然函数的优化是否有用,因为{{ 1}}语言函数R使用stats.so文件。我注意到这是optim

stats ::: C_optim

查看> stats:::C_optim $name [1] "optim" $address <pointer: 0x1cb34e0> attr(,"class") [1] "RegisteredNativeSymbol" $dll DLL name: stats Filename: /usr/lib/R/library/stats/libs/stats.so Dynamic lookup: FALSE $numParameters [1] 7 attr(,"class") [1] "ExternalRoutine" "NativeSymbolInfo" 函数(optim)的主体,我看到在C中实现了有效函数的导入。例如,有:

edit(optim)

怀疑:对于 Rcpp 用户,在您的项目中,您通常会尝试实现所有C ++函数或实现一组小C ++函数以用于R功能?

我知道这是一个相当普遍的问题,但我使用的所有函数 Rcpp 总是尝试从头开始实现C ++函数。我觉得我在C ++中编程比在R中编程更多。我有时认为我需要直接在C ++中编程。

R具有许多特性,使得语言对于各种任务来说都很慢。我总是试图避免循环并让位于.External2(C_optim, par, fn1, gr1, method, con, lower, upper) 函数族的使用。但是,我经常发现R很慢。这样,因为我对于值得优化的内容非常不确定,所以我最终用C ++实现了所有内容。

1 个答案:

答案 0 :(得分:2)

如果您(通常)在R中编写代码更快并且感觉像是要编写更多的C ++代码,我建议采用以下方法:

  1. 在R。
  2. 中实施您的解决方案
  3. 仅当 R解决方案不够快时,请尝试对其进行优化。
  4. 优化的第一步是衡量效果,即分析您的代码。
  5. 一旦确定了瓶颈,就可以改进那些使用的,更好的R代码或编译代码。
  6. 根据经验,您可以削减一些角落,即从一开始就知道问题中的某些内容需要编译代码。但这实际上取决于你正在处理的问题。