Provides a 'pillar' generic designed for formatting columns of data using the full range of colours provided by modern terminals.
pillar provides tools for styling columns of data, artfully using colour and unicode characters to guide the eye.
pillar is not designed for end-users but will eventually be incorporated in packages like tibble.
library(pillar)x <- 123456789 * (10 ^ c(1, -3, -5, NA, -8, -10))pillar(x)#> <dbl>#> 1234567890#> 123457#> 1235#> NA#> 1.23#> 0.0123
If you render this in a console that supports colour, you'll see something that looks like this:
The primary user of this package is tibble, which in the current development version already lets pillar do all the formatting work. Packages that implement a data type to be used in a tibble column can add color with only a few changes:
pillar_shaft()method for your data type.
Suggestsand implement dynamic method registration
Imports, and import the methods you override with a regular
tidyverse/hms#43 shows the changes that were necessary to add colored output for the hms package:
pillar.Rfor the actual implementation (old name
DESCRIPTIONfor the dependency
zzz.Rfor the dynamic method registration
Some more detail is given below.
This method accepts a vector of arbitrary length and is expected to return an S3 object with the following properties:
"min_width", if missing,
format(x, width, ...)that can be called with any value between
characterand has attributes
"align"(with supported values
new_pillar_shaft() returns such an object, and also correctly formats
NA values. In many cases, the implementation of
pillar_shaft.your_class_name() will format the data as a character vector (using color for emphasis) and simply call
pillar_shaft.numeric() for a code that allows changing the display depending on the available width.
style_neg()to format negative values
style_num()to format numbers
If you avoid the strong dependency on pillar, you need a helper,
register_s3_method(), which you can borrow e.g. from hms. In
.onLoad(), call this helper as follows:
register_s3_method("pillar", "pillar_shaft", "your_class_name")
"your_class_name" with the name of the S3 class of your data type.
The earliest use of unicode characters to generate sparklines appears to be from 2009.
Exercising these ideas to their fullest requires a font with good support for block drawing characters. PragamataPro is one such font.
NAvalues are now shown in plain red, without changing the background color (#70).
pillar.sigfigto control the number of significant digits, for highlighting and truncation (#72),
pillar.subtleto specify if insignificant digits should be printed in gray (#72),
pillar.negto specify if negative digits should be printed in red,
pillar.boldto specify if column headers should be printed in bold (default:
pillar.min_title_charsto specify the minimum number of characters to display for each column name (default: 15 characters, #75).
digits.secsoption is set (#74).
pillar(x, title = NULL, width = NULL, ...) colonnade(x, has_row_id = TRUE, width = NULL, ...) squeeze(x, width = NULL, ...)
new_pillar_shaft_simple(formatted, ..., width = NULL, align = "left", min_width = NULL, na_indent = 0L) new_pillar_shaft(x, ..., width, min_width = width, subclass) new_ornament(x, width = NULL, align = NULL) get_extent(x) get_max_extent(x)
dim_desc(x) style_na(x) style_neg(x) style_num(x, negative, significant = rep_along(x, TRUE)) style_subtle(x)
expect_known_display(object, file, ..., width = 80L, crayon = TRUE)
pillar_shaft(x, ...) # AsIs, Date, POSIXt, character, default, list, logical, numeric type_sum(x) # AsIs, Date, POSIXct, data.frame, default, difftime, factor, ordered is_vector_s3(x) # Date, POSIXct, data.frame, default, difftime, factor, ordered obj_sum(x) # AsIs, POSIXlt, default, list extra_cols(x, ...) # squeezed_colonnade