diff options
author | Ken Kellner <ken@kenkellner.com> | 2018-08-15 14:15:21 -0400 |
---|---|---|
committer | Ken Kellner <ken@kenkellner.com> | 2018-08-15 14:15:21 -0400 |
commit | c17d19e5d02ad83c0a27469ee3222cc0bbbede9c (patch) | |
tree | 67bc44017daa27375eb91b7240ae71f1dff73b61 | |
parent | efbb522a929e8558528f6d9ee73ed9290d4cd24a (diff) |
Handle errors in summary stat calculation so that samples are not lost
-rw-r--r-- | R/autojags.R | 13 | ||||
-rw-r--r-- | R/jags.R | 9 | ||||
-rw-r--r-- | R/processoutput.R | 12 |
3 files changed, 31 insertions, 3 deletions
diff --git a/R/autojags.R b/R/autojags.R index e64d1aa..d3a6b37 100644 --- a/R/autojags.R +++ b/R/autojags.R @@ -131,8 +131,17 @@ autojags <- function(data,inits=NULL,parameters.to.save,model.file,n.chains,n.ad samples <- order.params(samples,parameters.to.save,DIC,verbose=verbose) #Convert rjags output to jagsUI form - output <- process.output(samples,DIC=DIC,codaOnly,verbose=verbose) - + output <- process.output(samples,DIC=DIC,codaOnly,verbose=verbose) + if(is.null(output)){ + output <- list() + samples <- order.params(samples,parameters.to.save,DIC,verbose=verbose) + output$samples <- samples + output$model <- mod + output$n.cores <- n.cores + class(output) <- 'jagsUIbasic' + return(output) + } + #Add additional information to output list #Summary @@ -67,6 +67,15 @@ jagsUI <- jags <- function(data,inits=NULL,parameters.to.save,model.file,n.chain #Convert rjags output to jagsUI form output <- process.output(samples,DIC=DIC,codaOnly,verbose=verbose) + if(is.null(output)){ + output <- list() + samples <- order.params(samples,parameters.to.save,DIC,verbose=verbose) + output$samples <- samples + output$model <- m + output$n.cores <- n.cores + class(output) <- 'jagsUIbasic' + return(output) + } #Add additional information to output list diff --git a/R/processoutput.R b/R/processoutput.R index 7463ae7..f905df5 100644 --- a/R/processoutput.R +++ b/R/processoutput.R @@ -1,6 +1,8 @@ process.output <- function(x,DIC,params.omit,verbose=TRUE) { +out <- tryCatch({ + if(verbose){cat('Calculating statistics.......','\n')} # Get parameter names @@ -154,7 +156,7 @@ if(DIC){ } pd <- mean(pd) dic <- mean(dic) - + #Return this list if DIC/pD requested if(verbose){cat('\nDone.','\n')} return(list(sims.list=sims.list,mean=means,sd=se,q2.5=q2.5,q25=q25,q50=q50,q75=q75,q97.5=q97.5,overlap0=overlap0, @@ -166,6 +168,14 @@ if(DIC){ f=f,Rhat=rhat,n.eff=n.eff)) } +}, error = function(cond){ + message('Calculating statistics failed with the following error:') + message(cond) + message('\nOutput falling back to class jagsUIbasic\n') + return(NULL) + } +) +return(out) } |