パッケージの関数が呼び出す関数をマスクしようとしています。
再現可能な(私が思う)例として、関数を見てくださいisTRUE
:
function (x)
identical(TRUE, x)
何らかの理由で常に を返したいidentical
とします。したがって、常に「foobar」を返します。"foobar"
isTRUE
# 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
失敗することを期待して呼び出す前に。ただし、はこれにだまされず、 my の代わりにmyFunc
まだ呼び出しているようです。base::require
require
(はい、これは些細なことのように思えます。myFunc
なぜなら、rgdal がインストールされていない場合、ほとんどの場合エラーがスローされるからです。しかし、条件がより複雑になり、同じ方法でテストしたいとします。私の質問はまだ残っています)