Potrzebuję oczyścić instancję R, aby przywrócić ją do stanu początkowo uruchomionego. Do tej pory, co robię jest:Jak określić kolejność importu przestrzeni nazw w [R]
dniu premiery nagrać załadowanych pakietów i nazw
original_packages <- grep('^package:', search(), value = TRUE)
original_namespaces <- loadedNamespaces()
Kiedy trzeba przepłukać instancji, odłączyć każdego załadowanego pakietu, który nie był tam w chwili premiery:
for (pkg in grep('^package:', search(), value = TRUE)) {
if (! pkg %in% original_packages){
detach(pkg, unload=TRUE, force=TRUE, character.only=TRUE)
}
}
problemem jest to, że jeśli są załadowane opakowanie z grupą importowanych nazw, takich jak ggplot2 te nazw pozostawać załadowany, i trzeba wyładować je w kolejności od importu z wysokiego poziomu w dół. Po prostu rozładowanie ich na ślepo nie działa, ponieważ otrzymuję "przestrzeń nazw" x "jest importowana przez" y "," z ", więc nie można rozładować" błędów.
Oto powtarzalne przykład:
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)
}
}
Czy istnieje jakiś sposób, aby zorientować się w hierarchii import namespace? Jeśli tak, to powinienem być w stanie prawidłowo zamówić ostatnią pętlę ...
dałem się na tej metodzie dawno temu. AFAIK, dokumentacja dla 'detach' mówi, że nie ma gwarancji, że zadziała. Jedynym gwarantowanym sposobem jest rozpoczęcie nowej sesji. – Andrie
Tak, niestety nie mogę rozpocząć nowej sesji pod adresem rpy2 AFAICT - jest to aplikacja internetowa, która ma trwałą sesję R w swoim obecnym projekcie. – Tarek
Kontynuacja komentarza @ Andrie, ostatnie kilka uwag na temat odpowiedzi na [to pytanie SO] (http://stackoverflow.com/questions/11004018/how-can-a-non-imported-method-ina-a- nie-dołączony-pakiet-można-znaleźć-przez-wywołania-do-zabawy) uzyskać jeden z powodów, że po prostu "odłączanie" nie będzie niezawodnie przywrócić twoją sesję do jej pierwotnego stanu. –