Сохраняйте файл в R каждый час

У меня есть непрерывный процесс сбора данных, и я хочу записывать данные, которые собирались каждый час. Просто, как я могу условно сохранять данные каждый час в файл.Rdata.

Для контекста я собираю данные в список, хочу сохранить объект списка в почасовом файле, удалить список и перестроить его.

Я попробовал код ниже, но он не работал:

 if (identical(format(Sys.time(), "%M:%S"), "00:00")) {
      save(twt, file=fname_r)
 }

Любая помощь будет высоко ценится.

2 ответа

Решение

Вы можете поступить об этом неправильно. Не все является работой для R (учитывая, что R действительно однопоточный), и планирование всегда было ключевой задачей операционной системы. использование cronили если вы работаете на этой лидирующей на рынке ОС с северо-запада, изучите варианты ее планирования. Затем настройте тривиальный файл Rscript.

Запустите непрерывный процесс сбора для сбора и выгрузки результатов куда-либо, либо в ascii, либо в двоичный файл. Затем почасовая работа по сбору самых последних свалок. Это можно сделать в R, как только вы выясните расписание.

Что касается более узкого вопроса о том, прошел ли час, используйте что-то вроде

then <- Sys.time()
# ... stuff happens ...
now <- Sys.time()
if (as.numeric(difftime(now, then, unit="mins") > 60) {
   # .. do stuff
}

Чтобы сделать планирование в R Вы могли бы использовать tclTaskSchedule функция в tcltk2 пакет. Вы говорите ему, как долго ждать между выполнением задач, заданием на выполнение (выражение / функция) и повторением задачи, затем в фоновом режиме она будет запускать задачу на регулярной основе. Только будьте осторожны, чтобы у вас не было двух процессов, мешающих друг другу. Если ваша задача сохранения объекта выполняется одновременно с обновлением того же объекта, то есть вероятность, что будет сохранена только часть объекта или что то, что было сохранено, является гигантским. Поэтому вам нужно каким-то образом проверить, завершен ли объект данных, прежде чем сохранить его.

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