谷歌搜索了几天后没有找到答案,我想我会在这里发布:
我使用read.table从stdin读取时似乎无法解决棘手的R问题。不幸的是,由于我使用的模型/流程,readLines和strsplit的效率太低 - 所以我想尽可能坚持read.table,因为它给了我100倍的加速。
无论如何,这就是我的情况:
inStream = file("stdin","r")
while(TRUE){
data_chunk = tryCatch(read.table(file=inStream,header=FALSE,sep="\t"), error=function(e) NULL)
if(is.null(data_chunk)) break
<Do some R modeling with the chunk of data...>
}
我使用tryCatch检查错误,当它到达流的末尾并停止循环时。
根据read.table的文档,如果你向stdin流提供一个新行或EOF,它应该发出read.table信号停止,然后继续 - 但是如果我尝试连续流(即使是新的流中的行或EOF)它只是挂起等待stdout缓冲区关闭。
有没有办法用read.table执行此操作 - 甚至是使用readLines或更高效的方法?我需要能够在没有巨大性能影响的情况下处理大块的stdin流。任何帮助将不胜感激!