首页 > 解决方案 > 在 R 中检测其他环境中的方法——用于在 testthat 中进行测试

问题描述

是否可以允许“UseMethod”查看其他环境中定义的类函数?有关示例,请参见下面的代码。我也希望检测到 h.logical 以便 h(TRUE) 返回“逻辑”。

h <- function(x) {
  UseMethod("h")
}
h.character <- function(x){ "char"}
h.numeric <- function(x) { "num" }


aa = list(h.logical=function(x){"logical"})

attach(aa)

h("a")
h(10)
h(TRUE)

此代码现在在最后一行引发错误: Error in UseMethod("h") : no applicable method for 'h' applied to an object of class "logical"

用这个例子解决问题就足够了。如果那不可能,我将不胜感激以另一种方式解决实际用例。

用例如下:我有一个包,上面有 h 之类的函数,然后我想给那个函数添加一个类。只需将新函数添加到 .Globalenv 即可。当我想使用 testthat 进行测试时会出现问题,因为我不允许在测试中写入 .Globalenv 。将新的类函数添加到测试中的某个其他环境使其可以被 methods() 检测到,但是,UseMethod 仍然看不到它并引发错误。有任何想法吗?

我可以使用其他的东西然后 UseMethod 来达到这个目的,或者在测试时做一些其他的黑客来模仿实际的用法吗?

非常感谢任何有关如何处理此问题的帮助或指示!

标签: rtestthatr-environment

解决方案


推荐阅读