除了基准测试功能外,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 ++实现了所有内容。
答案 0 :(得分:2)
如果您(通常)在R中编写代码更快并且感觉像是要编写更多的C ++代码,我建议采用以下方法:
根据经验,您可以削减一些角落,即从一开始就知道问题中的某些内容需要编译代码。但这实际上取决于你正在处理的问题。