簡體   English   中英

如何分析R軟件包的加載

[英]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方法存在的一個問題是,如果存在糾纏的dependsimports ,它將失敗並且很難失敗。

更好的方法是使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM