Автоматизация генерации вывода модели в 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.

Другие вопросы по тегам