Skip to content

Commit 77a1443

Browse files
authored
Merge pull request #857 from stan-dev/single-length-init
Fix handling of single-length inits for containers
2 parents 021049b + 50616d0 commit 77a1443

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

R/args.R

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -896,6 +896,13 @@ process_init_list <- function(init, num_procs, model_variables = NULL) {
896896
if (!all(is_parameter_value_supplied)) {
897897
missing_parameter_values[[i]] <- parameter_names[!is_parameter_value_supplied]
898898
}
899+
for (par_name in parameter_names[is_parameter_value_supplied]) {
900+
# Make sure that initial values for single-element containers don't get
901+
# unboxed when writing to JSON
902+
if (model_variables$parameters[[par_name]]$dimensions == 1 && length(init[[i]][[par_name]]) == 1) {
903+
init[[i]][[par_name]] <- array(init[[i]][[par_name]], dim = 1)
904+
}
905+
}
899906
}
900907
if (length(missing_parameter_values) > 0) {
901908
warning_message <- c(

tests/testthat/test-model-init.R

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,3 +270,25 @@ test_that("print message if not all parameters are initialized", {
270270
fixed = TRUE
271271
)
272272
})
273+
274+
test_that("Initial values for single-element containers treated correctly", {
275+
modcode <- "
276+
data {
277+
real y_mean;
278+
}
279+
parameters {
280+
vector[1] y;
281+
}
282+
model {
283+
y_mean ~ normal(y[1], 1);
284+
}
285+
"
286+
mod <- cmdstan_model(write_stan_file(modcode), force_recompile = TRUE)
287+
expect_no_error(
288+
fit <- mod$sample(
289+
data = list(y_mean = 0),
290+
init = list(list(y = c(0))),
291+
chains = 1
292+
)
293+
)
294+
})

0 commit comments

Comments
 (0)