list2matrix <- function(D) {
return(t(sapply(D, as.numeric)))
}
list2array <- function(D) {
S <- length(D)
n <- nrow(as.matrix(D[[1]]))
p <- ncol(as.matrix(D[[1]]))
out <- array(NA, dim = c(n, p, S))
for (s in 1:S) {
out[, , s] <- as.matrix(D[[s]])
}
return(out)
}
list.sum <- function(x) {
m <- length(x)
z <- x[[1]]
if (m == 1) {
return(z)
}
for (j in 2:m) {
z <- z + x[[j]]
}
return(z)
}
colMedians <- function(x, na.rm = TRUE, dims = 1L) {
if (is.data.frame(x))
x <- as.matrix(x)
if (!is.array(x) || length(dn <- dim(x)) < 2L)
stop("'x' must be an array of at least two dimensions")
if (dims < 1L || dims > length(dn) - 1L)
stop("invalid 'dims'")
n <- prod(dn[id <- seq_len(dims)])
dn <- dn[-id]
z <- apply(x, 2, median, nar.rm = na.rm)
if (length(dn) > 1L) {
dim(z) <- dn
dimnames(z) <- dimnames(x)[-id]
}
else names(z) <- dimnames(x)[[dims + 1L]]
return(z)
}
SAuR_pb <- function(min = 0, max = 1, initial = 0, char = "=", width = 49, skip = 5) {
.val <- initial
.killed <- FALSE
.nb <- 0L
nw <- nchar(char, "w")
if (is.na(width)) {
width <- getOption("width")
width <- width - 10L
width <- trunc(width/nw)
}
if (max <= min)
stop("must have 'max' > 'min'")
empty_string <- strrep(" ", skip)
cat(empty_string, "0% 10 20 30 40 50 60 70 80 90 100%\n", sep = "");
cat(empty_string, "[----|----|----|----|----|----|----|----|----|----]\n", sep = "");
utils::flush.console()
up3 <- function(value) {
if (!is.finite(value) || value < min || value > max)
return()
.val <<- value
nb <- round(width * (value - min)/(max - min))
if (nb == .nb)
return()
cat(paste0("\r |", strrep(" ", nw * width + 6)))
cat(paste(c("\r |", rep.int(char, nb), rep.int(" ", nw * (width - nb)), "|"), collapse = ""))
utils::flush.console()
.nb <<- nb
}
getVal <- function() .val
kill <- function() if (!.killed) {
cat("\n")
utils::flush.console()
.killed <<- TRUE
}
up3(initial)
structure(list(getVal = getVal, up = up3, kill = kill), class = "txtProgressBar")
}
SAuR_setpb <- function(pb, value) {
oldval <- pb$getVal()
pb$up(value)
invisible(oldval)
}
#' Check for suggested package (requireNamespace) and throw error if necessary
#'
#' @noRd
#' @param pkg Package name as a string.
#' @param min_version Optionally, a minimum version number as a string.
#' @return TRUE, invisibly, if no error is thrown.
#'
suggested_package <- function(pkg, min_version = NULL) {
stopifnot(length(pkg) == 1, is.character(pkg))
if (!requireNamespace(pkg, quietly = TRUE)) {
stop(
"Please install the ",
pkg, " package to use this function.",
call. = FALSE
)
}
if (!is.null(min_version)) {
stopifnot(is.character(min_version))
if (utils::packageVersion(pkg) < package_version(min_version)) {
stop(
"Version >=", min_version, " of the ",
pkg, " package is required to use this function.",
call. = FALSE
)
}
}
invisible(TRUE)
}
# Print a matrix in a pretty way
print_matrix <- function(mat, rownm = NULL, colnm = NULL, colwidth = 10, between_cols = 2, ndigits = 2, shift = 0,
isint = FALSE) {
nr <- nrow(mat)
nc <- ncol(mat)
if (is.null(rownm)) {
rownm <- paste0("Row ", 1:nr)
}
if (is.null(colnm)) {
colnm <- paste0("Col ", 1:nc)
}
stopifnot(length(rownm) == nr, length(colnm) == nc)
maxwidth <- max(nchar(format(round(mat, digits = ndigits), nsmall = ifelse(isint, 0, 2))))
if (colwidth < maxwidth) colwidth <- maxwidth
mat_str <- format(round(mat, digits = ndigits), nsmall = ifelse(isint, 0, 2), width = colwidth)
if (any(is.na(mat))) mat_str <- gsub("NA", " -", mat_str)
# if (any(nchar(rownm) > colwidth)) {
# rownm <- abbreviate(rownm, minlength = colwidth, strict = TRUE, named = FALSE)
# }
if (any(nchar(colnm) > colwidth)) {
colnm <- abbreviate(colnm, minlength = colwidth, strict = TRUE, named = FALSE)
}
firstcolwidth <- max(nchar(rownm))
empty_string_shift <- strrep(" ", shift)
empty_string_firstcol <- strrep(" ", firstcolwidth)
empty_string_between_cols <- strrep(" ", between_cols)
empty_string_rows <- empty_string_cols <- character(nc)
cat(empty_string_shift, sep = "")
cat(empty_string_firstcol, sep = "")
cat(empty_string_between_cols, sep = "")
for (j in 1:nc) {
empty_string_cols[j] <- strrep(" ", colwidth - nchar(colnm[j]))
cat(empty_string_cols[j], colnm[j], sep = "")
cat(empty_string_between_cols, sep = "")
}
cat("\n")
for (i in 1:nr) {
empty_string_rows[i] <- strrep(" ", firstcolwidth - nchar(rownm[i]))
cat(empty_string_shift, sep = "")
cat(rownm[i], empty_string_rows[i], sep = "")
cat(empty_string_between_cols, sep = "")
for (j in 1:nc) {
cat(mat_str[i, j], sep = "")
cat(empty_string_between_cols, sep = "")
if (j == nc) cat("\n")
}
}
}
# Stack an array over the 3rd dimension
stack_array <- function(x) {
dims <- dim(x)
n <- dims[1]
p <- dims[2]
G <- dims[3]
out <- matrix(NA, nrow = n*G, ncol = (p + 1))
out_rownm <- character(n*G)
out_colnm <- c(paste0("p_", 1:p), "G")
for (g in 1:G) {
out[(n*(g - 1) + 1):(g*n), 1:p] <- x[, , g]
out[(n*(g - 1) + 1):(g*n), (p + 1)] <- g
out_rownm[(n*(g - 1) + 1):(g*n)] <- paste0(1:n, "_", g)
}
rownames(out) <- out_rownm
colnames(out) <- out_colnm
return(out)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.