Nothing
#' Pad string to desired width
#'
#' @param string String to pad
#' @param width Desired width of padded string
#' @param where Padding can be inserted to the right or left of <string>.
#' Default to 'right'.
#' @param padding A single character with with the padding space is filled.
#' Defaults to blank ' ' yielding invisible padding.
#' @param autoelide If TRUE, <string> is elided if it is wider than <width>. The
#' position of eliding follows <where>. Defaults to FALSE.
#'
#' @return Padded string of length <width>.
#'
#' @author Wolfgang Mader, \email{Wolfgang.Mader@@fdm.uni-freiburg.de}
strpad <- function(string, width, where = "right", padding = " ", autoelide = FALSE) {
# Check function arguments
# <padding> is assumed to have exactry one character
if (nchar(padding) != 1) {
stop("<padding> must be of width 1")
}
# We only work on a character vector
if (!inherits(string, "character")) {
warning("Argument <string> does not inherit class 'character'")
return(NULL)
}
# Assemble parameters
strWidth <- nchar(string)
# Check if eliding is needed
if (strWidth > width) {
if (!autoelide) {
stop("<string> too wide. Consider autoelide = TRUE")
} else {
return(strelide(string, width, where))
}
}
# Do the padding
m_padding <- paste0(rep(padding, width - strWidth), collapse = "")
if (where == "left") {
return(paste0(m_padding, string))
} else if (where == "right") {
return(paste0(string, m_padding))
} else {
stop("<where> must be 'left' or 'right'")
}
}
#' Elide character vector
#'
#' @param string String subject to eliding
#' @param width Width including eliding ... of return string
#' @param where Eliding can happen at 'left', 'middel', or 'right'. Defaults to
#' 'right'.
#' @param force Elide, even is <string> is shorter than <width>. Default to
#' 'FALSE'.
#'
#' @return Elided string of length <width>.
#'
#' @details
#' Elide a string to <width>. Eliding can happen at 'left', 'middle', or
#' 'right'. #' If forcing = FALSE, which is the default, strings shorten than
#' <width> are returend unaltered; forcing = TRUE inserts eliding symbols (...)
#' in any case.
#'
#' @author Wolfgang Mader, \email{Wolfgang.Mader@@fdm.uni-freiburg.de}
strelide <- function(string, width, where = "right", force = FALSE) {
# Functions for eliding
# Eliding in the middle
elideMiddle <- function(string, width) {
if (width == 1) {
return('.')
}
strWidth <- nchar(string)
frontWidth <- max(ceiling((width - 3) / 2), 1)
endWitdh <- floor((width - 3) / 2)
string <- paste0(substr(string, 1, frontWidth), "...",
substr(string, strWidth - endWitdh + 1, strWidth))
return(strtrim(string, width))
}
# Elide on the right
elideRight <- function(string, width) {
if (width <= 3) {
return(elideMiddle(string, width))
} else {
substr(string, width - 2, width) <- "..."
return(strtrim(string, width))
}
}
# Eliding on the left
elideLeft <- function(string, width) {
string <- paste(rev(substring(string, 1:nchar(string), 1:nchar(string))), collapse="")
string <- elideRight(string, width)
return(paste(rev(substring(string, 1:nchar(string), 1:nchar(string))), collapse=""))
}
# Check function argumets
# We only work on a character vector
if (!inherits(string, "character")) {
warning("Argument does not inherit class 'character'")
return(NULL)
}
# Assemble parameters
strWidth <- nchar(string)
# Eliding
# Do we need to elide?
if (strWidth <= width && !force) {
return(string)
}
# Are we forced to elide?
if (width > strWidth && force) {
width <- strWidth
}
# Eliding the normal case
if (where == "left") {
return(elideLeft(string, width))
} else if (where == "middle") {
return(elideMiddle(string, width))
} else if (where == "right") {
return(elideRight(string, width))
} else {
stop("<where> must be 'left', 'middle', or 'right'")
}
}
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.