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

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

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

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

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

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


person Btibert3    schedule 12.01.2012    source источник


Ответы (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
}
person Dirk Eddelbuettel    schedule 12.01.2012
comment
Привет, Дирк, спасибо за участие. В конце концов я точно хочу заняться планированием сценария, но, будучи новичком в написании сценариев, R и Ubuntu, я пытаюсь атаковать это хакерским способом, который я могу отлаживать. Я заинтересован в том, чтобы скрипт работал постоянно и сохранял объекты данных почасовыми порциями. Любой код будет очень признателен. Лучший. - person Btibert3; 13.01.2012
comment
Отлично, я не подумал о привязке к дате, спасибо. - person Btibert3; 13.01.2012

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

person Greg Snow    schedule 12.01.2012
comment
Это отличный ответ, полезный для всех видов вещей. - person Iterator; 08.02.2012