rshellpipe

Piping stdin to R


I am having trouble piping stdin to an R script.

Here is my toy script test.R:

#!/usr/bin/env Rscript
while(length(line <- readLines('stdin', n=1, warn=FALSE)) > 0) {
  write(line, stderr())
  # process line
}

I'd like to go through each line and do some processing. Here is my input file named input:

aaaaaa
bbbbbb
cccccc
dddddd
eeeeee
ffffff

If I do

cat input | test.R

I only get:

aaaaaa

Is there anything that I missed?


Solution

  • This does not happen if you explicitly open the stdin connection.

    #!/usr/bin/env Rscript
    f <- file("stdin")
    open(f)
    while(length(line <- readLines(f,n=1)) > 0) {
      write(line, stderr())
      # process line
    }