Библиотека 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, на который я ссылаюсь в начале.

Другие вопросы по тегам