Convert numbers to ratio character vectors (two to one, one in three, five out of ten)

ratio(x, sep = "in", max_n = Inf, negative = "negative", ...)

nom_ratio(x, sep = "in", max_n = Inf, negative = "negative", ...)

Arguments

x

A numeric vector

sep

A character vector separating components of the ratio. Defaults to "in".

max_n

A numeric vector. When the absolute value of x is greater than max_n, x remains numeric instead of being converted to words. If max_n is negative, no xs will be converted to words. (This can be useful when max_n is passed by another function.) Defaults to Inf, which converts all xs to words.

negative

A character vector to append to negative numbers. Defaults to "negative".

...

Arguments passed on to fracture::frac_mat

denom

If denom is not NULL, all fractions will have a denominator of denom. This will ignore all other arguments that affect the denominator.

base_10

If TRUE, all denominators will be a power of 10.

common_denom

If TRUE, all fractions will have the same denominator.

If the least common denominator is greater than max_denom, max_denom is used.

max_denom

All denominators will be less than or equal to max_denom.

If base_10 is TRUE, the maximum denominator will be the largest power of 10 less than max_denom.

A max_denom greater than the inverse square root of machine double epsilon will produce a warning because floating point rounding errors can occur when denominators grow too large.

Value

A character vector of the same length as x

Details

x is converted to a fraction by fracture::frac_mat().

See also

Other number names: adverbial(), cardinal(), collective(), denominator(), numerator(), ordinal()

Examples

paste0("Our team is outnumbered ", nom_ratio(10), ".")
#> [1] "Our team is outnumbered ten in one."
paste0("The chances of winning are ", nom_ratio(1/1000000, sep = "in"), ".")
#> [1] "The chances of winning are one in one million."

nom_ratio(c(1, 10, 100))
#> [1] "one in one"         "ten in one"         "one hundred in one"
nom_ratio(c(0, 0.5, 1.5))
#> [1] "zero in one"  "one in two"   "three in two"
nom_ratio(c(0, 0.125, 0.625, 1), sep = "out of", common_denom = TRUE)
#> [1] "zero out of eight"  "one out of eight"   "five out of eight" 
#> [4] "eight out of eight"
nom_ratio(5 / 10, sep = "in", base_10 = TRUE)
#> [1] "five in ten"
nom_ratio(6 / 25, sep = "in")
#> [1] "six in twenty-five"
nom_ratio(6 / 25, sep = "out of", max_denom = 10)
#> [1] "one out of four"