Giter Club home page Giter Club logo

concatenate's Introduction

Build Status CRAN_Status_Badge

Functions in concatenate construct human-friendly text from elements whose values aren't known in advance, as in calls to message, warning or stop.

Basics

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")
#> [1] "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")
#> [1] "this, that and the other"
cc_or("one way", "another")
#> [1] "one way or 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 object

This encourages verbose user-facing messages from clean code.

x <- unique(iris$Species)
cn_and(x, "a single species: %c", "%n unique species: %c")
#> [1] "3 unique species: setosa, versicolor and virginica"

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)
#> [1] "1 row: 179, horsebean"
cn_and(chickwts[1:3, 1, drop = FALSE], singular, plural)
#> [1] "3 rows whose values are 179, 160 and 136"

The cc functions are also available as binary infix operators.

x <- "important value"
x %c% "!"
#> [1] "important value!"

Install

concatenate is available via CRAN.

install.packages("concatenate")

Or, get it from GitHub.

devtools::install_github("jamesdunham/concatenate")

concatenate's People

Contributors

jamesdunham avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Forkers

franz-maikaefer

concatenate's Issues

specify string to bracket names?

very cool and useful package

have you considered adding an argument to the various functions that allows the user to specify a character or pair of characters to bracket the terms?

ie

> cc_or(1:3)
[1] "1, 2 or 3"
> cc_or(1:3, br = "'")
[1] "'1', '2' or '3'"
> cc_or(1:3, br = c("(",")"))
[1] "(1), (2) or (3)"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.