中的名稱空間導入順序我需要清理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下啓動一個新的會話 - 這是一個Web應用程序,它在當前的設計中具有持續的R會話。 – Tarek
繼續@安德烈的評論,最後幾個評論[這個SO問題]的答案(http://stackoverflow.com/questions/11004018/how-can-a-non-imported-method-in-a-沒有附加的包 - 被調用者找到樂趣)得到的原因之一就是「分離」不能可靠地將會話恢復到原始狀態。 –