Почему при использовании install.packages у меня возникают ошибки зависимости при попытке установки пакетов tidyverse?

#r #tidyverse

Вопрос:

По состоянию на 18 ноября 2021 года я скачал все tar.gz файлы, которые tidyverse импортирует/зависит/предлагает. Я работаю над ОС RedHat, и, к сожалению, у меня нет подключения к Интернету к этой машине. У меня есть все эти файлы в папке. Затем я использую эту команду

 install.packages(  # i use setwd() to make my tar.gz directory equal to my current working directory  destdir = ".",   pkgs = c(...), # I list all relevant tar.gz here, e.g. c("foo_tar.gz", "bar_tar.gz")   dependencies = c("Depends", "Imports", "Suggests"),   quiet = FALSE,   repos = NULL  )  

Но я получаю это сообщение об ошибке

 ERROR: dependencies ‘broom’, ‘cli’, ‘crayon’, ‘dbplyr’, ‘dplyr’, ‘dtplyr’, ‘forcats’, ‘googledrive’, ‘googlesheets4’, ‘ggplot2’, ‘haven’, ‘hms’, ‘httr’, ‘jsonlite’, ‘lubridate’, ‘magrittr’, ‘modelr’, ‘pillar’, ‘purrr’, ‘readr’, ‘readxl’, ‘reprex’, ‘rlang’, ‘rstudioapi’, ‘rvest’, ‘stringr’, ‘tibble’, ‘tidyr’, ‘xml2’ are not available for package ‘tidyverse’  

Каждый из этих файлов находится в моем рабочем каталоге. Я использую R версии 3.6, которая совместима с загруженной версией tidyverse. Почему установщик не может найти эти файлы?

Комментарии:

1. Есть ли причина, по которой вы загружаете файлы tar напрямую, а не просто используете install.packages с CRAN?

2. К сожалению, система, которую я использую, не имеет подключения к Интернету. Вот почему я использую этот маршрут.

3. Вы установили те пакеты, которые перечислены в нем, прежде чем пытаться установить tidyverse? К сожалению, зависимости не так легко устраняются системой при установке из локальных файлов

Ответ №1:

Нужно запустить tools::write_PACKAGES перед выполнением install.packages .

Даже несмотря на то, что tar.gz файлы находятся в одной папке, файл ПАКЕТОВ должен быть заполнен для правильного учета зависимостей. В противном случае функция install.packages не знает, как связаны пакеты. Было бы неплохо, если бы это сообщение об ошибке было более конкретным.