我正在尝试屏蔽包中的函数调用的函数。
作为可重现(我认为)的示例,请查看函数isTRUE
:
function (x)
identical(TRUE, x)
假设出于某种原因我想identical
总是返回,"foobar"
因此isTRUE
总是返回“foobar”:
# try override identical
identical <- function(...) { return('foobar') }
identical(TRUE, 'a') # 'foobar', as expected
现在我调用isTRUE
,希望该identical
函数中的调用将访问我的屏蔽版本,但它没有:
isTRUE('a') # hope that this will return 'foobar'
# [1] FALSE
所以一般来说,我如何临时导致从打包函数中调用的函数返回不同的东西?
语境
我的包中有一个功能:
myFunc <- function(...) {
if (!require(rgdal)) {
stop("You do not have rgdal installed")
}
# ...
}
我想测试一下,如果没有安装 rgdal,函数会抛出错误。但是,我确实安装了 rgdal。我想myFunc
认为它不是(暂时),所以我正在尝试做:
require <- function(...) { return(FALSE) }
在打电话之前myFunc
希望它会失败。但是,它似乎myFunc
并没有被这个欺骗,并且仍然调用base::require
而不是 my require
。
(是的,这似乎是一件微不足道的事情,因为myFunc
如果我没有安装 rgdal 肯定会抛出错误,但假设现在情况更复杂,我想以同样的方式进行测试 - 我的问题仍然存在)