#' @name utilities
#'
#' @title Utilities for managing library paths
#'
#' @description `add_libpaths()`: Add local library paths to
#' `.libPaths()`.
#'
#' @param paths `character()`: vector of directories to add to
#' `.libPaths()`. Paths that do not exist will be created.
#'
#' @return `add_libpaths()`: updated .libPaths(), invisibly.
#'
#' @examples
#' \dontrun{add_libpaths("/tmp/host-site-library")}
#'
#' @export
add_libpaths <-
function(paths)
{
stopifnot(is.character(paths))
## make sure all paths exist
exist <- vapply(paths, dir.exists, logical(1))
ok <- vapply(paths[!exist], dir.create, logical(1))
if (!all(ok))
stop(
"'add_libpaths()' failed to create directories:\n",
" '", paste(paths[!exist][!ok], collapse="'\n '"), "'"
)
.libPaths(c(paths, .libPaths()))
}
isScalarCharacter_or_NULL <- function(x, na.ok = FALSE, zchar = FALSE)
isScalarCharacter(x, na.ok, zchar) || is.null(x)
.is_local_directory <- function(x)
isScalarCharacter(x) && dir.exists(x)
.is_https <- function(x)
isCharacter(x) & startsWith(x, "https://")
.is_workspace <-
function(x)
{
isScalarCharacter(x) &&
## exactly 1 `/`
identical(lengths(regmatches(x, gregexpr("/", x, fixed = TRUE))), 1L)
}
#' @importFrom dplyr full_join
.tbl_with_template <-
function(tbl, tmpl)
{
result <- as_tibble(tmpl)
if (nrow(tbl)) {
have <- intersect(names(tbl), names(tmpl))
tbl <- select(tbl, have)
result <-
full_join(tbl, result, by = have) |>
select(names(tmpl))
}
result
}
#' @importFrom utils head
.pretty <- function(x, indent = 2, exdent = 0, some=FALSE) {
len <- length(x)
if (some && len > 6)
x <- head(x, 5)
pad <- paste0(rep(" ", indent), collapse="")
paste(c(
strwrap(paste(x, collapse=", "), indent = indent, exdent = exdent),
if (some && len > 6)
paste0(pad, "# ... with ", len, " more elements")
), collapse = "\n")
}
.pretty_text <- function(..., indent = 0L, exdent = 0L) {
text <- paste(..., collapse = " ")
paste(strwrap(text, indent = indent, exdent = exdent), collapse = "\n")
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.