2012-04-09 117 views
1

我有一个r函数,我希望在每个预定义的时间间隔(例如,每5分钟后)自动运行它(调度) 如果是,那么可以如何实现。在每个特定时间间隔后调度r函数

+1

在函数结尾的Sys.sleep()函数就像@DavidHefferman所显示的那样是你想要的。以下是每60秒运行一次的简单函数的示例:http://stackoverflow.com/a/9950670/1036500 – Ben 2012-04-09 08:17:37

+2

@Ben该函数不会每60秒运行一次。它在完成后60秒重新开始。如果需要2秒钟运行,那么它每62秒运行一次。无论如何,这是一个非常小的观点,但我只是那样迂腐! ;-) – 2012-04-09 08:36:52

+0

@DavidHefferman,谢谢你的更正! – Ben 2012-04-09 15:15:03

回答

10

理想情况下,您应该使用以下系统调度程序:Unix系统上的cron或Windows系统上的计划任务。

可能有一些要求,这意味着你不能为每个函数的调用产生一个新的进程。如果是这样,那么使用调用Sys.sleep()的无限循环等待下一次调用到期。

repeat { 
    startTime <- Sys.time() 
    runFunction() 
    sleepTime <- startTime + 5*60 - Sys.time() 
    if (sleepTime > 0) 
     Sys.sleep(sleepTime) 
} 
+1

即使这可能会以微秒关闭 - 退出Sys.sleep所需的时间,返回顶部并计算startTime :-)。我们当中真正的A-C可以在循环之前计算'initTime <-Sys.time()',并在循环中每次增加300(然后将'initTime'与'Sys.time'比较)。 – 2012-04-09 11:21:39

+0

@carl也许是这样,但我敢打赌,即使R迟钝,Sys.time()的分辨率较粗糙,然后从Sys.sleep返回并返回到循环的开始时间。 ;-) – 2012-04-09 11:27:18