Tôi cần phải dọn sạch một cá thể R để trả lại trạng thái virginal khi khởi động. Cho đến nay, những gì tôi đang làm là:Làm cách nào để xác định thứ tự nhập không gian tên trong [R]
On khởi động, ghi lại các gói nạp và không gian tên
original_packages <- grep('^package:', search(), value = TRUE)
original_namespaces <- loadedNamespaces()
Khi tôi cần để tuôn ra những ví dụ, tách từng gói nạp mà không có ở đó lúc khởi động:
for (pkg in grep('^package:', search(), value = TRUE)) {
if (! pkg %in% original_packages){
detach(pkg, unload=TRUE, force=TRUE, character.only=TRUE)
}
}
Vấn đề là nếu tôi đã tải gói có nhiều không gian tên đã nhập, chẳng hạn như ggplot2, các không gian tên đó sẽ được tải và tôi phải dỡ chúng theo thứ tự nhập từ cấp cao xuống. Chỉ cần dỡ bỏ chúng một cách mù quáng không hoạt động, vì tôi nhận được "không gian tên‘ x ’được nhập bằng các lỗi‘ y ’,‘ z ’để không thể tải xuống được”.
Đây là tái sản xuất ví dụ:
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)
}
}
Có một số cách để tìm ra hệ thống phân cấp namespace nhập khẩu? Nếu có, thì tôi chỉ có thể đặt hàng vòng cuối cùng một cách chính xác ...
Tôi đã từ bỏ phương pháp này một thời gian dài trước đây. AFAIK, tài liệu cho 'detach' nói rằng nó không được bảo đảm để hoạt động. Cách duy nhất được đảm bảo là bắt đầu một phiên mới. – Andrie
Vâng, đáng tiếc là tôi không thể bắt đầu một phiên mới dưới rpy2 AFAICT - đây là một ứng dụng web có phiên R liên tục trong thiết kế hiện tại của nó. – Tarek
Theo dõi nhận xét của @ Andrie, vài bình luận cuối cùng về câu trả lời cho [câu hỏi SO này] (http://stackoverflow.com/questions/11004018/how-can-a-non-imported-method-in-a- không đính kèm-gói-được-tìm-by-gọi-to-fun) có được tại một trong những lý do mà chỉ đơn giản là 'detach'ing sẽ không đáng tin cậy khôi phục phiên của bạn về trạng thái ban đầu của nó. –