在R控制檯中工作時,我想設置一個後臺任務來監視特定的連接,並在事件發生時執行另一個函數(警報)。另外,我可以進行設置,以便外部函數只是向R發送一個警報,但這似乎是同樣的問題:有必要設置一個偵聽器。R控制檯是否可以支持後臺任務或中斷(事件處理)?
我可以在R的專用工藝做到這一點,但我不知道這是可行的,從一個控制檯中。另外,如果它正在計算一個函數,我不打算中斷R,但是如果控制檯僅僅是等待輸入,就會提醒或中斷。
這裏有三個用例:
最簡單的例子是看文件。假設我有一個名爲「latestData.csv」的文件,我想監視它的更改;當它改變時,執行
myAlert()
。 (可以擴展它做不同的事情,但只是彈出一個文件已經改變的說明是有用的。)一種不同類型的監視器會監視給定的機器是否在RAM上運行低並且可能執行
save.image()
並終止。再次,這可能是一個簡單的問題,觀看由外部監視器產生的文件,該文件可以保存top
或其他命令的輸出。一個不同的例子是像另一個最近SO問題,約:have R halt the EC2 machine it's running on。如果來自另一臺機器或進程的警報告訴程序保存終止,則能夠聽取該警報會很好。
此刻,我懷疑有處理這兩種方式:通過Rserve並可能通過fork
。如果有人有例子說明如何使用包或者通過其他方法來做到這一點,那就太好了。我認爲解決這三個用例中的任何一個都可以解決所有這些問題,以一些外部代碼爲模。
注1:我知道,per this answer to another SO question R是單線程的,這就是爲什麼我懷疑fork
和Rserve可能工作。但是,如果與R終端連接,我不確定可行性。儘管R的REPL被連接到控制檯的輸入,但我試圖繞過這個或者模仿它,這就是fork
或Rserve
可能的答案。
注2:對於那些熟悉事件處理/事件的方法,這將解決一切,太。我只是沒有發現這事在R.
更新1:我發現,手冊編寫R附加has a section referencing event handling,其中提到使用R_PolledEvents
。這看起來有希望。
你能澄清你的第二段嗎?我很高興能夠定期檢查一個狀態。對於tcl/tk和gtk的建議+1。我一定會看'triggr',看看我能否適應它或想法。 – Iterator
我看了'triggr',但我想我需要看看tcl/tk或gtk方法,正如你所建議的那樣。 – Iterator