パッケージの関数が呼び出す関数をマスクしようとしています。
再現可能な(私が思う)例として、関数を見てください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::requirerequire
(はい、これは些細なことのように思えます。myFuncなぜなら、rgdal がインストールされていない場合、ほとんどの場合エラーがスローされるからです。しかし、条件がより複雑になり、同じ方法でテストしたいとします。私の質問はまだ残っています)