ga_to_mat <- function(ga){
mat_nrow <- mat_ncol <- ncol(ga)
matrix(ga, nrow = mat_nrow, ncol = mat_nrow, byrow = TRUE)
}
# ga_to_mat(calc_chol$chol_x)
get_upper_tri2 <- function(mat){
mat[upper.tri(mat)]
}
get_lower_tri <- function(mat){
mat[lower.tri(mat)]
}
expect_upper_tri <- function(object){
act <- quasi_label(rlang::enquo(object), arg = "object")
act$mat <- object[1,,]
act$upper_tri <- get_upper_tri2(act$mat)
act$lower_tri <- get_lower_tri(act$mat)
all_lower_zero <- all(act$lower_tri == 0)
all_upper_non_zero <- all(act$upper_tri != 0)
is_upper_tri <- all_lower_zero && all_upper_non_zero
if (is_upper_tri){
succeed()
return(invisible(act$val))
}
if (!all_lower_zero){
vals <- glue::glue_collapse(glue::glue("{round(act$lower_tri, 3)}"), sep = " ")
msg <- glue::glue("{act$lab} is not upper triangular. Values below the \\
main diagonal are not all zero: {vals}")
}
if (!all_upper_non_zero){
vals <- glue::glue_collapse(glue::glue("{round(act$upper_tri, 3)}"), sep = " ")
msg <- glue::glue_collapse(glue::glue("{act$lab} is not upper triangular. Some values above \\
the main diagonal contain zero: {vals}"))
}
fail(msg)
}
expect_square <- function(object){
# 1. Capture object and label
act <- quasi_label(rlang::enquo(object), arg = "object")
# 2. Call expect()
act$nrow <- dim(act$val[1,,])[1]
act$ncol <- dim(act$val[1,,])[2]
expect(
ok = act$nrow == act$ncol,
failure_message = glue::glue("{act$lab} has dim {act$nrow}x{act$ncol}, and is not square.")
)
# 3. Invisibly return the value
invisible(act$val)
}
# expect_square(calc_chol$chol_x)
# expect_square(array(data = 1:9, c(1,3,3)))
# expect_square(array(data = 1:12, c(1,3,4)))
expect_symmetric <- function(object){
# 1. Capture object and label
act <- quasi_label(rlang::enquo(object), arg = "object")
act$mat <- ga_to_mat(object)
act$upper <- get_upper_tri2(act$mat)
act$lower <- get_lower_tri(act$mat)
# 2. Call expect()
expect(
ok = all.equal(act$upper,act$lower),
failure_message = glue::glue("{act$lab} is not symmetric")
)
# 3. Invisibly return the value
invisible(act$val)
}
# xmat <- calculate(x, nsim = 1)[[1]] |> ga_to_mat()
#
# xmat
#
# expect_symmetric(calculate(x, nsim = 1)[[1]])
#
# all.equal(get_lower_tri(xmat),get_upper_tri2(xmat))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.