Skip to content

Commit

Permalink
fix issues #1373 and #1378
Browse files Browse the repository at this point in the history
  • Loading branch information
paul-buerkner committed Aug 12, 2022
1 parent 7c69f05 commit d4189ae
Show file tree
Hide file tree
Showing 7 changed files with 23 additions and 7 deletions.
4 changes: 2 additions & 2 deletions DESCRIPTION
Expand Up @@ -2,8 +2,8 @@ Package: brms
Encoding: UTF-8
Type: Package
Title: Bayesian Regression Models using 'Stan'
Version: 2.17.5
Date: 2022-06-02
Version: 2.17.6
Date: 2022-08-12
Authors@R:
c(person("Paul-Christian", "Bürkner", email = "paul.buerkner@gmail.com",
role = c("aut", "cre")),
Expand Down
2 changes: 2 additions & 0 deletions NEWS.md
Expand Up @@ -4,6 +4,8 @@

* Support regression splines with fixed degrees of freedom
specified via `s(..., fx = TRUE)`.
* Reuse user-specified control arguments originally passed
to the Stan backend in `update` and related methods. (#1373, #1378)

### Bug Fixes

Expand Down
3 changes: 2 additions & 1 deletion R/brm.R
Expand Up @@ -538,7 +538,8 @@ brm <- function(formula, data, family = gaussian(), prior = NULL,
formula = formula, data = data, data2 = data2, prior = prior,
stanvars = stanvars, model = model, algorithm = algorithm,
backend = backend, threads = threads, opencl = opencl,
save_pars = save_pars, ranef = ranef, family = family
save_pars = save_pars, ranef = ranef, family = family,
stan_args = list(...)
)
exclude <- exclude_pars(x)
# generate Stan data before compiling the model to avoid
Expand Down
8 changes: 5 additions & 3 deletions R/brmsfit-class.R
Expand Up @@ -26,6 +26,8 @@
#' @slot threads An object of class `brmsthreads` created by
#' \code{\link{threading}}.
#' @slot opencl An object of class `brmsopencl` created by \code{\link{opencl}}.
#' @slot stan_args Named list of additional control arguments that were passed
#' to the Stan backend directly.
#' @slot fit An object of class \code{\link[rstan:stanfit-class]{stanfit}}
#' among others containing the posterior draws.
#' @slot criteria An empty \code{list} for adding model fit criteria
Expand Down Expand Up @@ -56,7 +58,7 @@ brmsfit <- function(formula = NULL, data = data.frame(), prior = empty_prior(),
ranef = empty_ranef(), save_pars = NULL,
algorithm = "sampling", backend = "rstan",
threads = threading(), opencl = opencl(),
fit = NULL, criteria = list(),
stan_args = list(), fit = NULL, criteria = list(),
file = NULL, family = NULL, autocor = NULL,
cov_ranef = NULL, stan_funs = NULL, data.name = "") {
version <- list(
Expand All @@ -71,8 +73,8 @@ brmsfit <- function(formula = NULL, data = data.frame(), prior = empty_prior(),
}
x <- nlist(
formula, data, prior, data2, stanvars, model, ranef,
save_pars, algorithm, backend, threads, opencl, fit, criteria, file,
version, family, autocor, cov_ranef, stan_funs, data.name
save_pars, algorithm, backend, threads, opencl, stan_args, fit, criteria,
file, version, family, autocor, cov_ranef, stan_funs, data.name
)
class(x) <- "brmsfit"
x
Expand Down
7 changes: 6 additions & 1 deletion R/restructure.R
Expand Up @@ -216,14 +216,19 @@ restructure_v2 <- function(x) {
# should always have exactly one row but still check whether it has
# any rows at all to prevent things from breaking accidentally
if (NROW(prior_sub_i)) {
x$prior[i, c("lb", "ub")] <- prior_sub_i[1, c("lb", "ub")]
x$prior[i, c("lb", "ub")] <- prior_sub_i[1, c("lb", "ub")]
} else {
x$prior[i, c("lb", "ub")] <- ""
}
}
x$prior$lb[is.na(x$prior$lb)] <- x$prior$ub[is.na(x$prior$ub)] <- ""
x$prior <- move2end(x$prior, "source")
}
if (version < "2.17.6") {
# a slot was added that stores additional control arguments
# that are directly passed to the Stan backends for later reuse #1373
x$stan_args <- list()
}
x
}

Expand Down
3 changes: 3 additions & 0 deletions R/update.R
Expand Up @@ -202,6 +202,9 @@ update.brmsfit <- function(object, formula., newdata = NULL,
control <- attr(object$fit@sim$samples[[1]], "args")$control
control <- control[setdiff(names(control), names(dots$control))]
dots$control[names(control)] <- control
# reuse backend arguments originally passed to brm via ... #1373
names_old_stan_args <- setdiff(names(object$stan_args), names(dots))
dots[names_old_stan_args] <- object$stan_args[names_old_stan_args]
}

if (is.null(recompile)) {
Expand Down
3 changes: 3 additions & 0 deletions man/brmsfit-class.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit d4189ae

Please sign in to comment.