Каково поведение install.packages, если указано несколько репо? - PullRequest
4 голосов
/ 11 октября 2019

Из документации не понятно, как себя вести, если в install.packages указано несколько репозиториев. Интуиция подсказала мне, что он попробует первый репозиторий, а если пакет не найден, он попробует второй, и так далее. К сожалению, это не так. Я вижу, что пробуется только первое, и возвращается ошибка (потому что репозиторий не содержит пакет). Также отсутствует ясность того, как обрабатывается запись «CRAN» по сравнению с другой записью.

Я хочу иметь локальный CRAN с моими собственными пакетами (указывается первым) и глобальный CRAN сбольшие наборы пакетов (указывается второй) и возможность установки из локальной системы, если пакет не найден (и в этом случае он вернется к глобальному)

Вот ошибка, которую я получаю

> setRepositories(graphics = FALSE, ind=NULL, addURLs=c(ciccio="file:qs-cran", CRAN="https://mran.microsoft.com/snapshot/2018-08-01"))
> install.packages("zizzio")
Error in read.dcf(file = tmpf) : cannot open the connection
In addition: Warning messages:
1: package ‘zizzio’ is not available (for R version 3.5.3) 
2: In read.dcf(file = tmpf) :
  cannot open compressed file 'qs-cran/bin/macosx/el-capitan/contrib/3.5/PACKAGES', probable reason 'No such file or directory'
> install.packages("zizzio", type="source")
Warning message:
package ‘zizzio’ is not available (for R version 3.5.3) 

1 Ответ

0 голосов
/ 11 октября 2019

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

Официальное руководство «Установка и администрирование R» описывает, что необходимодля репозитория .

Вы можете создать файл PACKAGES с:

tools::write_PACKAGES(
  "qs-cran/bin/macosx/el-capitan/contrib/3.5",
  type = "mac.binary"
)

После этого ваш репозиторий должен выглядеть следующим образом:

qs-cran/
└ bin/macosx/el-capitan/contrib/3.5/
    ├ PACKAGES
    └ zizzio_1.0.0.zip

С этого момента при каждом добавлении, изменении или удалении пакета используйте:

tools::update_PACKAGES(
  "qs-cran/bin/macosx/el-capitan/contrib/3.5",
  type = "mac.binary"
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...