I am trying to do parallel programming and I tried this
library(doSNOW)
library(foreach)
testfunc<-function(x){
x<-x+1
x
}
noc<-2
cl <- makeCluster(do.call(rbind,rep(list("localhost"),noc)), type =
"SOCK")
registerDoSNOW(cl)
clusterExport(cl=cl,c("testfunc.r"))
testl<-foreach(pp=1:2) %dopar% {
testfunc(pp)
}
And this works but if I try to enclose my commands inside a text file
to be sourced it doesn't work
noc<-2
testfunc<-function(x){
x<-x+1
x
}
cl <- makeCluster(do.call(rbind,rep(list("localhost"),noc)), type =
"SOCK")
registerDoSNOW(cl)
clusterExport(cl=cl,c("a","testfunc.r"))
testl<-foreach(pp=1:2)) %dopar% {
source("test.r")
}
Then don't do that.
Use your script file to define functions. Source that file before the loop to
load them into memory. Call those functions from within your loop.
---------------------------------------------------------------------------
Jeff Newmiller The ..... ..... Go Live...
DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live
Go...
Live: OO#.. Dead: OO#.. Playing
Research Engineer (Solar/Batteries O.O#. #.O#. with
/Software/Embedded Controllers) .OO#. .OO#. rocks...1k
---------------------------------------------------------------------------
Sent from my phone. Please excuse my brevity.
Tjun Kiat Teo <teotjunk at gmail.com> wrote:
>I am trying to do parallel programming and I tried this
>
>library(doSNOW)
>library(foreach)
>
>testfunc<-function(x){
>x<-x+1
>x
>}
>
>noc<-2
>
>cl <- makeCluster(do.call(rbind,rep(list("localhost"),noc)),
type >"SOCK")
>registerDoSNOW(cl)
>clusterExport(cl=cl,c("testfunc.r"))
>
>
>testl<-foreach(pp=1:2) %dopar% {
>testfunc(pp)
>}
>
>
>And this works but if I try to enclose my commands inside a text file
>to be sourced it doesn't work
>
>noc<-2
>
>testfunc<-function(x){
>x<-x+1
>x
>}
>
>cl <- makeCluster(do.call(rbind,rep(list("localhost"),noc)),
type >"SOCK")
>
>registerDoSNOW(cl)
>
>clusterExport(cl=cl,c("a","testfunc.r"))
>
>testl<-foreach(pp=1:2)) %dopar% {
>source("test.r")
>}
>
>______________________________________________
>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.
On Fri, Sep 21, 2012 at 5:43 AM, Tjun Kiat Teo <teotjunk at gmail.com> wrote:> I am trying to do parallel programming and I tried this > > library(doSNOW) > library(foreach) > > testfunc<-function(x){ > x<-x+1 > x > } > > noc<-2 > > cl <- makeCluster(do.call(rbind,rep(list("localhost"),noc)), type = "SOCK") > registerDoSNOW(cl) > clusterExport(cl=cl,c("testfunc.r")) > > > testl<-foreach(pp=1:2) %dopar% { > testfunc(pp) > } > > > And this works but if I try to enclose my commands inside a text file > to be sourced it doesn't work > > noc<-2 > > testfunc<-function(x){ > x<-x+1 > x > } > > cl <- makeCluster(do.call(rbind,rep(list("localhost"),noc)), type = "SOCK") > > registerDoSNOW(cl) > > clusterExport(cl=cl,c("a","testfunc.r")) > > testl<-foreach(pp=1:2)) %dopar% { > source("test.r") > }I'm not sure this is a parallelization issue: when you source() a file, it doesn't return the last value calculated in quite the way that running a function directly does. E.g., system("echo 2+2 > test.R") x <- source("test.R") identical(x,4) # FALSE str(x) # Look at what actually returned source("test.R")[[1]] # Actual result Perhaps that's tripping you up? Cheers, Michael