--- title: "Getting Started" output: rmarkdown::html_vignette: toc: true vignette: > %\VignetteIndexEntry{Getting Started} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = FALSE, comment = NULL ) options(cli.unicode = FALSE) options(crayon.enabled = TRUE) ansi_aware_handler = function(x, options) { paste0( "
",
fansi::sgr_to_html(x = x, warn = FALSE, term.cap = "256"),
""
)
}
knitr::knit_hooks$set(
output = ansi_aware_handler,
message = ansi_aware_handler,
warning = ansi_aware_handler,
error = ansi_aware_handler
)
knitr::opts_chunk$set(
collapse = TRUE,
# comment = "#>",
comment = NA,
# fig.path = "man/figures/README-",
out.width = "100%"
)
library(tabstats)
```
## Rationale
`{tabstats}` is a lightweight package for displaying data in clean, formatted tables directly in the console. It is mainly designed for developers who wants to display their outputs (preferably in a data frame object), and to make the output readable at a glance, configurable without boilerplate, and friendly to interactive workflows.
The package provides four main functions:
| Function | Purpose |
|-------------------|--------------------------------------------|
| `table_default()` | General-purpose data frame table |
| `table_summary()` | Two-column key-value summary table |
| `corr_matrix()` | Correlation matrix display |
| `cross_table()` | Cross tabulation with optional percentages |
All functions share a common design philosophy:
1. **Styling** is controlled via a `style = list(...)` argument that accepts either predefined style strings (e.g. `"blue_bold"`) or plain lambda functions (e.g. `\(x) cli::col_red(x)`).
2. **Alignment** is controlled via an `align` argument that accepts a single string, a length-2 vector, or a named list.
3. **Centering** is controlled via `center_table = TRUE`, which automatically pads the output to the middle of your terminal.
## Installation
Install the following package from CRAN:
```{r, eval = FALSE}
install.packages("tabstats")
```
Or install the development version from GitHub:
```{r eval = FALSE}
# install.packages("pak")
pak::pak("joshuamarie/tabstats")
## devtools::install_github("joshuamarie/tabstats")
```
## A Quick Tour
The main API of this package displays the data you wanted to display into a specific format
### `table_default()`
Data frames usually looks like this when displayed:
```{r}
head(mtcars[, 1:5], 5)
```
With `table_default()`, the data frame is now displayed in an APA-style format, with configurable formatting.
```{r}
table_default(head(mtcars[, 1:5], 5))
```
### `table_summary()`
Another form of `table_default()`, except it is best suitable for displaying summarized data, where it requires 2 columns data frame. The simplest use case is a named summary of values, like model diagnostics or descriptive statistics, where the 1st column is the name of the parameter (statistic) while the 2nd column is the estimate.
```{r}
df = data.frame(
Statistic = c("N", "Mean", "SD", "Min", "Max"),
Value = c("100", "3.45", "1.20", "1.00", "6.00")
)
table_summary(
df,
title = "Descriptive Statistics",
header = TRUE
)
```
*The `header` means you still wanted to display the column names from the original `df` data frame, otherwise, no column names are present. *
### `corr_matrix()`
A much complex but niche function to display the matrix, specifically designed for correlation matrices. If the `display` is a correlation matrix, typically the output of `cor()`, you can directly pass it.
```{r}
corr_matrix(cor(mtcars[, 1:4]), method = "Pearson")
```
But, if the data you wanted to display is not a matrix, but on another form, you're going to have to configure it by building a custom spec with `new_corr_data()` for full control over which values to appear.
A wild example, assuming you want to display the output from `rstatix::cor_test()`:
```{r}
cor_mat =
iris |>
rstatix::cor_test(Sepal.Width, Sepal.Length, Petal.Length) |>
dplyr::mutate(
var1,
var2,
cor = format(cor, digits = 2),
statistic = format(statistic, digits = 2),
conf_int = paste0(
"[",
format(conf.low, digits = 2),
", ",
format(conf.high, digits = 2),
"]"
),
.keep = "unused"
)
cor_mat |>
with({
corr_matrix(
new_corr_data(
var1 = var1,
var2 = var2,
corr = cor,
statistic = statistic,
pval = p,
conf_int = conf_int
),
title = "Pearson Correlation Matrix"
)
})
```
### `cross_table()`
Another nice function to display the matrices — contingency tables, to be exact. It has (almost) everything to display the contingency table, including the observed frequencies, expected values, and percentages side by side.
```{r}
m = matrix(
c(10, 20, 30, 40),
nrow = 2,
dimnames = list(
c("A", "B"),
c("X", "Y")
)
)
cross_table(m, percentage = "all")
```
## Styling Primer
All table functions provides an API to style the table.
1. `table_default()` has 2 parameters: `style_colnames` to style the column names you wanted to design, and `style_columns` if you want to apply the style to the entire column you choose to style. Use `td_style()` to configure the style of the column you choose to style.
2. `table_summary()` has a `style` parameter to configure the style of the specific column you wanted to design. Use `sm_style()` to configure the style of the specific column.
3. `cross_table()` has a `style` parameter to configure the style of the data displayed by the function. Use `ct_style()` to configure the style of the displayed values.
4. `corr_matrix()` has a `style` parameter to configure the style of the values you entered, typically from the `display` argument using `new_corr_data()`. Use `cm_style()` to configure those values you assigned into `new_corr_data()` into the displayed table.
The quickest way to style output is with a named string:
```{r}
table_summary(
df,
title = "Descriptive Statistics",
header = TRUE,
style = sm_style(
left_col = "blue_bold",
right_col = "green",
title = "bold",
sep = ": "
)
)
```
For full control, pass a lambda instead — it receives the text as its argument:
```{r}
table_summary(
df,
title = "Descriptive Statistics",
header = TRUE,
style = sm_style(
left_col = \(x) cli::col_red(cli::style_bold(x)),
right_col = \(x) cli::col_cyan(x),
title = "bold",
sep = ": "
)
)
```
Supported named style strings:
| String | Effect |
|------------------------------------------|-------------------------------------|
| `"bold"` | Bold text |
| `"italic"` | Italic text |
| `"blue"`, `"red"`, `"green"`, `"yellow"` | Foreground colour |
| `"blue_bold"` | Colour + bold (combinable with `_`) |
| `"red_italic"` | Colour + italic |
More example: Imagine you want to apply for the p-value of the output from `rstatix::cor_test()`, an earlier example. In `corr_matrix()`, you can even conditionally format the specified value from `new_corr_data()`.
```{r}
cor_mat |>
with({
corr_matrix(
new_corr_data(
var1 = var1,
var2 = var2,
corr = cor,
statistic = statistic,
pval = p,
conf_int = conf_int
),
title = "Pearson Correlation Matrix",
style = cm_style(
pval = function(x) {
x_num = as.numeric(x)
if (is.na(x_num) || x_num > 0.05) {
cli::style_italic(x)
} else if (x_num > 0.01) {
cli::col_red(x)
} else {
cli::style_bold("<0.001")
}
}
)
)
})
```