Мне нравится, что R часто обновляется, чтобы дать мне лучшие новые пакеты, но, похоже, это создает проблему для моих R-скриптов в расписаниях cron.
Я заметил, что каждый раз, когда Ubuntu Updater обновляет мой пакет r-base, когда я пытаюсь запустить свои скрипты, он говорит что-то вроде «there is no library(XML)
».
Затем я должен пойти «update.packages("XML")
», чтобы получить новую версию этого пакета, которая совместима с моей новой версией R.
У меня установлено много пакетов, поэтому я довольно регулярно отслеживаю их и выполняю длинные команды, такие как «update.packages(c("XML", "ggplot2", "timeseries"))
».
Когда я забываю сделать это после обновления, все мои скрипты R cron перестают работать.
Есть ли у кого-нибудь хороший рабочий процесс для автоматической проверки пакетов, которые я уже установил, и обновления их при необходимости обновления?
Вы можете добавить вызов install.packages()
в ваш скрипт cron, чтобы он устанавливал все текущие пакеты до того, как запустит остальные ваши задания R cron.
install.packages
берет вектор, так что вы можете даже сохранить файл с пакетами, которые вы хотите установить в другом месте, а затем автоматически загрузить его в ваш скрипт обновления cron.
installed.packages()
возвращает вектор уже установленных пакетов, поэтому вы можете использовать %in%
, чтобы просто вызывать его для пакетов, которые еще не установлены:
desired.packages <- c("plyr","taRifx","ggplot2")
missing.packages <- ! desired.packages %in% installed.packages()[,1]
if( any(missing.packages) ) {
install.packages( desired.packages[missing.packages] )
}
Редактировать: Возможно, лучшее решение
Согласно предложению @ JoshuaUlrich в чате :
Поместите это в свой .Rprofile.
local({
.libPaths("/home/evilgenius/R/library")
})
Тогда вы сможете запустить update.packages()
после того, как Ubuntu уничтожит все, и монархия будет восстановлена.
Это решение требует большей осторожности, чтобы пакеты, которые не работают с текущей версией R, не переносились.