Linux Build Status Windows Build status CRAN RStudio mirror downloads

prettyunits

The prettyunits package formats quantities in human readable form. Currently time units and information (i.e. bytes) are supported.

Installation

You can install the package from github:

library(devtools)
install_github("gaborcsardi/prettyunits")
library(prettyunits)
library(magrittr)

Bytes

pretty_bytes formats number of bytes in a human readable way:

pretty_bytes(1337)
##> [1] "1.34 kB"
pretty_bytes(133337)
##> [1] "133.34 kB"
pretty_bytes(13333337)
##> [1] "13.33 MB"
pretty_bytes(1333333337)
##> [1] "1.33 GB"
pretty_bytes(133333333337)
##> [1] "133.33 GB"

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()
##>  d mode        user group      size            modified         name
##>     644 gaborcsardi staff  795.00 B 2014-10-13 09:00:43 appveyor.yml
##>     644 gaborcsardi staff  561.00 B 2014-10-13 09:19:59  DESCRIPTION
##>     644 gaborcsardi staff   42.00 B 2014-10-03 15:44:54      LICENSE
##>     644 gaborcsardi staff  111.00 B 2014-10-12 23:07:32     Makefile
##>  d  755 gaborcsardi staff           2014-10-12 16:51:06          man
##>     644 gaborcsardi staff  259.00 B 2014-10-12 16:51:39    NAMESPACE
##>  d  755 gaborcsardi staff           2014-10-12 16:47:25            R
##>     644 gaborcsardi staff   4.46 kB 2014-10-13 09:04:42    README.md
##>     644 gaborcsardi staff   2.98 kB 2015-04-23 15:18:17   README.Rmd
##>     644 gaborcsardi staff   4.01 kB 2015-03-14 14:42:48         tags
##>  d  755 gaborcsardi staff           2014-10-12 15:15:48        tests

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))
##> [1] "1.3s"            "13.4s"           "2m 13.7s"        "22m 17s"        
##> [5] "15d 11h 23m 20s"
pretty_ms(c(1337, 13370, 133700, 1337000, 1337000000),
  compact = TRUE)
##> [1] "~1.3s"  "~13.4s" "~2m"    "~22m"   "~15d"
pretty_sec(c(1337, 13370, 133700, 1337000, 13370000))
##> [1] "22m 17s"          "3h 42m 50s"       "1d 13h 8m 20s"   
##> [4] "15d 11h 23m 20s"  "154d 17h 53m 20s"
pretty_sec(c(1337, 13370, 133700, 1337000, 13370000),
  compact = TRUE)
##> [1] "~22m"  "~3h"   "~1d"   "~15d"  "~154d"

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"))
##> [1] "<1 min"
vague_dt(format = "short", as.difftime(14, units = "mins"))
##> [1] "14 min"
vague_dt(format = "short", as.difftime(5, units = "hours"))
##> [1] "5 hours"
vague_dt(format = "short", as.difftime(25, units = "hours"))
##> [1] "1 day"
vague_dt(format = "short", as.difftime(5, units = "days"))
##> [1] "5 day"
now <- Sys.time()
time_ago(now)
##> [1] "moments ago"
time_ago(now - as.difftime(30, units = "secs"))
##> [1] "less than a minute ago"
time_ago(now - as.difftime(14, units = "mins"))
##> [1] "14 minutes ago"
time_ago(now - as.difftime(5, units = "hours"))
##> [1] "5 hours ago"
time_ago(now - as.difftime(25, units = "hours"))
##> [1] "a day ago"