Skip to content

rossellhayes/plu

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
R
 
 
 
 
 
 
 
 
man
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

plu

License: MIT R build status Dependencies CodeFactor

Pluralize phrases in R

Overview

plu provides a simplified way to dynamically generate plain-language messages in R when we can’t know beforehand whether a message will be singular or plural.

Pluralizes English phrases based on the length of an associated vector. Contains helper functions to create natural language lists from vectors and to include the length of a vector in natural language.

Installation

You can install the stable release of plu from CRAN with:

install.packages("plu")

You can install the development version of plu from GitHub with:

# install.packages("remotes")
remotes::install_github("rossellhayes/plu")

Usage

plu can be particularly useful when constructing error messages. For example, you may want to create a message that is gramatically correct regardless of whether the user’s code had one problem or multiple problems.

With one problem, plu constructs a message in the singular:

arguments <- c(1, 2, 3, 3.5)

paste(
  "All arguments must be integers.",
  plu::ral("Argument", arguments[arguments %% 1 != 0]), 
  and::and(encodeString(arguments[arguments %% 1 != 0], quote = "`")),
  plu::ral("isn't an integer.", arguments[arguments %% 1 != 0])
)
#> [1] "All arguments must be integers. Argument `3.5` isn't an integer."

But with two problems, the same code will construct a message in the plural:

arguments <- c(1, 2, 3, 3.5, 3.75)

paste(
  "All arguments must be integers.",
  plu::ral("Argument", arguments[arguments %% 1 != 0]), 
  and::and(encodeString(arguments[arguments %% 1 != 0], quote = "`")),
  plu::ral("isn't an integer.", arguments[arguments %% 1 != 0])
)
#> [1] "All arguments must be integers. Arguments `3.5` and `3.75` aren't integers."

If you expect a lot of problems, you can use plu::more() to limit the number of displayed issues:

ints <- as.integer(runif(20, -10, 10))
paste(
  "All inputs must be non-negative.",
  and::and(plu::more(encodeString(ints[ints < 0], quote = "`"), type = "integer")),
  plu::ral("is", ints[ints < 0]), "negative."
)
#> [1] "All inputs must be non-negative. `-3`, `-2`, `-3`, `-5`, `-7`, and 6 more integers are negative."

Credits

Hex sticker font is Bodoni* by indestructible type*.

Image adapted from icon made by Freepik from flaticon.com.


Please note that the plu project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.

About

Dynamically pluralize phrases in R

Topics

Resources

License

Unknown, Unknown licenses found

Licenses found

Unknown
LICENSE
Unknown
LICENSE.md

Code of conduct

Stars

Watchers

Forks

Languages