Не удается заставить read.table работать с stdin без закрытия буфера

#r #stream #stdout #stdin #read.table

#r #поток #стандартный вывод #stdin #read.table

Вопрос:

После нескольких дней поиска в Google и не найдя ответа, я решил опубликовать его здесь:

У меня сложная проблема с R, которую я, похоже, не могу решить при чтении из stdin с помощью read.table. К сожалению, из-за модели / процесса, которые я использую, строки чтения и 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, если вы добавляете новую строку или EOF в поток stdin, это должно сигнализировать read.table об остановке и продолжении — однако, если я попробую непрерывный поток (даже с новыми строками или EOF в потоке), он просто зависает в ожиданиибуфер стандартного вывода для закрытия.

Есть ли способ сделать это с помощью read.table — или даже более эффективный способ использовать строки чтения или что-то в этом роде? Мне нужно иметь возможность обрабатывать поток stdin большими порциями без значительного снижения производительности. Любая помощь будет с благодарностью!