每小时在R中保存一个文件

时间:2012-01-12 20:11:52

标签: r save

我有一个持续的过程来收集数据,我想写每小时收集的数据。简单地说,如何每小时有条件地将数据保存到.Rdata文件中。

对于上下文,我收集列表中的数据,希望将列表对象保存到每小时文件,删除列表,然后重建它。

我尝试了下面的代码,但它不起作用:

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:5)

你可能会以错误的方式解决这个问题。并非一切都是R的工作(假设R确实是单线程的),并且调度一直是关键的操作系统任务。使用cron,或者如果您使用的是来自西北航空的市场领先操作系统,请查看其计划选项。然后设置一个简单的Rscript文件。

让连续收集进程运行以收集,并在ascii或binary中转储结果。然后每小时工作收集最近的转储。一旦你确定了调度,就可以在R中完成。

关于决定是否过了一个小时的较窄问题,请使用类似

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

答案 1 :(得分:5)

要在R中进行计划,您可以使用tclTaskSchedule包中的tcltk2功能。你告诉它如何在运行任务,运行任务(表达式/函数)和重做任务之间等待,然后在后台它将定期运行任务。请注意,您没有2个进程互相干扰。如果保存对象的任务在其他东西正在更新同一对象的同时运行,则有可能只保存对象的一部分或保存的内容是giberish。所以你需要一些方法来检查数据对象是否完整,然后保存它。