Rインスタンスをクリーンアップして、起動時のバージナル状態に戻す必要があります。これまでのところ、私がしていることは次のとおりです。
起動時に、ロードされたパッケージと名前空間を記録します
original_packages <- grep('^package:', search(), value = TRUE)
original_namespaces <- loadedNamespaces()
インスタンスをフラッシュする必要がある場合は、起動時に存在しなかったロード済みの各パッケージをデタッチします。
for (pkg in grep('^package:', search(), value = TRUE)) {
if (! pkg %in% original_packages){
detach(pkg, unload=TRUE, force=TRUE, character.only=TRUE)
}
}
問題は、ggplot2などのインポートされた名前空間の束を含むパッケージをロードした場合、それらの名前空間はロードされたままであり、インポートの順序で高レベルからアンロードする必要があることです。「名前空間'x'は'y'、'z'によってインポートされるため、アンロードできない」というエラーが発生するため、盲目的にアンロードするだけでは機能しません。
再現可能な例を次に示します。
original_packages <- grep('^package:', search(), value = TRUE)
original_namespaces <- loadedNamespaces()
library(ggplot2)
library(plyr)
loadedNamespaces()
for (pkg in grep('^package:', search(), value = TRUE)) {
if (! pkg %in% original_packages){
detach(pkg, unload=TRUE, force=TRUE, character.only=TRUE)
}
}
for (ns in loadedNamespaces()) {
if (! ns %in% original_namespaces){
unloadNamespace(ns)
}
}
名前空間のインポート階層を理解する方法はありますか?もしそうなら、私は最後のループを正しく注文できるはずです...