aboutsummaryrefslogtreecommitdiff
path: root/R
diff options
context:
space:
mode:
authorKen Kellner <ken@kenkellner.com>2017-08-03 15:36:03 -0400
committerKen Kellner <ken@kenkellner.com>2017-08-03 15:36:03 -0400
commit12c10ab2bd9e6145acb92cdb6af80ca1d8670769 (patch)
tree5b027452e4b6b1d0e37803ecdee23f33af65ebf7 /R
parent49b46086400e6138a8417141be8665827bc54120 (diff)
More carefully specify when RNG info has to be added to inits (when no seed or RNG info is provided and jagsUI is running in parallel)
Diffstat (limited to 'R')
-rw-r--r--R/geninits.R31
-rw-r--r--R/processinput.R2
2 files changed, 22 insertions, 11 deletions
diff --git a/R/geninits.R b/R/geninits.R
index 5ddb7e4..da18cb8 100644
--- a/R/geninits.R
+++ b/R/geninits.R
@@ -1,5 +1,5 @@
-gen.inits <- function(inits,n.chains,seed){
+gen.inits <- function(inits,n.chains,seed,parallel){
#Error check and run init function if necessary
if(is.list(inits)){
@@ -54,18 +54,29 @@ gen.inits <- function(inits,n.chains,seed){
}
- }
-
- if(is.null(init.values)&is.null(seed)){ #Have to do this to handle parallel chains correctly
- init.rand <- floor(runif(n.chains,1,100000))
- init.values <- vector("list",length=n.chains)
- for(i in 1:n.chains){
- init.values[[i]]$.RNG.name="base::Mersenne-Twister"
- init.values[[i]]$.RNG.seed=init.rand[i]
- }
+ #If seed is not set
+ } else {
+ other.RNG <- all(c(".RNG.name",".RNG.seed")%in%names(init.values[[1]]))
+
+ needs.RNG <- is.null(init.values)|!other.RNG
+
+ #If parallel and no custom RNG has been set, add one. Otherwise all chains will start with same seed.
+ if(needs.RNG&parallel){
+
+ init.rand <- floor(runif(n.chains,1,100000))
+
+ if(is.null(init.values)){init.values <- vector("list",length=n.chains)}
+
+ for(i in 1:n.chains){
+ init.values[[i]]$.RNG.name="base::Mersenne-Twister"
+ init.values[[i]]$.RNG.seed=init.rand[i]
+ }
+
+ }
}
+
return(init.values)
}
diff --git a/R/processinput.R b/R/processinput.R
index e56cda2..748b23c 100644
--- a/R/processinput.R
+++ b/R/processinput.R
@@ -100,7 +100,7 @@ process.input = function(x,y,inits,n.chains,n.iter,n.burnin,n.thin,n.cores,DIC=F
}
#Get initial values
- init.vals <- gen.inits(inits,n.chains,seed)
+ init.vals <- gen.inits(inits,n.chains,seed,parallel)
if(verbose){cat('\nDone.','\n','\n')}
return(list(data=x,params=params,inits=init.vals,n.cores=n.cores))