Controlling display of numbers

This content has moved to vignette("numbers", package = "tibble").

`````{asis echo = FALSE}

Integrating with other classes

gt

FIXME

units

xxx{r numbers-17} library(units)

set_units.pillar_num <- function(x, ...) { unclassed <- x class(unclassed) <- NULL set_units(unclassed, ...) }

m <- set_units(1:3, m) km <- set_units(1:3, km)

tibble( sci_int = set_num_opts(m + km, notation = "sci"), digits_int = set_num_opts(km + m, digits = 4), sci_ext = set_units(num(1:3 + 0.001, notation = "sci"), km) )

tibble( sci_int = set_num_opts(m, notation = "sci") + km, digits_int = set_num_opts(km, digits = 4) + m, sci_ext = set_units(num(1:3, notation = "sci"), m) + km ) xxx

formattable

xxx{r numbers-18, error = TRUE} library(formattable)

pillar_shaft.formattable <- function(x, ...) { pillar::new_pillar_shaft_simple(format(x), align = "right") }

pillar_shaft.formattable_currency <- function(x, ...) { formattable <- attr(x, "formattable", exact = TRUE)

pillar_shaft(num(unclass(x), digits = formattable$digits)) }

pillar_shaft.formattable_percent <- function(x, ...) { formattable <- attr(x, "formattable", exact = TRUE)

pillar_shaft(num(unclass(x), digits = formattable$digits, label = "%", scale = 100)) }

pillar_shaft.formattable_scientific <- function(x, ...) { pillar_shaft(num(unclass(x), notation = "sci")) }

type_sum.formattable <- function(x) { formattable <- attr(x, "formattable", exact = TRUE)

if (inherits(x, "formattable_currency")) { I(sub("^formattable_", "", class(x)[[1]])) } else if (inherits(x, "formattable_percent")) { I("%") } else { abbreviate(sub("^formattable_", "", class(x)[[1]]), 4) } }

num_currency(1:3 * 100 + 0.1) num_percent(1:3 * 0.1 + 0.001) num_scientific(1:3 * 0.1 + 0.001)

tibble( currency = num_currency(1:3 * 100 + 0.1), percent = num_percent(1:3 * 0.1 + 0.001), scientific = num_scientific(1:3 * 0.1 + 0.001) ) xxx

scales

xxx{r numbers-scales, error = TRUE} library(scales)

x <- num(1:10 / 100, label = "%", scale = 100)

scales::squish(x)

x < 0 x < 0L

scales::cscale(x, scales::rescale_pal()) xxx

ggplot2

xxx{r numbers-19} library(ggplot2)

scale_type.pillar_num <- function(x, ...) { "continuous" }

data.frame(x = x, y = 1:10) %>% ggplot(aes(x = x, y = y)) %>% + geom_point() xxx

Rule-based decoration

xxx{r} library(dplyr)

data_units <- palmerpenguins::penguins %>% mutate(across(ends_with("_mm"), set_units, "mm")) %>% mutate(across(ends_with("_g"), set_units, "g"))

data_units %>% mutate(bill_area = bill_length_mm * bill_depth_mm, .after = island) xxx

xxx{r eval = FALSE} data_decor <- data_units %>% decorate(year, digits = 0) %>% decorate(where(is.numeric), digits = 3) xxx

xxx{r eval = FALSE} data_decor %>% mutate(bill_area = bill_length_mm * bill_depth_mm, .after = island) xxx

xxx{r echo = FALSE} data_units %>% mutate(bill_area = bill_length_mm * bill_depth_mm, .after = island) %>% mutate(across(year, set_num_opts, digits = 0)) %>% mutate(across(where(is.numeric), set_num_opts, digits = 3)) xxx

`````



Try the pillar package in your browser

Any scripts or data that you put into this service are public.

pillar documentation built on March 31, 2023, 10:19 p.m.