Пространство имен не выгружается в R

У меня возникают проблемы с выгрузкой пространства имен для пакета, созданного в R. Каждый раз, когда я пытаюсь это сделать, я получаю следующую ошибку:

Ошибка в .mergeMethodsTable(generic, mtable, get(tname, envir = env), : попытка получить слот, «определенный» из объекта базового класса («окружение») без слотов
Вызовы: unloadNamespace ... -> .updateMethodsInTable -> .mergeMethodsTable

Вот результаты вызова traceback() после возникновения вышеуказанной ошибки.

>4: .mergeMethodsTable(generic, mtable, get(tname, envir = env), attach)
 3: .updateMethodsInTable(fdef, where, attach)
 2: methods:::cacheMetaData(ns, FALSE, ns)
 1: unloadNamespace("coleXcms")

Честно говоря, я пробовал все, что мог придумать, но безрезультатно. Я новичок в R, поэтому я надеялся, что кто-то сможет мне помочь.

Кроме того, не знаю, будет ли это полезно, но вот крючок для разгрузки моего пакета. (Название моего пакета coleXcms)

.onUnload <- function(libpath) {  
    mzR:::rampCloseAll()  
    library.dynam.unload("coleXcms", libpath)
}

person Cole    schedule 10.05.2014    source источник
comment
Это может помочь предоставить результат traceback() после возникновения ошибки.   -  person Martin Morgan    schedule 10.05.2014
comment
Обновлен пост, чтобы показать результаты трассировки @MartinMorgan   -  person Cole    schedule 12.05.2014
comment
Извини, Коул, мне трудно понять на расстоянии; если бы ваш пакет (или его минимальная версия) находился в каком-то общедоступном месте, это могло бы сделать возможным устранение неполадок...   -  person Martin Morgan    schedule 13.05.2014
comment
@MarginMorgan Закинул на гитхаб. github.com/ColeWunderlich/coleXcms   -  person Cole    schedule 13.05.2014
comment
Кроме того, это своего рода хак Xcms, где я изменил несколько вещей, чтобы значительно улучшить время выполнения. Возможно, я что-то сломал в процессе....   -  person Cole    schedule 13.05.2014


Ответы (1)


Функция, которую я успешно использовал, это unloadNamespace. Похоже, что library.dynam.unload предназначен для удаления DLL, но мне не ясно, удалит ли он остальную часть пакета.

person IRTFM    schedule 10.05.2014
comment
Вышеупомянутая ошибка — это то, что я получаю, когда вызываю detatch (package:coleXcms, unload=T), что, как я полагаю, в какой-то момент приводит к вызову unloadNamespace. Поправьте меня если я ошибаюсь. - person Cole; 10.05.2014
comment
Вы можете попытаться проверить свое понимание, набрав detach в консоли. Я думаю, что в архивах R-help есть обсуждения, в которых проводится различие между эффектами detach и unloadNamepsace. Мое неподтвержденное воспоминание заключалось в том, что unloadNamespace может быть успешным, когда detach терпит неудачу... вот где я мог собрать это впечатление: article.gmane.org/gmane.comp.lang.r.general/111050/ Я не могу объяснить, почему, но могу сообщить по опыту, что unloadNamespace удается, когда detach не работает. - person IRTFM; 10.05.2014