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

时间:2015-09-11 11:49:57

标签: r package

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函数。

1 个答案:

答案 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