Often when outputting stuff to a package user, the question arises: how much effort could I be bothered to put into formatting the output? The format()
function in R has some really nice stuff for this, in particular: alignment.
So today I’m outputting a list of packages to be updated:
arrow 5.0.0.2 -> 6.0.0.2
broom 0.7.7 -> 0.7.9
cachem 1.0.5 -> 1.0.6
cli 3.0.1 -> 3.1.0
crayon 1.4.1 -> 1.4.2
desc 1.3.0 -> 1.4.0
e1071 1.7-8 -> 1.7-9
future 1.22.1 -> 1.23.0
gargle 1.1.0 -> 1.2.0
generics 0.1.0 -> 0.1.1
gert 1.3.2 -> 1.4.1
googledrive 1.0.1 -> 2.0.0
googlesheets4 0.3.0 -> 1.0.0
haven 2.4.1 -> 2.4.3
htmltools 0.5.1.1 -> 0.5.2
jsonvalidate 1.1.0 -> 1.3.1
knitr 1.34 -> 1.36
lattice 0.20-44 -> 0.20-45
lubridate 1.7.10 -> 1.8.0
lwgeom 0.2-7 -> 0.2-8
mime 0.11 -> 0.12
osmdata 0.1.6.007 -> 0.1.8
paws.common 0.3.12 -> 0.3.14
pillar 1.6.3 -> 1.6.4
pkgload 1.2.1 -> 1.2.3
qfesdata 0.2.9011 -> 0.2.9030
reprex 2.0.0 -> 2.0.1
rmarkdown 2.9 -> 2.10
roxygen2 7.1.1 -> 7.1.2
RPostgres 1.3.3 -> 1.4.1
rvest 1.0.1 -> 1.0.2
sf 1.0-2 -> 1.0-3
sodium 1.1 -> 1.2.0
stringi 1.7.4 -> 1.7.5
tarchetypes 0.2.0 -> 0.3.2
targets 0.7.0.9001 -> 0.8.1
tibble 3.1.4 -> 3.1.5
tinytex 0.32 -> 0.33
travelr 0.7.5 -> 0.9.1
tzdb 0.1.2 -> 0.2.0
usethis 2.0.1 -> 2.1.3
xfun 0.24 -> 0.27
Made by this code:
cat(
paste(
lockfile_deps$name,
lockfile_deps$version_lib,
" -> ",
lockfile_deps$version_lock
),
sep = "\n"
)
And one thing that would make it look a bit less amateurish is alignment. I laboured over this sort of stuff years ago when I wrote {datapasta}
making really hard work of it - it was the source of an infamous recurring bug. This was partly because I didn’t know that if you call format()
on a character vector it automatically pads all your strings to the same length:
e.g.
cat(
paste(
format(lockfile_deps$name),
format(lockfile_deps$version_lib),
" -> ",
format(lockfile_deps$version_lock)
),
sep = "\n"
)
Makes the output look like:
arrow 5.0.0.2 -> 6.0.0.2
broom 0.7.7 -> 0.7.9
cachem 1.0.5 -> 1.0.6
cli 3.0.1 -> 3.1.0
crayon 1.4.1 -> 1.4.2
desc 1.3.0 -> 1.4.0
e1071 1.7-8 -> 1.7-9
future 1.22.1 -> 1.23.0
gargle 1.1.0 -> 1.2.0
generics 0.1.0 -> 0.1.1
gert 1.3.2 -> 1.4.1
googledrive 1.0.1 -> 2.0.0
googlesheets4 0.3.0 -> 1.0.0
haven 2.4.1 -> 2.4.3
htmltools 0.5.1.1 -> 0.5.2
jsonvalidate 1.1.0 -> 1.3.1
knitr 1.34 -> 1.36
lattice 0.20-44 -> 0.20-45
lubridate 1.7.10 -> 1.8.0
lwgeom 0.2-7 -> 0.2-8
mime 0.11 -> 0.12
osmdata 0.1.6.007 -> 0.1.8
paws.common 0.3.12 -> 0.3.14
pillar 1.6.3 -> 1.6.4
pkgload 1.2.1 -> 1.2.3
qfesdata 0.2.9011 -> 0.2.9030
reprex 2.0.0 -> 2.0.1
rmarkdown 2.9 -> 2.10
roxygen2 7.1.1 -> 7.1.2
RPostgres 1.3.3 -> 1.4.1
rvest 1.0.1 -> 1.0.2
sf 1.0-2 -> 1.0-3
sodium 1.1 -> 1.2.0
stringi 1.7.4 -> 1.7.5
tarchetypes 0.2.0 -> 0.3.2
targets 0.7.0.9001 -> 0.8.1
tibble 3.1.4 -> 3.1.5
tinytex 0.32 -> 0.33
travelr 0.7.5 -> 0.9.1
tzdb 0.1.2 -> 0.2.0
usethis 2.0.1 -> 2.1.3
xfun 0.24 -> 0.27
Cool hey?