[R] socket server, textConnection and readLines

Krishna Dagli krishna.dagli at gmail.com
Tue Dec 16 17:10:48 CET 2008


This is bit long email but hope someone can guide me.

I have questions regarding socket, readLines and textConnection. I am
not sure if my code is efficient (due to textConnection) and how to
handle client disconnect and restart of the socket server in R.

I have a huge(3.5+G) text file on machine 'A', which I want to process
on machine 'B' using read.table (one line or a chunk at a time). On
machine B, I would like to use NWS and multiple R scripts to process
each line/chunk.

To do this I am running netcat (http://netcat.sourceforge.net/) on
macine 'A' and sending data to machine 'B's R socket server.

Here is the data that I have on machine 'A'

---end data---

Here is the code that I am using for reading this data on machine 'B'.

a.connection <- socketConnection(host = 'localhost', 1234,
                                 server = TRUE,
                                 blocking = TRUE,
                                 open = "r",
                                 encoding = getOption("encoding")
while(1) {
  line.raw <- NULL;
  line.raw <- readLines( a.connection, n = 1, ok = TRUE);
  tConnection <- textConnection(line.raw);
  line.data <- read.table(tConnection);
  if ( (class(line.data) == 'try-error') ||
     (length(line.data) <= 0)) {
    print ("may be client is disconnected! ");
  # validate line.data and store it using
  print (line.data);
---end code---


1) Is there a way to avoid creation and closing of textConnection in
   above code? How can I directly read a line over socket in R?
   If I do not explicitly close the connection I get an warning message
   saying  "closing unused connection 7 (line.raw)".

2) What is the best way to detect that client is disconnected?

3) In C, we can create a socket, bind it but do accept() in side a
   while loop using select() call but how do I do the same in R.

Thanks again for reading such a long email and thanks in advance for
your pointers.

Thanks and Regards

More information about the R-help mailing list