diff options
author | Ken Kellner <ken@kenkellner.com> | 2017-08-03 15:36:03 -0400 |
---|---|---|
committer | Ken Kellner <ken@kenkellner.com> | 2017-08-03 15:36:03 -0400 |
commit | 12c10ab2bd9e6145acb92cdb6af80ca1d8670769 (patch) | |
tree | 5b027452e4b6b1d0e37803ecdee23f33af65ebf7 /R | |
parent | 49b46086400e6138a8417141be8665827bc54120 (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.R | 31 | ||||
-rw-r--r-- | R/processinput.R | 2 |
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¶llel){ + + 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)) |