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