aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Kellner <ken@kenkellner.com>2018-08-15 14:15:21 -0400
committerKen Kellner <ken@kenkellner.com>2018-08-15 14:15:21 -0400
commitc17d19e5d02ad83c0a27469ee3222cc0bbbede9c (patch)
tree67bc44017daa27375eb91b7240ae71f1dff73b61
parentefbb522a929e8558528f6d9ee73ed9290d4cd24a (diff)
Handle errors in summary stat calculation so that samples are not lost
-rw-r--r--R/autojags.R13
-rw-r--r--R/jags.R9
-rw-r--r--R/processoutput.R12
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
diff --git a/R/jags.R b/R/jags.R
index d251269..3575131 100644
--- a/R/jags.R
+++ b/R/jags.R
@@ -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)
}