[英]How to profile the loading of an R package
我已經寫了這個R包,需要花費很多時間(> 10s,有時長達20-30s!)來加載。
每次加載軟件包時,例如在"** testing if installed package can be loaded"
步驟中構建軟件包或直接調用library("my.package")
時,20 library("my.package")
都不會發生任何事情。
這使開發過程中的所有事情都非常緩慢:構建文檔,構建軟件包,運行R檢查...
我當然有懷疑(看着你,狡猾的依賴),但是我需要在消除之前收集證據。
有沒有一種方法可以分析軟件包的加載情況,以便找出原因? 或更籠統地說,我如何弄清楚到底發生了什么?
因此,使用@ davide-lorino中的detach方法存在的一個問題是,如果存在糾纏的depends
或imports
,它將失敗並且很難失敗。
更好的方法是使用future
后端在干凈的R會話中加載每個import
,並確定通過library
加載它們需要花費多長時間。
我在一個可能對其他人有用的軟件包中實現了這一點: https : //github.com/rmflight/importedPackageTimings
您可以通過基准測試調用來加載要測試的每個庫,從而確定哪個庫需要最長的加載時間。
關鍵是確保卸載庫。 如果在重新加載庫之前使它們保持加載狀態,則library()
函數將確定該庫已加載並退出。 在典型的100次運行基准測試中,其中1次代表加載庫所需的時間,其余99次代表library()
確定加載庫所需的時間。 然后,結果(持續時間)將是100次運行的總和,得出的結果很小,結果之間幾乎沒有差異,如下所示:
當您真正想要的東西看起來像:
為我們的努力提供了不那么令人驚訝的結果。
ps detach_package()
函數是這樣實現的:
detach_package <- function(pkg, character.only = FALSE)
{
if(!character.only)
{
pkg <- deparse(substitute(pkg))
}
search_item <- paste("package", pkg, sep = ":")
while(search_item %in% search())
{
detach(search_item, unload = TRUE, character.only = TRUE)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.