An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20090204/c6d29136/attachment-0001.pl>
Passing data among multiple instances
6 messages · Warren Young, Feng Li, Andy Zhu +1 more
Feng Li wrote:
I have two R instances running at the same time,
On the same computer, or on different computers? Is the number of Rs likely to change, or will it always be just the two? Is this a simple one-off problem, or are you breaking the problem up into pieces so you can throw lots of hardware at it?
Is there a simpler way to pass the data in A to B?
Perhaps the simplest option is to write the data structure to a file, using any of the several R ways to do that. When instance 2 sees that a file is available, it slurps its contents in and works on it. The hard part is making the second instance wait until the whole file is written out by the first. You wouldn't want it to read in half the file then hit the end because the first process hasn't finished writing out the file. I don't see any good mechanism in R to fix this. A more robust option is to use sockets. This is suitable even within a single machine. See ?make.socket. This solves the "how do I know when I've got the full data structure problem" because the second process can just keep reading until it gets an error indicating that the remote peer closed the connection. Once you have the data structure in string form, you can eval() it to get an R object suitable for munching on. Figuring out how to pass the data might be the hardest part. deparse() might be the easiest way. If you're hoping to scale this up to lots of processes, look into Rmpi. This provides a very clean way for an R program on one computer to start slaves on other computers and then pass data to them in native R structures. Setting up MPI itself is not trivial, however. It's best when you already have a cluster of computers linked with MPI.
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20090204/b4545870/attachment-0001.pl>
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20090204/83381443/attachment-0001.pl>
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20090204/a08f2188/attachment-0001.pl>
Look at the nws package, it has tools for passing data among multiple instances of R (and waiting for data to be ready). There are other packages that provide some of the same, but from what I remember, nws was fairly simple to set up on a single computer. Hope this helps,
Gregory (Greg) L. Snow Ph.D.
Statistical Data Center
Intermountain Healthcare
greg.snow at imail.org
801.408.8111
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of Feng Li
> Sent: Wednesday, February 04, 2009 7:08 AM
> To: r-help at r-project.org
> Subject: [R] Passing data among multiple instances
>
> Dear R,
>
> I have two R instances running at the same time, say instance A and
> instance
> B. Is there a simpler way to pass the data in A to B?
>
> More precise, I have a stupid example:
>
> In instance A, I am running a function "test1"
>
> test1 <- function (x1)
> {
> x2 <- sin(x1)
> return(x2)
> }
>
> In instance B, another function "test2"
>
> test2 <- function (x2)
> {
> x3 <- cos(x2)
> return(x3)
> }
>
> where " test2" receives the input from "test1"'s rueslt. "test1" and
> "test2" could be much more complex. They may take one minute each.
>
> Now the whole procedure is instance A is running, while instance B is
> waiting for the result of instance A. Once instance A is done (instance
> A
> goes to run with new data), instance B should detect A is done, and
> instance
> B receives the parameter from instance A. B begins to work. While B is
> done,
> waiting for A's new results.
>
> I want to repeat the loop many times and get x3 in the end.
>
>
> Is it possible to do this job? Thanks !
>
>
> Feng
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-
> guide.html
> and provide commented, minimal, self-contained, reproducible code.