我有一个持续的过程来收集数据,我想写每小时收集的数据。简单地说,如何每小时有条件地将数据保存到.Rdata文件中。
对于上下文,我收集列表中的数据,希望将列表对象保存到每小时文件,删除列表,然后重建它。
我尝试了下面的代码,但它不起作用:
if (identical(format(Sys.time(), "%M:%S"), "00:00")) {
save(twt, file=fname_r)
}
非常感谢任何帮助。
答案 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。所以你需要一些方法来检查数据对象是否完整,然后保存它。