Автоматизация генерации вывода модели в R
У меня есть список команд R, которые сначала получают данные из базы данных SQL через RODBC, вычисляют вычисляемые поля, а затем применяют регрессионную модель (назначенную как "objModel" в моей среде R) к данным. Окончательный вывод - файл csv с двумя столбцами (идентификаторы контактов, Probability_Score). Как я могу использовать Rscript для автоматизации процесса запуска скрипта и ежедневного получения свежего CSV-файла? Должен ли R работать все время? Я работаю в среде Windows. У меня нет опыта работы с Rscript. Любая дополнительная деталь в вашем ответе высоко ценится.
1 ответ
В этом вопросе есть несколько неопределенных условий, которые появились в комментариях и в чате:
1. Постоянство объекта
objModel
это модель размером ~90 МБ, построенная с течением времени, с большим количеством данных, которые не нужно каждый раз перестраивать.
Исходя из этого, ваша первая задача - сделать эти данные постоянными в разных сеансах R. Это легче всего сделать просто save
а также load
, В текущем сеансе:
save(objModel, func1, func2, file="objModel.Rdata") # assuming a relevant directory
Это предполагает, что это единственные зависимые объекты в вашей среде, на которые опирается скрипт. (Это может занять произвольное количество объектов, поэтому добавляйте по мере необходимости.)
Ваш автономный скрипт должен быть примерно таким (как я буду называть myscript.R
потом):
# library(...) as necessary
load("objModel.Rdata")
# now have objModel, func1, func2 in your environment
# ...
# do your RODBC magic
# then your regression/prediction magic
# ...
write.csv(newresults, file="output.csv", header=......)
Трюки для кода:
- Никогда не предполагайте человеческого взаимодействия.
- Вы помните, чтобы сохранить / загрузить или воссоздать все необходимые переменные? Легко забыть о переменной в вашей текущей среде, на которую опирается скрипт, и которая не будет доступна в ванильной среде Rscript.
- Планируете что-нибудь? использование
png
,pdf
или что-то еще, чтобы сохранить непосредственно в файл (ы) изображения. - Рассмотрим обработку исключений (
tryCatch
Если у вас есть важные шаги. - Независимо от этого, вы должны иметь простую проверку ("утверждение") на достоверность результатов, прежде чем записывать их в выходной файл, независимо от того, переписываете ли вы что-то или нет. Это может быть просто как
if (! is.null(...))
или жеif (length(...))
,
2. Автоматизация
Теперь ваш актуальный вопрос вступает в игру: как автоматизировать это для ежедневного выполнения без присмотра. Даже не смотрите на расписание cron или windows, пока вы не сможете сделать это успешно из нового командного окна.
То есть вы можете запустить Rscript /path/to/myscript.R
и успешно ли он работает? Возможно, вам придется либо принудительно использовать текущий рабочий каталог, используя setwd(...)
или используйте абсолютные пути в вашем load
а также write.csv
вызовы функций. Я склонен полагать, что планировщик будет запускать вещи из другого каталога, поэтому я использую его так или иначе.
Как только это сработает удовлетворительно (проверили ли вы выходной CSV, чтобы убедиться, что он выглядит правильно?), Только теперь вы должны подумать об автоматизации.
3. Автоматизация, на этот раз по-настоящему.
Если вы работаете в unixy ОС (вы никогда не указывали), посмотрите на cron. Возможно что-то вроде:
17 04 * * * /usr/bin/Rscript /path/to/myscript.R
который будет выполнять команду ежедневно в 4:17 утра.
Если на окнах @ комментарий @MrFlick уместен: /questions/13482113/planirovanie-stsenariya-r.