実際の質問
パッケージが要求/ロードされた後、パッケージの(再)インストールのブロックを無効にすることは可能ですか?
パッケージが使用された後、パッケージがロードされたのと同じライブラリへの「真の」再インストールをブロックすることは完全に理にかなっていることを理解しています。しかし、私のユースケースは少し異なります
バックグラウンド
自分のパッケージをテストするための「サンドボックスライブラリ」を用意するというアイデアが好きです。テストするパッケージに加えて、これらのサンドボックスライブラリには、クリーンなベースRインストールのすべてのベースパッケージに加えて、パッケージの構築とテストのフレームワーク全体が機能するために必要ないくつかのcontribパッケージが含まれています(例digest
などstringr
)。ただし、私のフレームワークは後者のパッケージを標準ライブラリからロードしてから、それらをサンドボックスライブラリにインストールする必要があります。これはブロックされています。したがって、ブロックを実装するときに人々が考えていたことを実際に行っていないので、これをオーバーライドすることが可能かどうかという私の質問です。
図
2つのライブラリへのパスを指定します
lib <- file.path(R.home(), "library")
lib.sandbox <- file.path(tempdir(), "library")
サンドボックスライブラリを作成する
dir.create(lib.sandbox, showWarnings=FALSE)
パッケージを標準ライブラリにインストールしてロードします
install.packages("digest", lib=lib)
require("digest", lib.loc=lib)
次に、サンドボックスライブラリにもインストールします
> install.packages("digest", lib=lib.sandbox)
Warning: package 'digest' is in use and will not be installed
私のフレームワークは、サンドボックスライブラリにインストールする必要がある特定のパッケージがロードされた後に特定のものを計算するため、最初のロードステップの前に「install-to-sandbox-lib」ステップを配置できません。