2014-01-16 60 views
3

我试图追查为什么一个包我已经把加载缓慢的原因(S)(相对于其他人,这是明显慢),并运行此功能“图书馆”(使用ggplot2作为一个例子)似乎并没有给任何见解:剖析R中

Rprof(line.profiling=TRUE) 
library(ggplot2) 
Rprof(NULL) 
summaryRprof("Rprof.out", lines = "show") 

这将产生:

$by.self 
       self.time self.pct total.time total.pct 
<no location>  0.5  100  0.5  100 
$by.total 
       total.time total.pct self.time self.pct 
<no location>  0.5  100  0.5  100 
$by.line 
       self.time self.pct total.time total.pct 
<no location>  0.5  100  0.5  100 

$sample.interval 
[1] 0.02 

$sampling.time 
[1] 0.5 

(和Rprof.out包含的我无法理解信息的混乱)

任何人都可以建议我如何“简介”功能library正在做什么?或者,我采取了错误的方法?

+0

要清楚,我肯定不是暗示'ggplot2'加载缓慢。 –

+0

我可能会提供一些猜测,如果你指出你的软件包的源代码。我会看看你在NAMESPACE中做了什么,你的包环境中有多少个对象,等等。 – hadley

+0

谢谢@hadley。我敢肯定,你有更好的事情要做,但代码库是在这里:https://github.com/abarbour/strain –

回答

3

,因为它说在?summaryRprof线谱部分:

如果代码正在运行已源的参考信息保持(通过 keep.source = TRUEsourceKeepSource = TRUE在封装 DESCRIPTION文件或某种其它那么在剖析期间记录关于线的起源的信息。

默认情况下,构建/安装软件包时不保留源代码。如果您只运行summaryRprof(),您将看到非平凡的计时。你总是可以用KeepSource=TRUE重新安装基础包,但这可能比它的价值更麻烦。

另一种替代方法是使用debugonce(library)逐行呼叫library呼叫。这有点蛮力,但它可能比梳理profiling输出更明显。

+0

有趣的点。为了澄清,当你写“基础包”时,你的意思是我正在学习的包,还是'base'包,以便'library'的源代码被保留? –

+0

@AndyBarbour:后者。 –