Rインスタンスを起動時の処女状態に戻すには、そのインスタンスをクリーンアップする必要があります。これまでのところ、私がやっていることです:私はインスタンスをフラッシュする必要がある場合は、起動時にありませんでしたロードされた各パッケージを切り離し[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)
}
}
は、名前空間のインポートの階層構造を把握するためにいくつかの方法はありますか?もしそうなら、私はちょうど最後のループを正しく注文することができるはずです...
私は長い時間前にこのメソッドをあきらめました。 AFAIK、 'detach'のドキュメンテーションは、動作保証されていないと言います。唯一の保証された方法は、新鮮なセッションを開始することです。 – Andrie
残念ながら、残念ながら私はrpy2 AFAICTの下で新鮮なセッションを開始できません - これは現在のデザインで永続的なRセッションを持つWebアプリケーション用です。 – Tarek
@アンドリーのコメントにフォローアップ、[このような質問に答えての最後のいくつかのコメント](http://stackoverflow.com/questions/11004018/how-can-a-non-imported-method-in-a-接続されていないパッケージが見つからない場合)は、単にデタッチしてもセッションが元の状態に確実に復元されないという理由の1つになります。 –