从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())等实际上是罪魁祸首?或者我需要重构代码并制作更小的功能块以获得更精细的结果?

我忍住重构的唯一原因是,我不得不将数据结构传递到功能,所有的传球是价值,因此这似乎是在错误的方向迈出的一步。

谢谢。

现有的CRANprofrproftools对此很有用。后者可以使用Rgraphviz,它不总是可以安装的。

R Wiki page on profiling有额外的信息和罗曼一个很好的脚本,也可以可视化(但需要graphviz的)。

+0

网址被破坏,也许现在是[这里](http://rwiki.sciviews.org/doku.php?id=tips:misc:profiling)。 – hhh 2011-04-08 00:36:00

进行解析时Rprof生成输出是不是太硬,然后您可以访问绝对一切。

Rprof以时间间隔取样调用堆栈 - 这是个好消息。

我所要做的就是访问它收集的原始堆栈样本(stackshots),随机挑选几个并检查它们。我正在寻找的是呼叫站点(不只是函数,而是函数调用另一个函数的地方),它们出现在多个样本上。例如,如果呼叫站点出现在50%的样本上,那么这就是成本,因为它可能的去除将大约节省总时间的50%。 (似乎是显而易见的,对吧?但它不为人所熟知。)

并不是每一个代价高昂的调用的位置是优化的,但也有一些,除非方案已经尽可能快。如果某件事会为你节省一段合理的时间,那么它就会出现在相似的样本中,确切的数字并不会影响你的观点,重要的是你可以找到它,也不要被图表和递归以及时间测量和计数问题分散注意力,重要的是,对于你看到的每个调用站点,显示它的堆栈样本的一部分。)