teal.modules.clinical icon indicating copy to clipboard operation
teal.modules.clinical copied to clipboard

[Feature Request]: Display output in the order of the coded selected variables

Open nsteed15 opened this issue 1 year ago • 1 comments

Feature description

It would be nice if the selected variables in the summarize_vars argument would be displayed in the order that they are programmed. For example in this code below, I have selected c('SEX', 'COUNTRY', 'AGE','RACE') and I want the demographic table to be displayed in that order. But the order that is displayed is not in this order, it is displayed by the order of the variables in the choices argument, if that makes sense. Often studies want the ability to have a large choices selection and it doesn't make sense to order this list manually. So I want the demographic table to be in the order 'SEX', 'COUNTRY', 'AGE','RACE', but it is actually displayed in the order 'AGE', 'SEX', 'RACE', 'COUNTRY'.

library(shiny)
library(teal.widgets)
library(teal.modules.clinical)


get_fact_vars <- function(data) {
  fact_vars <- names(data)
  return(fact_vars)
}


cs <- choices_selected(
  choices = variable_choices('ADS', subset = get_fact_vars),
  selected = c('SEX', 'COUNTRY', 'AGE','RACE')
)

## Data reproducible code
data <- teal_data()
data <- within(data, {
  library(scda)
  ADSL <- synthetic_cdisc_dataset("latest", "adsl")
  
  # Include `EOSDY` and `DCSREAS` variables below because they contain missing data.
  stopifnot(
    any(is.na(ADSL$EOSDY)),
    any(is.na(ADSL$DCSREAS))
  )
})
datanames <- "ADSL"
datanames(data) <- datanames
join_keys(data) <- default_cdisc_join_keys[datanames]

## Setup App
app <- init(
  data = data,
  modules = modules(
    tm_t_summary(
      label = "Demographic Table",
      dataname = "ADSL",
      arm_var = choices_selected(c("ARM", "ARMCD"), "ARM"),
      summarize_vars = cs,
      useNA = "ifany"
    )
  )
)

shinyApp(app$ui, app$server)
sessionInfo()
R version 4.3.0 (2023-04-21 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 11 x64 (build 22621)

Matrix products: default


locale:
[1] LC_COLLATE=English_Europe.utf8  LC_CTYPE=English_Europe.utf8   
[3] LC_MONETARY=English_Europe.utf8 LC_NUMERIC=C                   
[5] LC_TIME=English_Europe.utf8    

time zone: Europe/Berlin
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] teal_0.15.1.9003          teal.slice_0.5.0.9004     teal.data_0.5.0          
[4] teal.code_0.5.0.9001      shiny_1.8.0               teal.transform_0.5.0.9000
[7] teal.widgets_0.4.2.9005  

loaded via a namespace (and not attached):
 [1] jsonlite_1.8.8         dplyr_1.1.4            compiler_4.3.0        
 [4] promises_1.2.0.1       tidyselect_1.2.0       Rcpp_1.0.10           
 [7] jquerylib_0.1.4        later_1.3.1            fastmap_1.1.1         
[10] mime_0.12              R6_2.5.1               generics_0.1.3        
[13] backports_1.4.1        checkmate_2.3.1        tibble_3.2.1          
[16] logger_0.2.2           bslib_0.6.1            pillar_1.9.0          
[19] rlang_1.1.1            utf8_1.2.4             cachem_1.0.8          
[22] httpuv_1.6.11          sass_0.4.8             memoise_2.0.1         
[25] cli_3.6.1              magrittr_2.0.3         shinyWidgets_0.7.6    
[28] digest_0.6.33          rstudioapi_0.15.0      xtable_1.8-4          
[31] lifecycle_1.0.4        teal.logger_0.1.3.9007 vctrs_0.6.5           
[34] glue_1.6.2             fansi_1.0.6            tools_4.3.0           
[37] pkgconfig_2.0.3        ellipsis_0.3.2         htmltools_0.5.7    

Code of Conduct

  • [X] I agree to follow this project's Code of Conduct.

Contribution Guidelines

  • [X] I agree to follow this project's Contribution Guidelines.

Security Policy

  • [X] I agree to follow this project's Security Policy.

nsteed15 avatar Mar 06 '24 14:03 nsteed15

This is a follow-up after https://github.com/insightsengineering/teal.transform/issues/205 where we discovered that order of the output can be also orchestrated by manually editing cs$choices, like

cs$choices[1:4] <- cs$choices[c(2, 4, 1, 3)]

m7pr avatar Mar 06 '24 15:03 m7pr