Newly introduced error when adding multiple risk difference comparisons at once
jknizia opened this issue · comments
Description
I am working on a function that creates a Tplyr table. One parameter expects a list of character vectors, containing comparison groups that will be passed on to the add_risk_diff
function of {Tplyr}. The reason why the vectors are stored in a list is that I want to allow for specifying multiple comparisons. I then add the comparisons by means of the do.call
function (see reprex below). I repeat this for two table layers. This worked perfectly fine with {Tplyr} version 1.1.0, however with version 1.2.0 and above I get the following error message:
I add layers by using the add_layers
function. The error only appears when I add both layers or only the second layer. When I add only the first layer, it works fine.
Steps to Reproduce (Bug Report Only)
Here's a reproducible example:
adae <- random.cdisc.data::cadae
# Initiate table structure
structure <- Tplyr::tplyr_table(
adae,
treat_var = ARM,
where = (SAFFL == "Y" & AESER == "Y")
)
# Create table layers
layer1 <- structure |>
Tplyr::group_count("Any SAE") |>
Tplyr::set_distinct_by(USUBJID)
layer2 <- structure |>
Tplyr::group_count(vars(AESOC, AEDECOD)) |>
Tplyr::set_distinct_by(USUBJID) |>
Tplyr::set_nest_count(TRUE)
# Add multiple risk difference columns at once to each layer
rd_pairs <- list(c("A: Drug X", "B: Placebo"), c("A: Drug X", "C: Combination"))
layer1 <- do.call(Tplyr::add_risk_diff, args = append(list(layer = layer1), rd_pairs))
layer2 <- do.call(Tplyr::add_risk_diff, args = append(list(layer = layer2), rd_pairs))
# Build table
table <- structure |>
Tplyr::add_layers(layer1, layer2) |>
Tplyr::build()
table
Expected behavior: My approach works with {Tplyr} versions >= 1.1.0
Actual behavior: It crashes since version 1.2.0 (Note:
Versions
Note: Session Info lists {Tplyr} version 1.2.1, but I have tried it with 1.2.0 as well - same error.
R version 4.2.2 (2022-10-31 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19045)
Matrix products: default
locale:
[1] LC_COLLATE=German_Germany.utf8 LC_CTYPE=German_Germany.utf8
[3] LC_MONETARY=German_Germany.utf8 LC_NUMERIC=C
[5] LC_TIME=German_Germany.utf8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] falcon_0.1.0.9053 testthat_3.1.10 tern_0.9.3 rtables_0.6.6
[5] magrittr_2.0.3 formatters_0.5.5
loaded via a namespace (and not attached):
[1] httr_1.4.5 pkgload_1.3.2 tidyr_1.3.1
[4] jsonlite_1.8.7 splines_4.2.2 brio_1.1.3
[7] assertthat_0.2.1 shiny_1.7.5 Rdpack_2.4
[10] remotes_2.4.2 sessioninfo_1.2.2 pillar_1.9.0
[13] backports_1.4.1 lattice_0.20-45 glue_1.6.2
[16] digest_0.6.31 promises_1.2.0.1 rbibutils_2.2.13
[19] checkmate_2.1.0 tfrmt_0.0.3 colorspace_2.1-0
[22] cowplot_1.1.1 htmltools_0.5.4 httpuv_1.6.9
[25] Matrix_1.5-1 pkgconfig_2.0.3 devtools_2.4.5
[28] broom_1.0.5 purrr_1.0.2 xtable_1.8-4
[31] scales_1.2.1 processx_3.8.2 later_1.3.0
[34] timechange_0.2.0 tibble_3.2.1 generics_0.1.3
[37] ggplot2_3.4.4 usethis_2.1.6 ellipsis_0.3.2
[40] gtsummary_1.7.2 cachem_1.0.7 withr_3.0.0
[43] rlistings_0.2.7 Tplyr_1.2.1 cli_3.6.2
[46] survival_3.4-0 crayon_1.5.2 mime_0.12
[49] memoise_2.0.1 ps_1.7.2 fs_1.6.2
[52] fansi_1.0.6 broom.helpers_1.14.0 forcats_1.0.0
[55] xml2_1.3.3 pkgbuild_1.4.0 profvis_0.3.7
[58] tools_4.2.2 prettyunits_1.1.1 lifecycle_1.0.4
[61] stringr_1.5.1 munsell_0.5.0 callr_3.7.3
[64] random.cdisc.data_0.3.14 compiler_4.2.2 rlang_1.1.3
[67] grid_4.2.2 gt_0.9.0 rstudioapi_0.14
[70] htmlwidgets_1.6.1 miniUI_0.1.1.1 gtable_0.3.3
[73] R6_2.5.1 lubridate_1.9.3 knitr_1.42
[76] dplyr_1.1.4 fastmap_1.1.1 utf8_1.2.4
[79] rprojroot_2.0.3 desc_1.4.2 stringi_1.7.12
[82] Rcpp_1.0.10 vctrs_0.6.5 tidyselect_1.2.0
[85] xfun_0.37 urlchecker_1.0.1
Thanks for your help!
Adding a reprex of the issue:
library(tidyverse)
library(haven)
library(Tplyr)
adae <- haven::read_xpt(url("https://github.com/phuse-org/TestDataFactory/raw/main/Updated/TDF_ADaM/adae.xpt"))
# Create the Tplyr Table
t <- tplyr_table(adae, TRTA) %>%
add_layer(
group_count(vars(AEBODSYS, AEDECOD)) %>%
set_distinct_by(USUBJID) %>%
# Create nested formatting
add_risk_diff(
c('Xanomeline High Dose', 'Placebo'),
c('Xanomeline Low Dose', 'Placebo')
)
)
# Build the Tplyr table to get the data
# Suppress warning messages from risk difference calculations
t_df <- t %>% build()