Я работаю над новым проектом, в котором есть код R с множеством зависимостей и определенная версия R (3.1.1). Когда они изначально писали код, они использовали install.package('the-package')
R для загрузки самой последней версии, однако теперь многие зависимости имеют новые версии, которые делают их несовместимыми с используемой версией R (самые новые версии некоторых пакетов, например dplyr, rcpp, потребуют Обновление R, которое невозможно)
Судя по этому опыту, у R кажется, что у него худший менеджер пакетов — я исхожу из NPM, где вы указываете каждый пакет и конкретную версию необходимого пакета. Разрешить эти зависимости вручную — огромная проблема (уходит более 5 часов), потому что, по-видимому, поведение по умолчанию — всегда загружать последнюю версию любого пакета. До сих пор я был относительно успешным, щелкнув ссылку «старые источники» на странице CRAN для пакета, загрузив tar-файлы, а затем установив их ... Но это кажется ненужной болью. Член моей команды подписался на это руководство, чтобы получить список всех зависимостей и версий, которые мне нужны (это, по крайней мере, дает мне возможность установить все пакеты заранее, а затем продолжить методом проб и ошибок, а не разрешать более 50 зависимостей по отдельности для каждой время, когда сборка завершается сбоем в моей новой среде).. но нет команды «R, обработать мой файл зависимостей».
- Javascript — вы используете NPM для установки из package.json.
- Python - вы можете сделать
pip freeze
иpip install pip_freeze.txt
, та же концепция - R - насколько я могу судить, нет простого способа загрузить именно то, что вам нужно, если у вас есть особые потребности, как у меня.
Это сценарий оболочки, который легко изменить для загрузки определенной версии пакета.
#!/bin/bash
# CRAN doesn't have a version of this installable in our old R.
wget -P /tmp https://cran.r-project.org/src/contrib/Archive/Rcpp/Rcpp_0.12.5.tar.gz || { echo 'wget failed'; exit 1; }
Rscript -e "install.packages('/tmp/Rcpp_0.12.5.tar.gz', repos = NULL, type='source')" 2>&1 | tee -a rPkgInstall.log
if egrep "non-zero exit status|Error in install.packages|^package .* is not available" rPkgInstall.log; then
echo 'FAILED';
exit 1;
fi
Как я могу упростить этот процесс для следующего человека, который присоединится к команде? Документация может иметь большое значение, но то, что я ищу, - это функциональный менеджер пакетов в R... Или соглашение, которое позволяет мне делать то же самое, что и NPM install (from a package.json)
в R.