[R] reading fifo with read.table hangs

Mads Jeppe Tarp-Johansen s02mjtj at math.ku.dk
Wed Jan 13 15:21:21 CET 2010


To R-helpers,

Running
   R version 2.10.0 (2009-10-26)
   Linux ... 2.6.25.20-0.5-default #1 SMP 2009-08-14 01:48:11 +0200 x86_64 x86_64 x86_64 GNU/Linux
   openSUSE 11.0 (X86-64)
and having difficulties reading a fifo from within R.

A short example that I find simply haning is shown as 'SHORT SCRIPT' 
below. I expected R to print a data set read from the fifo with the 
numbers 0,1,...7 and then gracefully exit. Any ideas why not?

A longer script that actually does the job in its 2nd clause is shown in 
'LONG SCRIPT' below ... I'm confused that the open call is needed. Any 
comments on this?

Regards MJ

--- SHORT SCRIPT BEGIN
#!/bin/bash

mkfifo chops
gawk 'BEGIN {for (i=0;i<8;i++){print i}}' > chops &

R --slave --no-save <<EOF
print ("Hello from R")
con.data <- read.table ("chops")
con.data
EOF

unlink chops
--- SHORT SCRIPT END


--- LONG SCRIPT BEGIN
#!/bin/bash

DO_1st=no
DO_2nd=yes
DO_3rd=yes

# 1 Hoped for this to work but fails
if [[ $DO_1st =~ [yY][eE][sS] ]] ; then

   echo "With R 1"
   mkfifo chops
   gawk 'BEGIN {for (i=0;i<8;i++){print i}}' > chops &

   R --slave --no-save <<EOF
print ("Hello from R 1")
con.data <- read.table ("chops")
con.data
EOF
   unlink chops

fi

# 2 Works but with an unexpected open call
if [[ $DO_2nd =~ [yY][eE][sS] ]] ; then

   echo "With R 2"
   mkfifo chops
   gawk 'BEGIN {for (i=0;i<8;i++){print i}}' > chops &

   R --slave --no-save <<EOF
print ("Hello from R 2")
theFifo <- fifo(description="chops", open="read")
open(theFifo)  # without this read.table raises error of no lines available
con.data <- read.table (theFifo)
close(theFifo)
con.data
EOF
   unlink chops

fi

# 3 Works - just for reference
if [[ $DO_3rd =~ [yY][eE][sS] ]] ; then

   echo "With cat"
   mkfifo chops
   gawk 'BEGIN {for (i=0;i<8;i++){print i}}' > chops &
   cat chops
   unlink chops

fi
--- LONG SCRIPT END



More information about the R-help mailing list