Functions in concatenate construct human-friendly text from elements whose
values aren't known in advance, as in calls to message
, warning
or stop
.
# rmarkdown::render("README.Rmd") knitr::opts_chunk$set( echo = TRUE, collapse = TRUE, comment = "#>", fig.path = "README-", cache = FALSE) library(concatenate)
Each function in concatenate returns a comma-separated string. (A length-one
character vector.) The workhorse function in concatenate is cc
.
cc("one fish", "two fish")
Its wrappers cc_or
and cc_and
insert "or" and "and" between the last two
elements of the input. This is cleaner than wrestling with paste
.
cc_and("this", "that", "the other") cc_or("one way", "another")
cn
and its derivatives combine these functions with sprintf
-like
substitution and the grammatical number awareness of ngettext
.
Like ngettext
, the cn
functions return different strings depending on the
number of the object, and two substitutions are made sprintf
-style:
%c
": the comma-concatenated values of the object, as in cc
%n
": the number of the objectThis encourages verbose user-facing messages from clean code.
x <- unique(iris$Species) cn_and(x, "a single species: %c", "%n unique species: %c")
There are row-wise data.frame
methods for the cn
functions.
singular <- "%n row: %c" plural <- "%n rows whose values are %c" cn(chickwts[1, ], singular, plural) cn_and(chickwts[1:3, 1, drop = FALSE], singular, plural)
The cc
functions are also available as binary infix operators.
x <- "important value" x %c% "!"
concatenate is available via CRAN.
install.packages("concatenate")
Or, get it from GitHub.
devtools::install_github("jamesdunham/concatenate")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.