调用其他函数的函数的性能分析

时间:2012-11-15 18:39:11

标签: performance r profiling

我正在编写一个相对复杂的函数来进行从头到尾的数据分析。这个函数调用了我编写的许多子函数(它们本身称为子子函数等)。我正在寻找一种工具来告诉我我的功能花在每个子功能上的时间和时间。子子功能,以便看看我应该在哪里寻找性能改进。与MATLAB的profiler类似的东西会很好。

例如,假设函数audit

#fun1 is called by fun2
fun1 <- function() {
  rnorm(100000)
}

fun2 <- function(x) {
  y <- x+1
  z <- y*fun1()
}

mainFun <- function() {
  z+3
}

audit(mainFun())
> mainFun = 1 s; of which 95% is in fun1 and 98% is fun2

显然,我可以对每个单独的函数使用microbenchmark()system.time() - 但有效使用它会变得棘手,因为mainFun变得更加复杂。是否有现成的工具?

1 个答案:

答案 0 :(得分:5)

通过Google搜索R profiler会引导您进入Rprof功能,这就是您要寻找的功能。实质上,您调用Rprof()并正常运行脚本。 summaryRprof函数是概括分析器结果的便捷方式。有关详细信息,请查看?RprofTidying and profiling R code中的Writing R Extensions,或this linkthis SO question,甚至this set of SO questions。< / p>