R пытается установить старые недоступные пакеты из Artifactory - PullRequest
0 голосов
/ 26 января 2020

Решение

Удалите .RDS в кэше Artifactory.


Проблема

У меня очень странная проблема с использованием R 3.6.2 в Ubuntu и корпоративное зеркало CRAN. Допустим, я запускаю следующую команду:

install.packages('rlang')

В ответ я получаю, что версию 0.4.2 не удалось найти. Когда я смотрю в хранилище вручную, я обнаруживаю, что 0.4.2 действительно не существует, но 0.4.3 существует. Сначала я подумал, что что-то не так с файлом PACKAGES, в котором хранилище хранит индекс. Но я изучил его, и он указывает на правильную и доступную версию rlang.

Откуда R получает номер версии, который он вставляет в URL запроса при выполнении install.packages()?

Обновления

Я попробовал install.packages("http://private.com/src/contrib/rlang_0.4.3.tar.gz", repos=NULL), и это работает. Далее я попытаюсь повторить проблему в новой среде Ubuntu. Может быть, я запутался при установке R и обновлении до 3.6.2


При переходе на R версии 3.4.4 проблема не устранена. Может быть, это как-то связано с корпоративным зеркалом? Я попробую официальный.


Благодаря Диркс ответ Я обнаружил с available.packages(), что что-то не так с зеркалом, а не с установкой R.

> AP <- available.packages()
> res <- AP[ AP[,1] == "rlang", ]
> str(res)
 Named chr [1:17] "rlang" "0.4.2" NA "R (>= 3.2.0)" NA NA ...
 - attr(*, "names")= chr [1:17] "Package" "Version" "Priority" "Depends" ...

Поскольку читаемая версия PACKAGES в зеркале содержит 0.4.3, я предполагаю, что PACKAGES.rds виноват. Далее я попытаюсь прочитать в этом объекте, чтобы подтвердить мое предположение.


Дирк рекомендовал мне проверить временные метки индексов, и я думаю, что нашел проблему. 0.4.3 был выпущен в короткое время go. В то время как читаемый индекс был обновлен лишь немногими go, файл .rds (вероятно, используемый R) не обновлялся с 2020-01-16. И поэтому R пытается загрузить версию, которая больше не является частью репозитория.

Теперь мне интересно, кто отвечает за обновление файла RDS? Сам репозиторий? Я сообщу в следующий раз ... Возможно, проблема решится сама собой после того, как случайное пакетное задание обновит репозиторий.

Пакет rlang: Rlang package

Метки времени: Different timestamps

Содержимое ПАКЕТОВ: PACKAGES content


Я вручную загрузил PACKAGES.rds и использовал readRDS() на это. Это указывает на старую версию. Я также проверил репо с зеркальным отображением. Его PACKAGES.rds указывает на правильную версию. Кроме того, я позаботился о том, чтобы проблема сохранялась независимо от используемого дистрибутива и образа.

Ответы [ 2 ]

2 голосов
/ 26 января 2020

Вы можете задать R этот самый вопрос! Функция available.packages() сообщает вам «все», что она знает, и одна запись - «Репозиторий».

Итак:

R> AP <- available.packages()       ## all known packages given options("repos")
R> res <- AP[ AP[,1] == "rlang", ]  ## find rlang
R>
R> str(res)
 Named chr [1:17] "rlang" "0.4.3" NA "R (>= 3.2.0)" NA NA ...
 - attr(*, "names")= chr [1:17] "Package" "Version" "Priority" "Depends" ...
R> 
R> names(res)
 [1] "Package"               "Version"              
 [3] "Priority"              "Depends"              
 [5] "Imports"               "LinkingTo"            
 [7] "Suggests"              "Enhances"             
 [9] "License"               "License_is_FOSS"      
[11] "License_restricts_use" "OS_type"              
[13] "Archs"                 "MD5sum"               
[15] "NeedsCompilation"      "File"                 
[17] "Repository"           
R> 
R> res["Repository"]
                               Repository 
"https://cloud.r-project.org/src/contrib" 
R> 

Здесь нет ничего удивительного, поскольку это хранилище по умолчанию для используемой конфигурации по умолчанию (и кодируется в пакете Debian / Ubuntu).

1 голос
/ 26 января 2020

если вы сделаете

?install.packages()

, это даст вам некоторую информацию о функции, которая выполняет поиск, есть аргумент «репо», который вы можете ввести. В большинстве случаев, если у меня возникают проблемы с установкой пакета, и я не беспокоюсь о точных версиях, работающих под управлением:

install.packages("rlang", dependencies = TRUE)

обычно мне хорошо

...