R包中的代码:找出它所包含的*包/命名空间

cbe*_*ica 6 r package

有没有办法代码的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在包代码中定义函数.

cbe*_*ica 0

接近答案:

\n\n

@MartinMorgan\ 的使用提示topenv ()非常接近。但事实证明,在使用 运行单元测试时testthattestthat位于搜索路径中包命名空间之前。

\n\n

这就是当前的状态:

\n\n
.findmyname <- function() {\n    pkgs <- .packages ()\n\n    if (pkgs [1] == "testthat")\n        pkgs [2]\n    else\n        pkgs [1]\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

此函数从包内和 中查找相关包的名称tests/testthat.R。(当然,.findmyname ()包内的任何定义在\xc2\xa0calltests/testthat.R之前是不知道的library...)

\n