2014-01-16 64 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:後者。 –