调用 devtools::test() 后在包中进行通用调度

Generic dispatching in a package after a call to devtools::test()

我对某事感到困惑。当我把这个函数放到一个包中时

oddTranspose <- function(x) {
  t(x)
}

效果很好

m <- matrix(c(1,0,0,0), nrow=2)
M <- as(m, "Matrix")

oddTranspose(m) # works
oddTranspose(M) # works

但是,当我使用 devtools::test() 时,它停止工作

devtools::test()
oddTranspose(m) # works
oddTranspose(M)
## t.default(x) : argument is not a matrix

这对我来说是个问题,因为我使用以下工作流程测试我的包:

构建包,放置一个名为

的文件

package_root\tests\testthat_tests.R,带正文

require(testthat)
require(myPackage)
test_check('myPackage')

然后在

package_root\tests\testthat\file.R, 我放测试

然后我用

在 R 中测试它们
library(testthat)
setwd("package_root/tests")
devtools::test()

我能做什么?

请注意,我为您省去了包开销的所有文本,但包的名称空间导入 Matrix 包并导出 oddTranspose,并且 Matrix 上的包 DESCRIPTION "depends"。

解决此问题的方法是 (1) 将所有 setGeneric 调用移至 all.R(或提前加载 .R 文件),以及 (2) 将所有 setMethod 调用移至函数所在的文件内部。