Dear All, On Tue, Feb 01, 2005 at 07:50:17PM +0000, Jan T. Kim wrote: > On Tue, Feb 01, 2005 at 01:44:37PM +0000, Prof Brian Ripley wrote:
> > If we only had to consider standard Unices, pipe() would allow read-write > > modes. As it is, it is easy for you to write an OS-specific extension. I've looked into this and tried to write a function that would start an external process and return two connections, one for writing to the external process and one for reading from it. Unfortunately, I haven't found a way to implement this in a package, without altering the R source code itself (details below). As an alternative / workaround, I coded up a function xpipe(cmd, input) that takes a command to start the external process (cmd) and a character containing the lines to be written (input), and returns a character vector containing the output produced by the external process. The xpipe package is available at http://www2.cmp.uea.ac.uk/~jtk/software/xpipe_0.0-1.tar.gz To an extent, this provides the functionality I was looking for, but it is not satisfactory because the output cannot be processed by R on line -- xpipe accumulates the entire output and returns it only after the external process has terminated. Also technically, it's cumbersome to use: For obtaining something else than a character value, it seems one has to write the output into an anonymous file and then use scan, read.table or whatever to read from that file. Therefore, I still look for a way to implement the design where the pipe ends are returned as R connections. The problem in doing so is that connections are stored in a static Rconnection Connections[NCONNECTIONS]; (file src/main/connections.c), and I cannot find any function that provides an interface for allocating a slot in the Connections array and storing a connection set up by a the code in my package there. There is a non-static (i.e. externally visible) NextConnection function (which is not declared in any header, though), and nothing like Rboolean setConnection(int connNumber, Rconnection *conn); Rconnection *getConnection(int connNumber); I haven't found any relevant documentation on these issues (R-exts doesn't have any info on handling connections in C code at all). Can any of you direct me to such docs, or point out how I can instantiate and return connections from within a package? > Well, that is probably reasonably easy, but (not the least due to that > fact) I'm still surprised that it has not been done already. I can hardly > imagine that I'm the first one to want to use some external utility from > an R program in this way. > > So, what do you R-devel folks do in this case, and what would you > recommend? I'm still curious about this one. If there really is no way of running stuff through external filter processes in R, I'd volunteer to add that. Best regards & thanks in advance, Jan -- +- Jan T. Kim -------------------------------------------------------+ | *NEW* email: [EMAIL PROTECTED] | | *NEW* WWW: http://www.cmp.uea.ac.uk/people/jtk | *-----=< hierarchical systems are for files, not for humans >=-----* ______________________________________________ R-devel@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-devel