有没有办法代码的R包可以找出哪些属于包或命名空间?
背景:我发现在包名称不同的包之间有共同的代码.一个常见的例子是tests/testthat.R:
library(testthat)
library(ShiftedExcitation)
test_check("ShiftedExcitation")
Run Code Online (Sandbox Code Playgroud)
如果代码可以找出它所属的包或命名空间,我可以避免现在给出包名的许多地方.
现在我定义一个包含包名称的隐藏变量
.PKG <- "ShiftedExcitation"
然后用东西线沿线的*
library(testthat)
library(.PKG, character.only = TRUE)
test_check(.PKG)
Run Code Online (Sandbox Code Playgroud)
但我很好奇是否存在更优雅的解决方案.
*到目前为止,我没有得到这个工作,因为testthat.R在包命名空间之外进行了评估.但它确实可以用于unittest在包代码中定义函数.
接近答案:
\n\n@MartinMorgan\ 的使用提示topenv ()非常接近。但事实证明,在使用 运行单元测试时testthat,testthat位于搜索路径中包命名空间之前。
这就是当前的状态:
\n\n.findmyname <- function() {\n pkgs <- .packages ()\n\n if (pkgs [1] == "testthat")\n pkgs [2]\n else\n pkgs [1]\n}\nRun Code Online (Sandbox Code Playgroud)\n\n此函数从包内和 中查找相关包的名称tests/testthat.R。(当然,.findmyname ()包内的任何定义在\xc2\xa0calltests/testthat.R之前是不知道的library...)