Nothing
model_code <- "model { \n y ~ normal(0, 1); \n}"
cat(model_code, file = "tmp.stan")
a <- c(1, 3, 5)
b <- matrix(1:10, ncol = 2)
c <- array(1:18, dim = c(2, 3, 3))
dump(c("a", "b", "c"), file = "dumpabc.Rdump")
stan_rdump(c("a", "b", "c"), file = "standumpabc.Rdump")
d <- factor(c("a", "b", "b", "a", "a"))
e <- factor(c(1, 3, 3, 1, 1))
f <- c(TRUE, TRUE, FALSE)
g <- 1000000000
h <- 1.1e+10
stan_rdump(c("d", "e", "f"), file = "standumpabc.Rdump", append = TRUE)
stan_rdump(c("g", "h"), file = "standumpabc.Rdump", append = TRUE)
cc <- c(
"# comment line 1",
" no comments line 1",
"# comment line 2",
"# comment line 3",
"# comment line 4",
"# comment line 5",
" not comments line 2",
"# comment line 6",
"not comments #comment line 7",
"not comments at the end of file"
)
cat(file = "cc.csv", paste(cc, collapse = "\n"), "\n")
cc2 <- c("# line 1", "#line 2", "# line 3", "#line4", "c,a,b", "1,2,3")
cat(file = "cc2.csv", paste(cc2, collapse = "\n"), "\n")
test_that("get_model_strcode works", {
model_code <- "model { \n y ~ normal(0, 1); \n}"
code <- "parameters { real y; } model{y ~ normal(0,1);}"
# FIXME: Warning - "incomplete final line found on 'tmp.stan'"
str1 <- suppressWarnings(rstan:::get_model_strcode("tmp.stan"))
str2 <- rstan:::get_model_strcode(model_code = code)
str3 <- rstan:::get_model_strcode(model_code = "code")
str4 <- rstan:::get_model_strcode(model_code = "parameters {real y;} model {y ~ normal(0,1); }")
mname1 <- attr(str1, "model_name2")
mname2 <- attr(str2, "model_name2")
mname3 <- attr(str3, "model_name2")
mname4 <- attr(str4, "model_name2")
expect_equal(mname1, "tmp")
expect_equal(mname2, "code")
expect_equal(mname3, "code")
expect_equal(mname4, "anon_model")
attributes(str1) <- NULL
attributes(str2) <- NULL
attributes(str3) <- NULL
expect_equal(str1, model_code)
expect_equal(str2, code)
expect_equal(str3, code)
model_code <- "model { \n y ~ normal(0, 1); \n}"
# cat(model_code, file = 'tmp.stan')
# FIXME: Warning - "incomplete final line found on 'tmp.stan'"
expect_equal(
model_code,
suppressWarnings(rstan:::read_model_from_con("tmp.stan"))
)
attr(model_code, "model_name2") <- "tmp"
# FIXME: Warning - "incomplete final line found on 'tmp.stan'"
expect_equal(
model_code,
suppressWarnings(rstan:::get_model_strcode("tmp.stan"))
)
attr(model_code, "model_name2") <- "model_code"
expect_equal(model_code, rstan:::get_model_strcode(model_code = model_code))
expect_error(rstan:::get_model_strcode())
})
test_that("is_legal_stan_name works", {
expect_false(rstan:::is_legal_stan_vname("7dd"))
expect_false(rstan:::is_legal_stan_vname("model"))
expect_false(rstan:::is_legal_stan_vname("private"))
expect_false(rstan:::is_legal_stan_vname("hello__"))
expect_true(rstan:::is_legal_stan_vname("y"))
})
test_that("is_named_list works", {
expect_false(rstan:::is_named_list(c(2, 3)))
expect_false(rstan:::is_named_list(list(3, 4)))
expect_false(rstan:::is_named_list(list(a = 3, 4)))
expect_true(rstan:::is_named_list(list(a = 3, b = 4)))
})
test_that("data_preprocess works", {
lst <- list(
z = c(1L, 2L, 4L),
a = 1:100,
b = matrix(1:9 / 9, ncol = 3),
c = structure(1:100, .Dim = c(5, 20)),
g = array(c(3, 3, 9, 3, 3, 4, 5, 6, 9, 8, 0, 2), dim = c(2, 2, 3)),
d = 1:100 + .1
)
lst <- rstan:::data_preprocess(lst)
lst2 <- lst
lst2$f <- matrix(c(3, NA, NA, NA, 3, 4), ncol = 3)
lst3 <- lst
lst3$h <- gl(3, 4)
# Warns about `h` being not numeric.
# FIXME: Should the warning be tested explicitly?
lst4 <- suppressWarnings(rstan:::data_preprocess(lst3))
# Keep the dimension information.
expect_equal(dim(lst$g), c(2, 2, 3))
# Do as.integer when appropriate.
expect_true(is.integer(lst$z))
# Don't do as.integer when it is not appropriate.
expect_true(is.double(lst$b))
# Stop if data have NA.
expect_error(rstan:::data_preprocess(lst2))
# Check if h is removed.
expect_named(lst4, c("z", "a", "b", "c", "g", "d"))
})
test_that("data_preprocess works take 2", {
# A list of array as an element of the data list.
I <- 3
J <- 4
K <- 5
a <- lapply(1:I, function(i) rnorm(J))
b <- lapply(1:I, function(i) matrix(rnorm(J * K), ncol = K))
d <- lapply(1:I, function(i) rnorm(1, i))
e <- lapply(1:I, function(i) rpois(J, 1) + 1.0)
lst2 <- rstan:::data_preprocess(list(a = a, b = b, d = d, e = e))
expect_equal(dim(lst2$a), c(I, J))
expect_equal(dim(lst2$b), c(I, J, K))
expect_equal(dim(lst2$d), c(I, 1))
expect_true(is.integer(lst2$e[1, 1]))
expect_false(is.integer(e[[1]][1]))
a1 <- lapply(1:I, function(i) rnorm(J))
a2 <- lapply(1:I, function(i) rnorm(J))
expect_error(rstan:::data_preprocess(list(a = list(a1 = a1, a2 = a2))))
})
test_that("read_rdump works", {
l <- rstan:::read_rdump("dumpabc.Rdump")
expect_equal(l$a, c(1, 3, 5))
expect_equal(l$b, matrix(1:10, ncol = 2))
expect_equal(l$c, array(1:18, dim = c(2, 3, 3)))
})
test_that("stan_rdump works", {
l <- rstan:::read_rdump("standumpabc.Rdump")
expect_equal(l$a, c(1, 3, 5))
expect_equal(l$b, matrix(1:10, ncol = 2))
expect_equal(l$c, array(1:18, dim = c(2, 3, 3)))
expect_equal(l$d, c(1, 2, 2, 1, 1))
expect_equal(l$e, c(1, 2, 2, 1, 1))
expect_equal(l$f, c(1, 1, 0))
text <- paste(readLines("standumpabc.Rdump"), collapse = "|")
expect_true(grepl("1000000000", text))
expect_equal(l$h, 1.1e10)
})
test_that("seq_array_ind works", {
a <- rstan:::seq_array_ind(numeric(0))
expect_length(a, 0)
# By default, col_major is FALSE.
b <- rstan:::seq_array_ind(2:5, col_major = TRUE)
c <- arrayInd(1:prod(2:5), .dim = 2:5)
expect_equal(b, c)
d <- rstan:::seq_array_ind(2:3, col_major = FALSE)
e <- matrix(c(1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 2, 3),
nrow = 6, byrow = TRUE
)
expect_equal(d, as.array(e))
f <- rstan:::seq_array_ind(1)
expect_equal(f, array(1, dim = c(1, 1)))
})
test_that("flatnames works", {
names <- c("alpha", "beta", "gamma", "delta")
dims <- list(alpha = integer(0), beta = c(2, 3), gamma = c(2, 3, 4),
delta = c(5))
fnames <- rstan:::flatnames(names, dims)
expect_equal(
fnames,
c(
"alpha", "beta[1,1]", "beta[1,2]", "beta[1,3]",
"beta[2,1]", "beta[2,2]", "beta[2,3]",
"gamma[1,1,1]", "gamma[1,1,2]", "gamma[1,1,3]", "gamma[1,1,4]",
"gamma[1,2,1]", "gamma[1,2,2]", "gamma[1,2,3]", "gamma[1,2,4]",
"gamma[1,3,1]", "gamma[1,3,2]", "gamma[1,3,3]", "gamma[1,3,4]",
"gamma[2,1,1]", "gamma[2,1,2]", "gamma[2,1,3]", "gamma[2,1,4]",
"gamma[2,2,1]", "gamma[2,2,2]", "gamma[2,2,3]", "gamma[2,2,4]",
"gamma[2,3,1]", "gamma[2,3,2]", "gamma[2,3,3]", "gamma[2,3,4]",
"delta[1]", "delta[2]", "delta[3]", "delta[4]", "delta[5]"
)
)
names2 <- c("alpha")
dims2 <- list(alpha = integer(0))
fnames2 <- rstan:::flatnames(names2, dims2)
expect_equal(fnames2, "alpha")
})
test_that("idx_col2rowm works", {
d <- integer(0)
idx <- rstan:::idx_col2rowm(d)
expect_equal(idx, 1)
d2 <- 8
idx2 <- rstan:::idx_col2rowm(d2)
expect_equal(idx2, 1:8)
d3 <- c(3, 4, 5)
idx3 <- rstan:::idx_col2rowm(d3)
yidx3 <- c(
1, 13, 25, 37, 49, 4, 16, 28, 40, 52, 7, 19, 31, 43, 55,
10, 22, 34, 46, 58, 2, 14, 26, 38, 50, 5, 17, 29, 41, 53, 8, 20, 32, 44, 56,
11, 23, 35, 47, 59, 3, 15, 27, 39, 51, 6, 18, 30, 42, 54, 9, 21, 33, 45, 57,
12, 24, 36, 48, 60
)
expect_equal(idx3, yidx3)
})
test_that("idx_row2colm works", {
d <- integer(0)
idx <- rstan:::idx_row2colm(d)
expect_equal(idx, 1)
d2 <- 8
idx2 <- rstan:::idx_row2colm(d2)
expect_equal(idx2, 1:8)
d3 <- c(3, 4, 5)
idx3 <- rstan:::idx_row2colm(d3)
yidx3 <- c(
1, 21, 41, 6, 26, 46, 11, 31, 51, 16, 36, 56, 2, 22, 42, 7, 27, 47, 12, 32, 52,
17, 37, 57, 3, 23, 43, 8, 28, 48, 13, 33, 53, 18, 38, 58, 4, 24, 44, 9, 29, 49,
14, 34, 54, 19, 39, 59, 5, 25, 45, 10, 30, 50, 15, 35, 55, 20, 40, 60
)
expect_equal(idx3, yidx3)
})
test_that("pars_total_indexes works", {
names <- "alpha0"
dims <- list(alpha0 = c(2, 3))
fnames <- rstan:::flatnames(names, dims)
tidx <- rstan:::pars_total_indexes(names, dims, fnames, "alpha0")
tidx_attr1 <- attr(tidx[[1]], "row_major_idx")
attributes(tidx[[1]]) <- NULL
expect_equal(unname(tidx[[1]]), 1:6)
expect_equal(unname(tidx_attr1), c(1, 3, 5, 2, 4, 6))
names2 <- c(names, "alpha")
dims2 <- c(dims, list(alpha = 8))
fnames2 <- rstan:::flatnames(names2, dims2)
tidx2 <- rstan:::pars_total_indexes(names2, dims2, fnames2, "alpha")
tidx2_attr1 <- attr(tidx2[[1]], "row_major_idx")
attributes(tidx2[[1]]) <- NULL
expect_equal(unname(tidx2[[1]]), 6 + 1:8)
expect_equal(unname(tidx2_attr1), 6 + 1:8)
names3 <- c(names2, "p")
dims3 <- c(dims2, list(p = integer(0)))
fnames3 <- rstan:::flatnames(names3, dims3)
tidx3 <- rstan:::pars_total_indexes(names3, dims3, fnames3, "p")
tidx3_attr1 <- attr(tidx3[[1]], "row_major_idx")
attributes(tidx3[[1]]) <- NULL
expect_equal(unname(tidx3[[1]]), 15)
expect_equal(unname(tidx3_attr1), 15)
})
test_that("multi_idx_row2colm works", {
expect_equal(rstan:::multi_idx_row2colm(list(integer(0))), 1)
dims <- list(c(3), c(2, 3), integer(0), c(2))
col_idx <- rstan:::multi_idx_row2colm(dims)
target <- c(1, 2, 3, 4, 7, 5, 8, 6, 9, 10, 11, 12)
expect_equal(col_idx, target)
fnames <- c(
"alpha[1]", "alpha[2]", "alpha[3]",
"alpha2[1,1]", "alpha2[1,2]", "alpha2[1,3]",
"alpha2[2,1]", "alpha2[2,2]", "alpha2[2,3]",
"p", "theta[1]", "theta[2]"
)
fnames_colm <- c(
"alpha[1]", "alpha[2]", "alpha[3]",
"alpha2[1,1]", "alpha2[2,1]", "alpha2[1,2]", "alpha2[2,2]",
"alpha2[1,3]", "alpha2[2,3]", "p", "theta[1]", "theta[2]"
)
expect_equal(fnames[col_idx], fnames_colm)
})
test_that("mklist works", {
x <- 3:5
y <- array(1:9, dim = c(3, 3))
z <- list(p = 3)
f <- function() {
TRUE
}
a <- list(x = x, y = y)
b <- rstan:::mklist(c("x", "y"))
expect_identical(a, b)
c <- list(x = x, y = y, z = z)
d <- rstan:::mklist(c("x", "y", "z"))
expect_identical(c, d)
expect_error(rstan:::mklist(c("x", "f")))
p <- 4
fun <- function() {
p <- 3
rstan:::mklist("p")
}
expect_equal(fun()$p, 3, ignore_attr = "names")
expect_equal(rstan:::mklist("p")$p, 4, ignore_attr = "names")
})
# test_makeconf_path <- function() {
# p <- makeconf_path()
# checkTrue(file.exists(makeconf_path()))
# }
test_that("config_argss works", {
# (chains, iter, warmup, thin, init, seed, sample_file, ...)
a <- rstan:::config_argss(3, 100, 10, 3, 0, 0, "a.csv",
algorithm = "NUTS",
control = NULL,
chain_id = 4
)
expect_length(a, 3)
expect_equal(a[[1]]$init, "0")
expect_equal(a[[1]]$chain_id, 4)
expect_equal(a[[3]]$chain_id, 6)
b <- rstan:::config_argss(3, 100, 10, 3, "0", 10, "a.csv",
algorithm = "NUTS",
control = NULL
)
expect_equal(b[[3]]$chain_id, 3)
expect_equal(b[[1]]$init, "0")
c <- rstan:::config_argss(3, 100, 10, 3, "random", 10, "a.csv",
algorithm = "HMC",
control = list(adapt_engaged = FALSE)
)
expect_equal(c[[1]]$init, "random")
d <- rstan:::config_argss(4, 100, 10, 3, "random", 10, "a.csv",
chain_id = c(3, 2, 1), algorithm = "Metropolis",
control = list(adapt_engaged = FALSE)
)
expect_equal(d[[3]]$chain_id, 1)
expect_equal(d[[4]]$chain_id, 4)
expect_error(rstan:::config_argss(3, 100, 10, 3, "random", 10, NA,
algorithm = "NUTS", control = NULL, chain_id = c(3, 3)
))
b <- rstan:::config_argss(3, 100, 10, 3, 0, "12345", "a.csv",
algorithm = "NUTS", chain_id = 4, control = NULL
)
expect_equal(b[[1]]$seed, "12345")
expect_error(rstan:::config_argss(3, 100, 10, 3, 0, "a12345", "a.csv",
algorithm = "NUTS", control = NULL, chain_id = 4
))
expect_error(rstan:::config_argss(3, 100, 10, 3, 0, "1a2345", "a.csv",
algorithm = "NUTS", control = NULL,
chain_id = 4
))
})
test_that("data_list2array works", {
d <- list(y = rnorm(20))
d2 <- rstan:::data_list2array(d)
expect_equal(d2, array(d$y, dim = c(1, 20)))
I <- 4
J <- 5
K <- 6
b <- lapply(1:I, function(i) rnorm(J))
b2 <- rstan:::data_list2array(b)
b3 <- data.matrix(do.call(rbind, b))
expect_equal(b2, b3)
a <- lapply(1:I, function(i) array(rnorm(J * K), dim = c(J, K)))
a2 <- rstan:::data_list2array(a)
for (i in 1:I) {
expect_equal(a[[i]], a2[i, , ])
}
expect_equal(a[[4]][5, 6], a2[4, 5, 6])
expect_equal(a[[3]][4, 2], a2[3, 4, 2])
expect_equal(a[[2]][1, 6], a2[2, 1, 6])
})
test_that("read_comments works", {
a1 <- rstan:::read_comments("cc.csv", 5L)
expect_equal(a1[1], "# comment line 1")
expect_equal(a1[5], "# comment line 5")
a2 <- rstan:::read_comments("cc.csv", 3L)
expect_length(a2, 3L)
a3 <- rstan:::read_comments("cc.csv", -1)
expect_length(a3, 7L)
})
test_that("read_csv_header", {
h1 <- rstan:::read_csv_header("cc2.csv")
expect_equal(attr(h1, "lineno"), 5)
expect_equal(h1, "c,a,b", ignore_attr = TRUE)
})
test_that("get_dims_from_fnames works", {
names <- c("alpha", "beta2", "g2amma", "theta0")
dims <- list(c(2L, 3L), integer(0L), c(4L), c(3L, 5L, 4L))
fnames <- rstan:::flatnames(names, dims)
fnames_d <- rstan:::sqrfnames_to_dotfnames(fnames)
unames <- rstan:::unique_par(fnames_d)
dims2 <- lapply(
unames,
function(n) {
fnames_d2 <- fnames_d[sapply(fnames_d, function(i) grepl(n, i))]
# The above line works here since all parameters are not nested.
# it would be problematic if say we have another parameter `p`,
# since p is also part of `alpha`.
rstan:::get_dims_from_fnames(fnames_d2)
}
)
expect_equal(dims, dims2)
})
test_that("Converting from/to dotfnames/sqrfnames works", {
dn <- c("alpha", "beta.1", "beta.2", "gamma.1.2", "gamma.1.4")
sn <- rstan:::dotfnames_to_sqrfnames(dn)
dn2 <- rstan:::sqrfnames_to_dotfnames(sn)
expect_equal(dn, dn2)
})
test_that("Can convert parameter from vector to list", {
v <- c(2.3, 3.4, 4.5, (1:8) / 9, 3.1415)
pars <- c("alpha", "beta", "gamma", "delta")
dims <- list(integer(0), c(2), c(2, 4), 1)
vl <- rstan:::rstan_relist(v, rstan:::create_skeleton(pars, dims))
alpha <- 2.3
beta <- array(v[2:3], dim = 2)
gamma <- array(v[4:11], dim = c(2, 4))
delta <- array(v[12], dim = 1)
expect_length(vl, 4)
expect_equal(vl[[1]], alpha)
expect_equal(vl[[2]], beta)
expect_equal(vl[[3]], gamma)
expect_equal(vl[[4]], delta)
})
test_that("remove_empty_pars works", {
pars <- c("alpha", "beta", "gamma", "eta", "xi")
dims <- list(integer(0), c(2), c(2, 4), 0, c(2, 0))
names(dims) <- pars
expect_equal(rstan:::remove_empty_pars(pars[1:2], dims), pars[1:2])
expect_equal(rstan:::remove_empty_pars(pars[1:4], dims), pars[1:3])
expect_equal(rstan:::remove_empty_pars("beta[1]", dims), "beta[1]")
expect_equal(rstan:::remove_empty_pars("eta", dims), character(0))
})
unlink("tmp.stan")
unlink("dumpabc.Rdump")
unlink("standumpabc.Rdump")
unlink("cc.csv")
unlink("cc2.csv")
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.