Библиотека Packrat не может быть скопирована после удаления пакета
Прежде всего, я осознаю, что моя боль полностью причинена самому себе.
При перемещении определенных пакетов в external.packages
вариант, я сначала удалил их из пакета используя remove.packages()
скорее, чем packrat::clean()
как рекомендовано здесь автором пакета.
Код в проекте работает просто отлично (поскольку внешние пакеты правильно загружаются в сеансе), но с тех пор невозможно было обновить библиотеку. Если я пытаюсь сделать снимок, я получаю следующую ошибку
Error: Unable to retrieve package records for the following packages:
- "knitr", "rmarkdown"
Я попытался переустановить пакеты заново и упаковать обратно в меня
Warning in install.packages :
packages ‘knitr’, ‘rmarkdown’ are in use and will not be installed
Итак, я попытался вызвать правильную функцию с clean(c('knitr', 'rmarkdown'), force = TRUE)
и до сих пор нет выхода, как я получил это сообщение
Error in find.package(pkgs, lib) :
there are no packages called ‘knitr’, ‘rmarkdown’
Я попытался проверить, существуют ли пакеты физически в библиотеке packrat, и они есть!
> .libPaths()
[1] "C:/Users/Admn/Documents/.../cct/packrat/lib/x86_64-w64-mingw32/3.5.1"
[2] "C:/Users/Admn/Documents/.../cct/packrat/lib-ext/x86_64-w64-mingw32/3.5.1"
[3] "C:/Users/Admn/Documents/.../cct/packrat/lib-R/x86_64-w64-mingw32/3.5.1"
> c('knitr', 'rmarkdown') %in% .packages(all.available = TRUE)
[1] TRUE TRUE
> c('knitr', 'rmarkdown') %in%
list.dirs(.libPaths()[2], full.names = FALSE, recursive = FALSE)
[1] TRUE TRUE
Я серьезно соблазняюсь вручную вытащить две папки из каталога библиотеки с помощью unlink()
, но я подозреваю, что я мог бы создать больше проблем.
Если этого можно избежать, я не хочу переустанавливать всю библиотеку packrat - все 500 МБ - учитывая, что у меня есть доступ к мучительно медленному и дорогому интернету. Кто-нибудь знает выход из этого беспорядка?
0 ответов
Похоже, та же проблема здесь. Скорее всего, у вас есть пакет, который зависит от knitr
и / или rmarkdown
, Не похоже, что есть решение этой проблемы, когда используются внешние пакеты.
Я попытался переустановить пакеты заново и упаковать обратно в меня...
Вы делали это в том же сеансе, где у вас есть packrat packrat::on()
? В этом случае ваш .libPaths()
были изменены, и внешние пакеты
... загружается из пользовательской библиотеки при входе в режим packrat
до .libPaths()
изменено Например, я получаю следующее в проекте, который у меня есть
packrat::get_opts("external.packages")
#R [1] "BH"
"BH" %in% .packages(all.available = TRUE)
#R [1] TRUE
"BH" %in% list.dirs(.libPaths()[1], # notice the one
full.names = FALSE, recursive = FALSE)
#R [1] FALSE
.libPaths()
#R [1] "/My/Path/To/My-project/packrat/lib/x86_64-w64-mingw32/3.5.1"
#R [2] "/My/Path/To/My-project/packrat/lib-ext/x86_64-w64-mingw32/3.5.1"
#R [3] "/My/Path/To/My-project/packrat/lib-R/x86_64-w64-mingw32/3.5.1"
packrat::off()
.libPaths()
#R [1] "/My/Path/To/R/win-library/3.5"
#R [2] "C:/Program Files/R/R-3.5.1/library"
"BH" %in% list.dirs(.libPaths()[1], # notice the one
full.names = FALSE, recursive = FALSE)
#R [1] TRUE
где я отключаю пакет, чтобы вернуться в свою пользовательскую библиотеку, где я смогу удалить BH
с remove.packages
с тех пор как help("remove-packages")
lib
символьный вектор, дающий директории библиотеки для удаления пакетов. Если отсутствует, по умолчанию используется первый элемент в.libPaths()
,
Я не смог бы сделать это с packrat::clean
так как значение по умолчанию для аргумента lib.loc
является
packrat:::libDir(NULL)
#R [1] "/My/Path/To/My-project/packrat/lib/x86_64-w64-mingw32/3.5.1"
Обновить
Проблема может быть решена infer.dependencies
аргументы packrat::snapshot
как показано в выпуске Github, на который я ссылаюсь в начале.