User-facing helper that prints a visually aligned, spicy-styled ASCII table
created by functions such as freq() or cross_tab().
It automatically adjusts column alignment, spacing, and separators for
improved readability in console outputs.
This function wraps the internal renderer build_ascii_table(), adding
optional titles, notes, and automatic alignment rules depending on the type
of table.
spicy_print_table(
x,
title = attr(x, "title"),
note = attr(x, "note"),
padding = 2L,
first_column_line = TRUE,
row_total_line = TRUE,
column_total_line = TRUE,
bottom_line = FALSE,
lines_color = "darkgrey",
align_left_cols = NULL,
align_center_cols = integer(0),
group_sep_rows = integer(0),
total_row_idx = attr(x, "total_row_idx"),
...
)Invisibly returns x, after printing the formatted ASCII table to the console.
A spicy_table or data.frame to be printed.
Optional title displayed above the table. Defaults to the
"title" attribute of x if present.
Optional note displayed below the table. Defaults to the "note"
attribute of x if present.
Non-negative integer giving the number of extra
characters added to each column's auto-computed width
(max of cell-content width and header width). Defaults to
2L. See build_ascii_table() for the precise formula and
the migration note from the pre-0.11.0 string enum.
Logical. If TRUE (the default), adds a vertical separator
after the first column.
Logical flags controlling
the presence of horizontal lines before total rows/columns or at the bottom
of the table.
Both row_total_line and column_total_line default to TRUE;
bottom_line defaults to FALSE.
Character. Color for table separators. Defaults to "darkgrey".
Only applied if the output supports ANSI colors (see crayon::has_color()).
Integer vector of column indices to left-align.
If NULL (the default), alignment is auto-detected based on x:
For freq tables -> c(1, 2)
For cross tables -> 1
Integer vector of column indices to
center-align. Defaults to integer(0).
Integer vector of row indices before which a
light dashed separator line is drawn. Defaults to integer(0).
Optional integer vector of 1-based row indices
identifying the totals rows; defaults to the "total_row_idx"
attribute of x (set by cross_tab()). See build_ascii_table().
Additional arguments passed to build_ascii_table().
spicy_print_table() detects whether the table represents frequencies
(freq-style) or cross-tabulations (cross-style) and adjusts formatting
accordingly:
For frequency tables, the first two columns (Category and Values) are left-aligned.
For cross tables, only the first column (row variable) is left-aligned.
The function supports Unicode line-drawing characters and colored separators using the crayon package, with graceful fallback to monochrome output when color is not supported. If the table exceeds the console width, it is split into stacked horizontal panels while repeating the left-most identifier columns.
build_ascii_table() for the underlying text rendering engine.
print.spicy_freq_table() for the specialized printing method used by freq().
# Simple demonstration
df <- data.frame(
Category = c("Valid", "", "Missing", "Total"),
Values = c("Yes", "No", "NA", ""),
Freq. = c(12, 8, 1, 21),
Percent = c(57.1, 38.1, 4.8, 100.0)
)
spicy_print_table(df,
title = "Frequency table: Example",
note = "Class: data.frame\nData: demo"
)
Run the code above in your browser using DataLab