Rom*_*rik 17 monitoring r real-time
我有一个程序监视某些文件的变化.文件一旦更新,就会处理该文件.到目前为止,我已经提出了在R中进行"实时分析"的一般方法.我希望你们有其他方法.也许我们可以讨论他们的优点/缺点.
monitor <- TRUE
start.state <- file.info$mtime # modification time of the file when initiating
while(monitor) {
change.state <- file.info$mtime
if(start.state < change.state) {
#process
} else {
print("Nothing new.")
}
Sys.sleep(sleep.time)
}
Run Code Online (Sandbox Code Playgroud)
与使用系统API的建议类似,这也可以使用qtbase(https://r-forge.r-project.org/R/?group_id=454)来完成,这将是R内部的跨平台方式. :
dir_to_watch <- "/tmp"
library(qtbase)
fsw <- Qt$QFileSystemWatcher()
fsw$addPath(dir_to_watch)
id <- qconnect(fsw, "directoryChanged", function(path) {
message(sprintf("directory %s has changed", path))
})
cat("abc", file="/tmp/deleteme.txt")
Run Code Online (Sandbox Code Playgroud)
如果您的系统提供用于监视文件系统更改的API,那么您应该使用它.我相信Mac有这个.但不确定其他平台.
编辑:快速goog给了我:
Linux - http://wiki.linuxquestions.org/wiki/FAM
Win32 - http://msdn.microsoft.com/en-us/library/aa364417(VS.85).aspx
显然,这些API将消除您需要的任何轮询.另一方面,他们可能并不总是可用.
Java有这个:http://jnotify.sourceforge.net/和http://java.sun.com/developer/technicalArticles/javase/nio/#6
我有一个黑客的想法:您可以设置CRON作业/计划任务每n秒(或其他)运行R脚本.R脚本检查文件哈希值,如果哈希值不匹配,则运行分析.您可以使用digest::digest功能,只需查看手册.