在没有关闭缓冲区的情况下无法获得read.table来使用stdin

时间:2014-06-27 21:02:57

标签: r stream stdout stdin read.table

谷歌搜索了几天后没有找到答案,我想我会在这里发布:

我使用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流。任何帮助将不胜感激!

0 个答案:

没有答案