我有一个复杂的R Shiny应用程序(由其他人调试),线索之一是,它在操作的某个时候会通过名称空间加载R包(碰巧是shinyjs
,但这对问题并不重要)。我发现并运行了对library()
和require()
的所有显式调用,并且在干净的会话中运行它们之后,shinyjs
并未出现在sessionInfo()
中。而如果我中断应用程序并运行sessionInfo()
,它将显示出来。因此,其他软件包之一必须在其“Suggests”字段中包含shinyjs
,然后显式调用它。为了弄清我的错误,我想找出应用程序的哪个部分正在执行此操作,正在使用哪些功能以及建议使用shinyjs
的哪个程序包。
在项目中没有显式使用字符串“shinyjs”,因此必须在应用程序使用shinyjs::some_function()
之类的(许多)软件包之一中掩埋它。我的问题是如何找到哪个包和哪个功能。
那么,如何(如果有的话)通过查看R会话来检测哪个包和函数称为R包,从而导致它通过名称空间加载?
最佳答案
您可以使用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)
我知道这不是您问题的具体答案,但是您可以更接近使用该软件包的位置。