从Rprof获取更多信息()
我一直在试图深入研究我编写的一些R代码中的时间,因此我使用的是Rprof
。输出还不是非常有帮助的,但:从Rprof获取更多信息()
> summaryRprof()
$by.self
self.time self.pct total.time total.pct
"$<-.data.frame" 2.38 23.2 2.38 23.2
"FUN" 2.04 19.9 10.20 99.6
"[.data.frame" 1.74 17.0 5.54 54.1
"[.factor" 1.42 13.9 2.90 28.3
...
是否有某种方式来深入挖掘和发现的$<-.data.frame
哪些具体的调用,并FUN
(这可能是从by()
)等实际上是罪魁祸首?或者我需要重构代码并制作更小的功能块以获得更精细的结果?
我忍住重构的唯一原因是,我不得不将数据结构传递到功能,所有的传球是价值,因此这似乎是在错误的方向迈出的一步。
谢谢。
现有的CRAN包profr和proftools对此很有用。后者可以使用Rgraphviz,它不总是可以安装的。
的R Wiki page on profiling有额外的信息和罗曼一个很好的脚本,也可以可视化(但需要graphviz的)。
进行解析时Rprof
生成输出是不是太硬,然后您可以访问绝对一切。
Rprof以时间间隔取样调用堆栈 - 这是个好消息。
我所要做的就是访问它收集的原始堆栈样本(stackshots),随机挑选几个并检查它们。我正在寻找的是呼叫站点(不只是函数,而是函数调用另一个函数的地方),它们出现在多个样本上。例如,如果呼叫站点出现在50%的样本上,那么这就是成本,因为它可能的去除将大约节省总时间的50%。 (似乎是显而易见的,对吧?但它不为人所熟知。)
并不是每一个代价高昂的调用的位置是优化的,但也有一些,除非方案已经尽可能快。如果某件事会为你节省一段合理的时间,那么它就会出现在相似的样本中,确切的数字并不会影响你的观点,重要的是你可以找到它,也不要被图表和递归以及时间测量和计数问题分散注意力,重要的是,对于你看到的每个调用站点,显示它的堆栈样本的一部分。)
网址被破坏,也许现在是[这里](http://rwiki.sciviews.org/doku.php?id=tips:misc:profiling)。 – hhh 2011-04-08 00:36:00