Features:

• custom separator,

• custom last separator: last argument,

• adds ellipsis to truncated strings,

• uses Unicode ellipsis character on UTF-8 console,

• can collapse "from both ends", with style = "both-ends",

• can consider a limit for the display width of the result, in characters,

• handles ANSI control sequences correctly when measuring display width.

## Usage

ansi_collapse(
x,
sep = ", ",
last = ", and ",
trunc = Inf,
width = Inf,
ellipsis = symbol\$ellipsis,
)

## Arguments

x

Character vector, or an object with an as.character() method to collapse.

sep

Character string, separator.

last

Last separator, if there is no truncation. E.g. use ", and " for the Oxford comma.

trunc

Maximum number of elements to show. For style = "head" at least trunc = 1 is used. For style = "both-ends" at least trunc = 5 is used, even if a smaller number is specified.

width

Limit for the display width of the result, in characters. This is a hard limit, and the output will never exceed it. This argument is not implemented for the "both-ends" style, which always uses Inf, with a warning if a fininte width value is set.

ellipsis

Character string to use at the place of the truncation. By default, the Unicode ellipsis character is used if the console is UTF-8, and three dots otherwise.

style

Truncation style:

• both-ends: the default, shows the beginning and end of the vector, and skips elements in the middle if needed.

• head: shows the beginning of the vector, and skips elements at the end, if needed.

## Value

Character scalar. It is NA_character_ if any elements in the vector are NA.

glue_collapse in the glue package inspired this function

## Examples

ansi_collapse(letters)
#> [1] "a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, and z"

# truncate
ansi_collapse(letters, trunc = 5)
#> [1] "a, b, c, …, y, and z"