2012-04-09 112 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