knitr::opts_chunk$set(
  comment = "##>",
  tidy = FALSE,
  error = FALSE)

R-CMD-check Codecov test coverage CRAN RStudio mirror downloads

prettyunits

The prettyunits package formats quantities in human readable form.

Installation

You can install the package from CRAN:

install.packages("prettyunits")

If you need the development version, install it from GitHub:

pak::pak("r-lib/prettyunits")
library(prettyunits)
library(magrittr)

Bytes

pretty_bytes formats number of bytes in a human readable way:

pretty_bytes(1337)
pretty_bytes(133337)
pretty_bytes(13333337)
pretty_bytes(1333333337)
pretty_bytes(133333333337)

Here is a simple function that emulates the Unix ls command, with nicely formatted file sizes:

uls <- function(path = ".") {
  files <- dir(path)
  info <- files %>%
    lapply(file.info) %>%
    do.call(what = rbind)
  info$size <- pretty_bytes(info$size)
  df <- data.frame(d = ifelse(info$isdir, "d", " "),
    mode = as.character(info$mode), user = info$uname, group = info$grname,
    size = ifelse(info$isdir, "", info$size), modified = info$mtime, name = files)
  print(df, row.names = FALSE)
}
uls()

Quantities

pretty_num formats number related to linear quantities in a human readable way:

pretty_num(1337)
pretty_num(-133337)
pretty_num(1333.37e-9)

Be aware that the result is wrong in case of surface or volumes, and for any non-linear quantity.

Here is a simple example of how to prettify a entire tibble

library(tidyverse)
tdf <- tribble( ~name, ~`size in m`, ~`speed in m/s`,
                "land snail", 0.075, 0.001,
                "photon", NA,  299792458,
                "African plate", 10546330, 0.000000000681)
tdf %>% mutate(across(where(is.numeric), pretty_num))

Time intervals

pretty_ms formats a time interval given in milliseconds. pretty_sec does the same for seconds, and pretty_dt for difftime objects. The optional compact argument turns on a compact, approximate format.

pretty_ms(c(1337, 13370, 133700, 1337000, 1337000000))
pretty_ms(c(1337, 13370, 133700, 1337000, 1337000000),
  compact = TRUE)
pretty_sec(c(1337, 13370, 133700, 1337000, 13370000))
pretty_sec(c(1337, 13370, 133700, 1337000, 13370000),
  compact = TRUE)

Vague time intervals

vague_dt and time_ago formats time intervals using a vague format, omitting smaller units. They both have three formats: default, short and terse. vague_dt takes a difftime object, and time_ago works relatively to the specified date.

vague_dt(format = "short", as.difftime(30, units = "secs"))
vague_dt(format = "short", as.difftime(14, units = "mins"))
vague_dt(format = "short", as.difftime(5, units = "hours"))
vague_dt(format = "short", as.difftime(25, units = "hours"))
vague_dt(format = "short", as.difftime(5, units = "days"))
now <- Sys.time()
time_ago(now)
time_ago(now - as.difftime(30, units = "secs"))
time_ago(now - as.difftime(14, units = "mins"))
time_ago(now - as.difftime(5, units = "hours"))
time_ago(now - as.difftime(25, units = "hours"))

Rounding

pretty_round() and pretty_signif() preserve trailing zeros.

pretty_round(1, digits=6)
pretty_signif(c(99, 0.9999), digits=3)

p-values

pretty_p_value() rounds small p-values to indicate less than significance level for small values.

pretty_p_value(c(0.05, 0.0000001, NA))

Colors

pretty_color converts colors from other representations to human-readable names.

pretty_color("black")
pretty_color("#123456")


r-lib/prettyunits documentation built on March 9, 2024, 5:03 p.m.