Skip to content

Add get_XXX() functions to extract post-processed results (to facilitate QC work) #1441

@dereksonderegger

Description

@dereksonderegger

At posit::conf(2023), Rich and I talked about this issue and Rich asked me to open a feature request outlining this.

My issue is that while doing Quality Control work for pharmacutical tables, we are often required to show that the table we just produced is identical to one produced under a previous version of the code. Another case is verifying that the table produced by the primary and validation programmer match. However, we can't just compare the guts of the gt object because "there is more than one way to do it."

For example, my primary and validation programmers might have each coded up a table and we need to compare them to show that the displayed outputs are identical:

library(tidyverse)
library(gt)
# data to be shown, all irrational numbers
test_data <- data.frame(
  group1 = c('A','A','B','B'),
  group2 = c('M','F','M','F'),
  value  = c(1/17, 2/17, 3/17, 4/17)
)

### Two different approaches to making a table and doing the rounding
# Do the rounding first, and then pass into gt
gt1 <- 
  test_data |>
  mutate(value = round(value, digits=2) |> paste() ) |>
  pivot_wider( names_from=group2, values_from=value) |>
  gt()
# Let gt do the rounding for me
gt2 <- 
  test_data |>
  pivot_wider( names_from=group2, values_from=value) |>
  gt() |>
  fmt_number(columns=c('M','F'),  decimals=2)
  

# But even though these tables produce the same result, 
# the internal data isn't the same and I can't just do
# Quality Control work by grabbing internal bits because those
# are the pre-processed information
gt1$`_data`
#> # A tibble: 2 × 3
#>   group1 M     F    
#>   <chr>  <chr> <chr>
#> 1 A      0.06  0.12 
#> 2 B      0.18  0.24
gt2$`_data`
#> # A tibble: 2 × 3
#>   group1      M     F
#>   <chr>   <dbl> <dbl>
#> 1 A      0.0588 0.118
#> 2 B      0.176  0.235
Created on 2023-09-22 with [reprex v2.0.2](https://reprex.tidyverse.org/)

Having a set of get_body(), get_column_labels(), etc that capture and extract the post-processed result so that we can write tests against will be massively beneficial for QC.

Metadata

Metadata

Assignees

Type

No type

Projects

Status

Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions