[Rd] RFC: "loop connections"

Gabor Grothendieck ggrothendieck at gmail.com
Sun Aug 28 01:38:29 CEST 2005


This may not be entirely on the mark in terms of relevancy but
just in case there is some relevancy I wanted to bring it up.

Just to be concrete, suppose one wants to run the following as 
a concurrent process to R.  (What is does is it implicitly sets x
to zero and then for each line of stdin it adds the first field
of the input to x and prints that to stdout unless the first field is "exit"
in which case it exits.  gawk has an implicit read/process loop
so one does not have to specify the read step.  The fflush()
command just makes sure that output is emitted, rather than
buffered, as it is produced.)

   gawk -f myexample.awk

where myexample.awk contains the single line:

   { if ($1 == "exit") exit else { x += $1; print x; fflush() } }

This has nothing to do with raw data but is prototypical of many
possible situations where one is controlling a remote program
from R and is sending input to it and getting back output with
memory/persistance.

This example is actually the same as
   system("gawk -f myexample.awk", intern = TRUE)
except that it also has memory/persistance whereas the system
call starts up a new instance of gawk each time its called and
so would always start out with x=0 each time rather than
the accumulated sum of past values.

I have not used fifos which I assume could handle this problem
(since they are not yet provided in the Windows version of R which
is what I use) but I was wondering if the application overlaps in any 
way with what is being discussed here.  In particular it would be nice 
to have a read/write "connection" that one writes to in order to provide 
the next line to the gawk process and reads from to get the answer.



More information about the R-devel mailing list