3

我有一个复杂的 R Shiny 应用程序(由其他人)要调试,其中一个线索是,在其操作的某个时刻,它通过命名空间加载了一个 R 包(它恰好是,shinyjs但这对问题并不重要)。我已经找到并运行了所有显式调用,library()并且require()在干净会话中运行它们之后shinyjs不会出现sessionInfo(). 而如果我中断应用程序并运行sessionInfo()它确实会出现。因此,其他包之一必须shinyjs在其“建议”字段中,然后显式调用它。为了解决我的错误,我想找出应用程序的哪个部分正在执行此操作,它正在使用哪些功能,以及它建议使用哪个包shinyjs

项目中没有明确使用字符串“shinyjs”,因此必须隐藏在应用程序使用的(许多)包之一中,例如shinyjs::some_function(). 我的问题是如何找到哪个包和哪个功能。

那么,我如何(如果有的话)通过查看 R 会话来检测哪个包和函数称为 R 包,从而导致它通过命名空间加载?

4

1 回答 1

2

您可以使用tools:package_dependencies了解您已安装或正在使用的软件包shinyjs在其依赖项中具有哪些软件包。

# Example with all my packages
library(tools)
xx <- package_dependencies(available.packages())
names(xx)[unlist(lapply(xx, function(x) "shinyjs" %in% x))]
 [1] "addinslist"                "AFM"                       "airGRteaching"             "bairt"                    
 [5] "blkbox"                    "colourpicker"              "CRANsearcher"              "ddpcr"                    
 [9] "dextergui"                 "dragulaR"                  "dtwclust"                  "Eagle"                    
[13] "eechidna"                  "elementR"                  "genBart"                   "genogeographer"           
[17] "ggExtra"                   "ggquickeda"                "gimmeTools"                "GMSE"                     
[21] "GWSDAT"                    "lightsout"                 "meltt"                     "memapp"                   
[25] "mrMLM.GUI"                 "npregfast"                 "ProjectionBasedClustering" "projector"                
[29] "regexSelect"               "ShinyImage"                "ShinyItemAnalysis"         "shinyKGode"               
[33] "shinystan"                 "skpr"                      "SpatialEpiApp"             "spectrolab"               
[37] "spotGUI"                   "stmgui"                    "stminsights"               "Umatrix"                  
[41] "wallace"                   "wilson"                    "wppExplorer"               "xROI"                     
[45] "yuimaGUI"  

探索它在哪里运行的另一个选项是trace函数。shinyjs没有很多功能,因此您可以查看代码的哪些部分正在使用其某些功能以及使用了多少次。

# Example with the function sum
> trace (sum)
> x <- seq (1, 10)
> hist (x)
trace: sum
trace: sum
> y <- sqrt (x)
> lm <- lm (x ~ y)
trace: sum
trace: sum
trace: sum
trace: sum
trace: sum
trace: sum
trace: sum
trace: sum
trace: sum
> untrace (sum)

我知道这不是对您问题的具体答案,但这样您就可以更接近使用包的位置。

于 2018-08-01T08:42:54.293 回答