-
Notifications
You must be signed in to change notification settings - Fork 0
/
README.Rmd
115 lines (84 loc) · 3.3 KB
/
README.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
---
output: github_document
---
<!-- README.md is generated from README.Rmd. Please edit that file -->
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-",
out.width = "100%"
)
# remotes::install_github("GuangchuangYu/badger")
library(badger)
```
# plu <img src="man/figures/logo.png?raw=TRUE" align="right" height="138" />
<!-- badges: start -->
`r badge_cran_release(color = "brightgreen")`
`r badge_lifecycle("stable")`
`r badge_license(color = "blueviolet")`
`r badge_github_actions()`
[![](https://codecov.io/gh/rossellhayes/plu/branch/main/graph/badge.svg)](https://app.codecov.io/gh/rossellhayes/plu)
`r badge_dependencies()`
`r badge_codefactor()`
<!-- badges: end -->
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](https://cran.r-project.org/package=plu) with:
```{r eval = FALSE}
install.packages("plu")
```
You can install the development version of **plu** from [GitHub](https://github.com/rossellhayes/plu) with:
```{r eval = FALSE}
# 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.
```{r setup, include = FALSE}
x <- 1:9
```
With one problem, **plu** constructs a message in the singular:
```{r}
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])
)
```
But with two problems, the same code will construct a message in the plural:
```{r}
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])
)
```
If you expect a lot of problems, you can use `plu::more()` to limit the number of displayed issues:
```{r}
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."
)
```
## Credits
Hex sticker font is [Bodoni*](https://github.com/indestructible-type/Bodoni)
by [indestructible type*](https://indestructibletype.com/Home.html).
Image adapted from icon made by [Freepik](https://www.freepik.com) from
[flaticon.com](https://www.flaticon.com/free-icon/umbrella_2357382).
---
Please note that the **plu** project is released with a [Contributor Code of Conduct](https://contributor-covenant.org/version/2/0/CODE_OF_CONDUCT.html). By contributing to this project, you agree to abide by its terms.