With numeric values in vector, we can perform mixed-fraction-based formatting. There are several options for setting the accuracy of the fractions. Furthermore, there is an option for choosing a layout (i.e., typesetting style) for the mixed-fraction output.
The following options are available for controlling this type of formatting:
accuracy: how to express the fractional part of the mixed fractions; there are three keyword options for this and an allowance for arbitrary denominator settings
simplification: an option to simplify fractions whenever possible
layout: We can choose to output values with diagonal or inline fractions
digit grouping separators: options to enable/disable digit separators and provide a choice of separator symbol for the whole number portion
pattern: option to use a text pattern for decoration of the formatted mixed fractions
locale-based formatting: providing a locale ID will result in number formatting specific to the chosen locale
vec_fmt_fraction(
x,
accuracy = NULL,
simplify = TRUE,
layout = c("inline", "diagonal"),
use_seps = TRUE,
pattern = "{x}",
sep_mark = ",",
locale = NULL,
output = c("auto", "plain", "html", "latex", "rtf", "word")
)
A character vector.
A numeric vector.
The type of fractions to generate. This can either be one of
the keywords "low"
, "med"
, or "high"
(to generate fractions with
denominators of up to 1, 2, or 3 digits, respectively) or an integer value
greater than zero to obtain fractions with a fixed denominator (2
yields
halves, 3
is for thirds, 4
is quarters, etc.). For the latter option,
using simplify = TRUE
will simplify fractions where possible (e.g., 2/4
will be simplified as 1/2
). By default, the "low"
option is used.
If choosing to provide a numeric value for accuracy
, the
option to simplify the fraction (where possible) can be taken with TRUE
(the default). With FALSE
, denominators in fractions will be fixed to the
value provided in accuracy
.
For HTML output, the "inline"
layout is the default. This
layout places the numerals of the fraction on the baseline and uses a
standard slash character. The "diagonal"
layout will generate fractions
that are typeset with raised/lowered numerals and a virgule.
An option to use digit group separators. The type of digit
group separator is set by sep_mark
and overridden if a locale ID is
provided to locale
. This setting is TRUE
by default.
A formatting pattern that allows for decoration of the
formatted value. The value itself is represented by {x}
and all other
characters are taken to be string literals.
The mark to use as a separator between groups of digits
(e.g., using sep_mark = ","
with 1000
would result in a formatted value
of 1,000
).
An optional locale ID that can be used for formatting the value
according the locale's rules. Examples include "en_US"
for English
(United States) and "fr_FR"
for French (France). The use of a valid
locale ID will override any values provided in sep_mark
and dec_mark
.
We can use the info_locales()
function as a useful reference for all of
the locales that are supported.
The output style of the resulting character vector. This can
either be "auto"
(the default), "plain"
, "html"
, "latex"
, "rtf"
,
or "word"
. In knitr rendering (i.e., Quarto or R Markdown), the
"auto"
option will choose the correct output
value
Let's create a numeric vector for the next few examples:
num_vals <- c(0.0052, 0.08, 0, -0.535, NA)
Using vec_fmt_fraction()
will create a character vector of fractions. Any
NA
values will render as "NA"
. The rendering context will be autodetected
unless specified in the output
argument (here, it is of the "plain"
output type).
vec_fmt_fraction(num_vals)
#> [1] "0" "1/9" "0" "-5/9" "NA"
There are many options for formatting as fractions. If you'd like a higher
degree of accuracy in the computation of fractions we can supply the "med"
or "high"
keywords to the accuracy
argument:
vec_fmt_fraction(num_vals, accuracy = "high")
#> [1] "1/200" "2/25" "0" "-107/200" "NA"
As a last example, one can wrap the values in a pattern with the pattern
argument. Note here that NA
values won't have the pattern applied.
vec_fmt_fraction(num_vals, accuracy = 8, pattern = "[{x}]")
#> [1] "[0]" "[1/8]" "[0]" "[-1/2]" "NA"
14-7
Other vector formatting functions:
vec_fmt_bytes()
,
vec_fmt_currency()
,
vec_fmt_datetime()
,
vec_fmt_date()
,
vec_fmt_duration()
,
vec_fmt_engineering()
,
vec_fmt_integer()
,
vec_fmt_markdown()
,
vec_fmt_number()
,
vec_fmt_partsper()
,
vec_fmt_percent()
,
vec_fmt_scientific()
,
vec_fmt_time()