Как выгрузить пакет без перезапуска R?

343

Я хотел бы выгрузить пакет без перезапуска R (в основном из-за перезапуска R, поскольку я тестирую разные конфликтующие пакеты, становится расстраивающим, но, возможно, это может быть использовано в программе для использования одной функции, а затем другой - - хотя ссылка на пространство имен, вероятно, является лучшей идеей для этого использования).

?library не показывает никаких параметров, которые могли бы выгрузить пакет.

Существует предложение , что detach может выгрузить пакет, но следующие неудачные:

detach(vegan)

Ошибка в detach(vegan): неверный name аргумент

detach("vegan")

Ошибка в detach("vegan"): неверный name аргумент

Итак, как мне разгрузить пакет?

  • 3
    @Iterator: библиотека - это место, где вы найдете пакеты. (Они не являются синонимами.) .libPaths() дает вам пути ко всем библиотекам в вашей системе.
  • 13
    @Richie: Спасибо. Я понимаю это в контексте R, но чувствую, что использование R перегружает или делает неоднозначным термин « library двумя способами: 1 - это не то же самое использование library , что и в других местах, и 2 - термин используется в library() для загрузки ... не библиотека, а пакет.
Показать ещё 1 комментарий
Теги:
packages
r-faq

6 ответов

450
Лучший ответ

Попробуйте следующее:

detach("package:vegan", unload=TRUE)

Можно сразу загрузить несколько версий пакета (например, если у вас есть версия для разработки и стабильная версия в разных библиотеках). Чтобы отделить гарантию, что все копии отсоединены, используйте эту функцию.

detach_package <- function(pkg, character.only = FALSE)
{
  if(!character.only)
  {
    pkg <- deparse(substitute(pkg))
  }
  search_item <- paste("package", pkg, sep = ":")
  while(search_item %in% search())
  {
    detach(search_item, unload = TRUE, character.only = TRUE)
  }
}

Использование, например

detach_package(vegan)

или

detach_package("vegan", TRUE)
  • 2
    @ Hadley Действительно. Версия без кавычек, похоже, не работает в последней версии R. Я обновил ответ Кохске, чтобы отразить ваше решение.
  • 0
    @ AriB.Friedman, есть ли способ отсоединить несколько пакетов одновременно? Когда я загружаю, скажем, Hmisc он также загружает survival и splines есть ли способ разгрузить эти группы вместе?
Показать ещё 5 комментариев
41

Вы также можете использовать команду unloadNamespace, как в:

unloadNamespace("sqldf")

Функция отделяет пространство имен до его выгрузки.

  • 9
    это работало для меня, и другие рекомендуемые варианты не. Спасибо!
  • 0
    Хороший ответ. Также работал для меня, а другие нет.
16

вы можете снять флажок в RStudio (пакеты)

  • 9
    Стоит добавить, что это приводит к выполнению команды detach("package:packageToUnload", unload=TRUE) и ничем не отличается от уже предложенного решения.
5

Я попробовал то, что kohske написал как ответ, и снова получил ошибку, поэтому я сделал поиск и нашел это, что сработало для меня (R 3.0.2):

require(splines) # package
detach(package:splines)

а также

library(splines)
pkg <- "package:splines"
detach(pkg, character.only = TRUE)
  • 3
    Какая у вас ошибка? Потому что это работает для меня (R 3.1). И второе решение - тот же ответ @ koshke, только без выгрузки (поэтому пространство имен пакета не выгружается).
  • 0
    Я получил ту же ошибку. Дело в том, что я дал то же решение, что и @Kohske, но с другим именем пакета. это просто означает, что если вы используете пакет: тогда он должен работать нормально, но если вы его не используете, вы получите ту же ошибку, что и в вопросе. ;)
Показать ещё 2 комментария
3

Когда вы переходите туда и обратно между сценариями, иногда может потребоваться выгрузка пакета. Вот простой оператор IF, который предотвратит появление предупреждений, если вы попытаетесь выгрузить пакет, который в настоящий момент не загружен.

if("package:vegan" %in% search()) detach("package:vegan", unload=TRUE) 

Включение этого в начало script может оказаться полезным.

Я надеюсь, что это сделает ваш день!

1

Просто перейдите в окно OUTPUT. затем щелкните значок Packages (он расположен между значками Plot и Help). удалить "галочку/галочку" из пакета, который вы хотите выгрузить.

для uoploud пакет просто помещает отметку "отметьте или отметьте" перед упаковкой или используйте: библиотека (lme4)

  • 0
    Нет, если у вас нет собственного пути к библиотеке. Он не отображается в разделе «Пакеты», поэтому вы должны сделать вышеуказанные методы

Ещё вопросы

Сообщество Overcoder
Наверх
Меню