From 2a580965e3b829ea0be23a99ef526fa06d67f8b7 Mon Sep 17 00:00:00 2001 From: Andreas Gammelgaard Damsbo Date: Thu, 11 Dec 2025 22:48:30 +0100 Subject: [PATCH] feat: added add difference option to overview --- CITATION.cff | 14 ++++++++- DESCRIPTION | 5 ++-- NEWS.md | 4 +++ R/app_version.R | 2 +- R/baseline_table.R | 6 +++- R/hosted_version.R | 2 +- R/sysdata.rda | Bin 2804 -> 2704 bytes R/ui_elements.R | 14 +++++++-- SESSION.md | 19 ++---------- app_docker/app.R | 27 +++++++++++++---- app_docker/renv.lock | 33 +++++++++++++++++++++ app_docker/translations/translation_da.csv | 1 + app_docker/translations/translation_de.csv | 1 + app_docker/translations/translation_sv.csv | 1 + app_docker/translations/translation_sw.csv | 1 + inst/apps/FreesearchR/app.R | 27 +++++++++++++---- inst/translations/translation_da.csv | 1 + inst/translations/translation_de.csv | 1 + inst/translations/translation_sv.csv | 1 + inst/translations/translation_sw.csv | 1 + man/create_baseline.Rd | 1 + renv.lock | 33 +++++++++++++++++++++ 22 files changed, 159 insertions(+), 36 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 0e848537..a824aac3 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -8,7 +8,7 @@ message: 'To cite package "FreesearchR" in publications use:' type: software license: AGPL-3.0-or-later title: 'FreesearchR: Easy data analysis for clinicians' -version: 25.12.3 +version: 25.12.5 doi: 10.5281/zenodo.14527429 identifiers: - type: url @@ -1128,6 +1128,18 @@ references: email: garnier@njit.edu year: '2025' doi: 10.32614/CRAN.package.viridis +- type: software + title: smd + abstract: 'smd: Compute Standardized Mean Differences' + notes: Imports + url: https://bsaul.github.io/smd/ + repository: https://CRAN.R-project.org/package=smd + authors: + - family-names: Saul + given-names: Bradley + email: bradleysaul@fastmail.com + year: '2025' + doi: 10.32614/CRAN.package.smd - type: software title: styler abstract: 'styler: Non-Invasive Pretty Printing of R Code' diff --git a/DESCRIPTION b/DESCRIPTION index 2272c408..7d7defde 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: FreesearchR Title: Easy data analysis for clinicians -Version: 25.12.4 +Version: 25.12.5 Authors@R: c( person("Andreas Gammelgaard", "Damsbo",email="agdamsbo@clin.au.dk", role = c("aut", "cre"), comment = c(ORCID = "0000-0002-7559-1154")), @@ -70,7 +70,8 @@ Imports: shiny.i18n, stRoke, data.table, - viridis + viridis, + smd Suggests: styler, devtools, diff --git a/NEWS.md b/NEWS.md index cb549953..50c21a23 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,7 @@ +# FreesearchR 25.12.5 + +*NEW* Added option to add pairwise differences in discriptive table. + # FreesearchR 25.12.4 Republish 25.12.3 diff --git a/R/app_version.R b/R/app_version.R index 51ec9dbd..d3253ba3 100644 --- a/R/app_version.R +++ b/R/app_version.R @@ -1 +1 @@ -app_version <- function()'25.12.3' +app_version <- function()'25.12.5' diff --git a/R/baseline_table.R b/R/baseline_table.R index 203197f6..9d6f587f 100644 --- a/R/baseline_table.R +++ b/R/baseline_table.R @@ -37,7 +37,7 @@ baseline_table <- function(data, fun.args = NULL, fun = gtsummary::tbl_summary, #' mtcars |> create_baseline(by.var = "gear", detail_level = "extended",type = list(gtsummary::all_dichotomous() ~ "categorical"),theme="nejm") #' #' create_baseline(default_parsing(mtcars), by.var = "am", add.p = FALSE, add.overall = FALSE, theme = "lancet") -create_baseline <- function(data, ..., by.var, add.p = FALSE, add.overall = FALSE, theme = c("jama", "lancet", "nejm", "qjecon"), detail_level = c("minimal", "extended")) { +create_baseline <- function(data, ..., by.var, add.p = FALSE, add.diff=FALSE, add.overall = FALSE, theme = c("jama", "lancet", "nejm", "qjecon"), detail_level = c("minimal", "extended")) { theme <- match.arg(theme) detail_level <- match.arg(detail_level) @@ -100,6 +100,10 @@ create_baseline <- function(data, ..., by.var, add.p = FALSE, add.overall = FALS gtsummary::add_p() |> gtsummary::bold_p() } + if (isTRUE(add.diff)) { + out <- out |> + gtsummary::add_difference() + } } out diff --git a/R/hosted_version.R b/R/hosted_version.R index c13c9163..1c023b20 100644 --- a/R/hosted_version.R +++ b/R/hosted_version.R @@ -1 +1 @@ -hosted_version <- function()'v25.12.3-251211' +hosted_version <- function()'v25.12.5-251211' diff --git a/R/sysdata.rda b/R/sysdata.rda index 82e7a81de3afdaaba8e4107cb20ec523955d3419..31d74cda07a59213061a29c315a03a1c6bc02cf3 100644 GIT binary patch literal 2704 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 KC`ekUtK@)g6%1Pd literal 2804 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 diff --git a/R/ui_elements.R b/R/ui_elements.R index 1f06c208..e2781099 100644 --- a/R/ui_elements.R +++ b/R/ui_elements.R @@ -400,10 +400,20 @@ ui_elements <- function(selection) { "Yes" = "yes" ) ), - shiny::helpText(i18n$t("Option to perform statistical comparisons between strata in baseline table.")) + # shiny::helpText(i18n$t("Option to perform statistical comparisons between strata in baseline table.")), + shiny::br(), + shiny::radioButtons( + inputId = "add_diff", + label = i18n$t("Include group differences"), + selected = "no", + inline = TRUE, + choices = list( + "No" = "no", + "Yes" = "yes" + ) + ) ), shiny::br(), - shiny::br(), shiny::actionButton( inputId = "act_eval", label = i18n$t("Evaluate"), diff --git a/SESSION.md b/SESSION.md index a61071fa..7d4f2028 100644 --- a/SESSION.md +++ b/SESSION.md @@ -15,7 +15,7 @@ |rstudio |2025.09.2+418 Cucumberleaf Sunflower (desktop) | |pandoc |3.6.4 @ /opt/homebrew/bin/ (via rmarkdown) | |quarto |1.7.30 @ /usr/local/bin/quarto | -|FreesearchR |25.12.3.251211 | +|FreesearchR |25.12.5.251211 | -------------------------------------------------------------------------------- @@ -44,7 +44,6 @@ |cardx |0.3.1 |2025-12-04 |CRAN (R 4.4.3) | |caTools |1.18.3 |2024-09-04 |CRAN (R 4.4.1) | |cellranger |1.1.0 |2016-07-27 |CRAN (R 4.4.0) | -|cffr |1.2.0 |2025-01-25 |CRAN (R 4.4.1) | |checkmate |2.3.3 |2025-08-18 |CRAN (R 4.4.1) | |class |7.3-23 |2025-01-01 |CRAN (R 4.4.1) | |classInt |0.4-11 |2025-01-08 |CRAN (R 4.4.1) | @@ -54,7 +53,6 @@ |colorspace |2.1-2 |2025-09-22 |CRAN (R 4.4.1) | |commonmark |2.0.0 |2025-07-07 |CRAN (R 4.4.1) | |crayon |1.5.3 |2024-06-20 |CRAN (R 4.4.1) | -|curl |7.0.0 |2025-08-19 |CRAN (R 4.4.1) | |data.table |1.17.8 |2025-07-10 |CRAN (R 4.4.1) | |datamods |1.5.3 |2024-10-02 |CRAN (R 4.4.1) | |datawizard |1.3.0 |2025-10-11 |CRAN (R 4.4.1) | @@ -85,7 +83,7 @@ |foreach |1.5.2 |2022-02-02 |CRAN (R 4.4.0) | |foreign |0.8-90 |2025-03-31 |CRAN (R 4.4.1) | |Formula |1.2-5 |2023-02-24 |CRAN (R 4.4.1) | -|FreesearchR |25.12.3 |NA |NA | +|FreesearchR |25.12.5 |NA |NA | |fs |1.6.6 |2025-04-12 |CRAN (R 4.4.1) | |gdtools |0.4.4 |2025-10-06 |CRAN (R 4.4.1) | |generics |0.1.4 |2025-05-09 |CRAN (R 4.4.1) | @@ -113,11 +111,9 @@ |iterators |1.0.14 |2022-02-05 |CRAN (R 4.4.1) | |jquerylib |0.1.4 |2021-04-26 |CRAN (R 4.4.0) | |jsonlite |2.0.0 |2025-03-27 |CRAN (R 4.4.1) | -|jsonvalidate |1.5.0 |2025-02-07 |CRAN (R 4.4.1) | |KernSmooth |2.23-26 |2025-01-01 |CRAN (R 4.4.1) | |keyring |1.4.1 |2025-06-15 |CRAN (R 4.4.1) | |knitr |1.50 |2025-03-16 |CRAN (R 4.4.1) | -|labeling |0.4.3 |2023-08-29 |CRAN (R 4.4.1) | |later |1.4.4 |2025-08-27 |CRAN (R 4.4.1) | |lattice |0.22-7 |2025-04-02 |CRAN (R 4.4.1) | |lifecycle |1.0.4 |2023-11-07 |CRAN (R 4.4.1) | @@ -141,7 +137,6 @@ |openssl |2.3.4 |2025-09-30 |CRAN (R 4.4.1) | |openxlsx2 |1.22 |2025-12-07 |CRAN (R 4.4.3) | |otel |0.2.0 |2025-08-29 |CRAN (R 4.4.1) | -|pak |0.9.1 |2025-12-01 |CRAN (R 4.4.3) | |parameters |0.28.3 |2025-11-25 |CRAN (R 4.4.3) | |patchwork |1.3.2 |2025-08-25 |CRAN (R 4.4.1) | |pbmcapply |1.5.1 |2022-04-28 |CRAN (R 4.4.1) | @@ -162,14 +157,9 @@ |qqconf |1.3.2 |2023-04-14 |CRAN (R 4.4.0) | |qqplotr |0.0.7 |2025-09-05 |CRAN (R 4.4.1) | |quarto |1.5.1 |2025-09-04 |CRAN (R 4.4.1) | -|R.cache |0.17.0 |2025-05-02 |CRAN (R 4.4.1) | -|R.methodsS3 |1.8.2 |2022-06-13 |CRAN (R 4.4.1) | -|R.oo |1.27.1 |2025-05-02 |CRAN (R 4.4.1) | -|R.utils |2.13.0 |2025-02-24 |CRAN (R 4.4.1) | |R6 |2.6.1 |2025-02-15 |CRAN (R 4.4.1) | |ragg |1.5.0 |2025-09-02 |CRAN (R 4.4.1) | |rankinPlot |1.1.0 |2023-01-30 |CRAN (R 4.4.0) | -|rappdirs |0.3.3 |2021-01-31 |CRAN (R 4.4.1) | |rbibutils |2.4 |2025-11-07 |CRAN (R 4.4.1) | |RColorBrewer |1.1-3 |2022-04-03 |CRAN (R 4.4.1) | |Rcpp |1.1.0 |2025-07-02 |CRAN (R 4.4.1) | @@ -206,11 +196,10 @@ |shinyjs |2.1.0 |2021-12-23 |CRAN (R 4.4.0) | |shinyTime |1.0.3 |2022-08-19 |CRAN (R 4.4.0) | |shinyWidgets |0.9.0 |2025-02-21 |CRAN (R 4.4.1) | -|sourcetools |0.1.7-1 |2023-02-01 |CRAN (R 4.4.1) | +|smd |0.8.0 |2025-02-12 |CRAN (R 4.4.1) | |stringi |1.8.7 |2025-03-27 |CRAN (R 4.4.1) | |stringr |1.6.0 |2025-11-04 |CRAN (R 4.4.1) | |stRoke |25.9.2 |2025-09-30 |CRAN (R 4.4.1) | -|styler |1.11.0 |2025-10-13 |CRAN (R 4.4.1) | |systemfonts |1.3.1 |2025-10-01 |CRAN (R 4.4.1) | |testthat |3.3.1 |2025-11-25 |CRAN (R 4.4.3) | |textshaping |1.0.4 |2025-10-10 |CRAN (R 4.4.1) | @@ -224,9 +213,7 @@ |twosamples |2.0.1 |2023-06-23 |CRAN (R 4.4.1) | |tzdb |0.5.0 |2025-03-15 |CRAN (R 4.4.1) | |usethis |3.2.1 |2025-09-06 |CRAN (R 4.4.1) | -|utf8 |1.2.6 |2025-06-08 |CRAN (R 4.4.1) | |uuid |1.2-1 |2024-07-29 |CRAN (R 4.4.1) | -|V8 |8.0.1 |2025-10-10 |CRAN (R 4.4.1) | |vctrs |0.6.5 |2023-12-01 |CRAN (R 4.4.0) | |viridis |0.6.5 |2024-01-29 |CRAN (R 4.4.0) | |viridisLite |0.4.2 |2023-05-02 |CRAN (R 4.4.1) | diff --git a/app_docker/app.R b/app_docker/app.R index f2c7203c..ab879cf7 100644 --- a/app_docker/app.R +++ b/app_docker/app.R @@ -1,7 +1,7 @@ ######## -#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//RtmpT9sPX5/file6c80650aba81.R +#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//RtmpftDBtp/file7bf3239dee0a.R ######## i18n_path <- here::here("translations") @@ -63,7 +63,7 @@ i18n$set_translation_language("en") #### Current file: /Users/au301842/FreesearchR/R//app_version.R ######## -app_version <- function()'25.12.3' +app_version <- function()'25.12.5' ######## @@ -109,7 +109,7 @@ baseline_table <- function(data, fun.args = NULL, fun = gtsummary::tbl_summary, #' mtcars |> create_baseline(by.var = "gear", detail_level = "extended",type = list(gtsummary::all_dichotomous() ~ "categorical"),theme="nejm") #' #' create_baseline(default_parsing(mtcars), by.var = "am", add.p = FALSE, add.overall = FALSE, theme = "lancet") -create_baseline <- function(data, ..., by.var, add.p = FALSE, add.overall = FALSE, theme = c("jama", "lancet", "nejm", "qjecon"), detail_level = c("minimal", "extended")) { +create_baseline <- function(data, ..., by.var, add.p = FALSE, add.diff=FALSE, add.overall = FALSE, theme = c("jama", "lancet", "nejm", "qjecon"), detail_level = c("minimal", "extended")) { theme <- match.arg(theme) detail_level <- match.arg(detail_level) @@ -172,6 +172,10 @@ create_baseline <- function(data, ..., by.var, add.p = FALSE, add.overall = FALS gtsummary::add_p() |> gtsummary::bold_p() } + if (isTRUE(add.diff)) { + out <- out |> + gtsummary::add_difference() + } } out @@ -4438,7 +4442,7 @@ data_types <- function() { #### Current file: /Users/au301842/FreesearchR/R//hosted_version.R ######## -hosted_version <- function()'v25.12.3-251211' +hosted_version <- function()'v25.12.5-251211' ######## @@ -10285,10 +10289,20 @@ ui_elements <- function(selection) { "Yes" = "yes" ) ), - shiny::helpText(i18n$t("Option to perform statistical comparisons between strata in baseline table.")) + # shiny::helpText(i18n$t("Option to perform statistical comparisons between strata in baseline table.")), + shiny::br(), + shiny::radioButtons( + inputId = "add_diff", + label = i18n$t("Include group differences"), + selected = "no", + inline = TRUE, + choices = list( + "No" = "no", + "Yes" = "yes" + ) + ) ), shiny::br(), - shiny::br(), shiny::actionButton( inputId = "act_eval", label = i18n$t("Evaluate"), @@ -13713,6 +13727,7 @@ server <- function(input, output, session) { by.var = input$strat_var, add.p = input$add_p == "yes", add.overall = TRUE, + add.diff = input$add_diff == "yes", # theme = input$baseline_theme, detail_level = input$detail_level ) diff --git a/app_docker/renv.lock b/app_docker/renv.lock index 22b9f3d9..6841ab5e 100644 --- a/app_docker/renv.lock +++ b/app_docker/renv.lock @@ -8397,6 +8397,39 @@ "Maintainer": "Dean Attali ", "Repository": "CRAN" }, + "smd": { + "Package": "smd", + "Version": "0.8.0", + "Source": "Repository", + "Type": "Package", + "Title": "Compute Standardized Mean Differences", + "Authors@R": "c(person(\"Bradley\", \"Saul\", role = c(\"aut\", \"cre\"), email = \"bradleysaul@fastmail.com\"), person(\"Alex\", \"Breskin\", role = c(\"ctb\"), email = \"alexbreskin@gmail.com\"), person(\"Catie\", \"Wiener\", role = c(\"ctb\"), email = \"cwiener@live.unc.edu\"), person(\"Matt\", \"Phelan\", role = c(\"ctb\"), email = \"mpphelan1@gmail.com\"), person(\"Daniel\", \"Sjoberg\", role = c(\"ctb\"), email = \"danield.sjoberg@gmail.com\"), person(\"Nuvan\", \"Rathnayaka\", role = c(\"ctb\"), email = \"nuvanrath@proton.me\"), person(\"Malcolm\", \"Barrett\", role = c(\"ctb\"), email = \"malcolmbarrett@gmail.com\") )", + "Description": "Computes standardized mean differences and confidence intervals for multiple data types based on Yang, D., & Dalton, J. E. (2012) .", + "Imports": [ + "MASS (>= 7.3-50)", + "methods (>= 3.5.1)" + ], + "Suggests": [ + "testthat", + "stddiff", + "tableone", + "knitr", + "dplyr", + "purrr", + "markdown", + "rmarkdown" + ], + "License": "MIT + file LICENSE", + "URL": "https://bsaul.github.io/smd/", + "BugReports": "https://github.com/bsaul/smd/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "VignetteBuilder": "knitr", + "Repository": "CRAN", + "NeedsCompilation": "no", + "Author": "Bradley Saul [aut, cre], Alex Breskin [ctb], Catie Wiener [ctb], Matt Phelan [ctb], Daniel Sjoberg [ctb], Nuvan Rathnayaka [ctb], Malcolm Barrett [ctb]", + "Maintainer": "Bradley Saul " + }, "sourcetools": { "Package": "sourcetools", "Version": "0.1.7-1", diff --git a/app_docker/translations/translation_da.csv b/app_docker/translations/translation_da.csv index 6eff561d..a30dba70 100644 --- a/app_docker/translations/translation_da.csv +++ b/app_docker/translations/translation_da.csv @@ -306,3 +306,4 @@ "Select outcome variable for overview","Select outcome variable for overview" "No outcome measure chosen","No outcome measure chosen" "There is a significant difference in data missingness in {n_nonmcar} {ifelse(n_nonmcar==1,'variable','variables')} grouped by the selected outcome/grouping variable {outcome}.","There is a significant difference in data missingness in {n_nonmcar} {ifelse(n_nonmcar==1,'variable','variables')} grouped by the selected outcome/grouping variable {outcome}." +"Include group differences","Include group differences" diff --git a/app_docker/translations/translation_de.csv b/app_docker/translations/translation_de.csv index 9bdb216e..cb9bed43 100644 --- a/app_docker/translations/translation_de.csv +++ b/app_docker/translations/translation_de.csv @@ -306,3 +306,4 @@ "Select outcome variable for overview","Select outcome variable for overview" "No outcome measure chosen","No outcome measure chosen" "There is a significant difference in data missingness in {n_nonmcar} {ifelse(n_nonmcar==1,'variable','variables')} grouped by the selected outcome/grouping variable {outcome}.","There is a significant difference in data missingness in {n_nonmcar} {ifelse(n_nonmcar==1,'variable','variables')} grouped by the selected outcome/grouping variable {outcome}." +"Include group differences","Include group differences" diff --git a/app_docker/translations/translation_sv.csv b/app_docker/translations/translation_sv.csv index 4383f3b4..7883585e 100644 --- a/app_docker/translations/translation_sv.csv +++ b/app_docker/translations/translation_sv.csv @@ -306,3 +306,4 @@ "Select outcome variable for overview","Select outcome variable for overview" "No outcome measure chosen","No outcome measure chosen" "There is a significant difference in data missingness in {n_nonmcar} {ifelse(n_nonmcar==1,'variable','variables')} grouped by the selected outcome/grouping variable {outcome}.","There is a significant difference in data missingness in {n_nonmcar} {ifelse(n_nonmcar==1,'variable','variables')} grouped by the selected outcome/grouping variable {outcome}." +"Include group differences","Include group differences" diff --git a/app_docker/translations/translation_sw.csv b/app_docker/translations/translation_sw.csv index 227ce09e..f1e8723a 100644 --- a/app_docker/translations/translation_sw.csv +++ b/app_docker/translations/translation_sw.csv @@ -306,3 +306,4 @@ "Select outcome variable for overview","Select outcome variable for overview" "No outcome measure chosen","No outcome measure chosen" "There is a significant difference in data missingness in {n_nonmcar} {ifelse(n_nonmcar==1,'variable','variables')} grouped by the selected outcome/grouping variable {outcome}.","There is a significant difference in data missingness in {n_nonmcar} {ifelse(n_nonmcar==1,'variable','variables')} grouped by the selected outcome/grouping variable {outcome}." +"Include group differences","Include group differences" diff --git a/inst/apps/FreesearchR/app.R b/inst/apps/FreesearchR/app.R index 592665b8..ca34345d 100644 --- a/inst/apps/FreesearchR/app.R +++ b/inst/apps/FreesearchR/app.R @@ -1,7 +1,7 @@ ######## -#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//RtmpT9sPX5/file6c8068b55910.R +#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//RtmpftDBtp/file7bf313edd9e8.R ######## i18n_path <- system.file("translations", package = "FreesearchR") @@ -63,7 +63,7 @@ i18n$set_translation_language("en") #### Current file: /Users/au301842/FreesearchR/R//app_version.R ######## -app_version <- function()'25.12.3' +app_version <- function()'25.12.5' ######## @@ -109,7 +109,7 @@ baseline_table <- function(data, fun.args = NULL, fun = gtsummary::tbl_summary, #' mtcars |> create_baseline(by.var = "gear", detail_level = "extended",type = list(gtsummary::all_dichotomous() ~ "categorical"),theme="nejm") #' #' create_baseline(default_parsing(mtcars), by.var = "am", add.p = FALSE, add.overall = FALSE, theme = "lancet") -create_baseline <- function(data, ..., by.var, add.p = FALSE, add.overall = FALSE, theme = c("jama", "lancet", "nejm", "qjecon"), detail_level = c("minimal", "extended")) { +create_baseline <- function(data, ..., by.var, add.p = FALSE, add.diff=FALSE, add.overall = FALSE, theme = c("jama", "lancet", "nejm", "qjecon"), detail_level = c("minimal", "extended")) { theme <- match.arg(theme) detail_level <- match.arg(detail_level) @@ -172,6 +172,10 @@ create_baseline <- function(data, ..., by.var, add.p = FALSE, add.overall = FALS gtsummary::add_p() |> gtsummary::bold_p() } + if (isTRUE(add.diff)) { + out <- out |> + gtsummary::add_difference() + } } out @@ -4438,7 +4442,7 @@ data_types <- function() { #### Current file: /Users/au301842/FreesearchR/R//hosted_version.R ######## -hosted_version <- function()'v25.12.3-251211' +hosted_version <- function()'v25.12.5-251211' ######## @@ -10285,10 +10289,20 @@ ui_elements <- function(selection) { "Yes" = "yes" ) ), - shiny::helpText(i18n$t("Option to perform statistical comparisons between strata in baseline table.")) + # shiny::helpText(i18n$t("Option to perform statistical comparisons between strata in baseline table.")), + shiny::br(), + shiny::radioButtons( + inputId = "add_diff", + label = i18n$t("Include group differences"), + selected = "no", + inline = TRUE, + choices = list( + "No" = "no", + "Yes" = "yes" + ) + ) ), shiny::br(), - shiny::br(), shiny::actionButton( inputId = "act_eval", label = i18n$t("Evaluate"), @@ -13713,6 +13727,7 @@ server <- function(input, output, session) { by.var = input$strat_var, add.p = input$add_p == "yes", add.overall = TRUE, + add.diff = input$add_diff == "yes", # theme = input$baseline_theme, detail_level = input$detail_level ) diff --git a/inst/translations/translation_da.csv b/inst/translations/translation_da.csv index 6eff561d..a30dba70 100644 --- a/inst/translations/translation_da.csv +++ b/inst/translations/translation_da.csv @@ -306,3 +306,4 @@ "Select outcome variable for overview","Select outcome variable for overview" "No outcome measure chosen","No outcome measure chosen" "There is a significant difference in data missingness in {n_nonmcar} {ifelse(n_nonmcar==1,'variable','variables')} grouped by the selected outcome/grouping variable {outcome}.","There is a significant difference in data missingness in {n_nonmcar} {ifelse(n_nonmcar==1,'variable','variables')} grouped by the selected outcome/grouping variable {outcome}." +"Include group differences","Include group differences" diff --git a/inst/translations/translation_de.csv b/inst/translations/translation_de.csv index 9bdb216e..cb9bed43 100644 --- a/inst/translations/translation_de.csv +++ b/inst/translations/translation_de.csv @@ -306,3 +306,4 @@ "Select outcome variable for overview","Select outcome variable for overview" "No outcome measure chosen","No outcome measure chosen" "There is a significant difference in data missingness in {n_nonmcar} {ifelse(n_nonmcar==1,'variable','variables')} grouped by the selected outcome/grouping variable {outcome}.","There is a significant difference in data missingness in {n_nonmcar} {ifelse(n_nonmcar==1,'variable','variables')} grouped by the selected outcome/grouping variable {outcome}." +"Include group differences","Include group differences" diff --git a/inst/translations/translation_sv.csv b/inst/translations/translation_sv.csv index 4383f3b4..7883585e 100644 --- a/inst/translations/translation_sv.csv +++ b/inst/translations/translation_sv.csv @@ -306,3 +306,4 @@ "Select outcome variable for overview","Select outcome variable for overview" "No outcome measure chosen","No outcome measure chosen" "There is a significant difference in data missingness in {n_nonmcar} {ifelse(n_nonmcar==1,'variable','variables')} grouped by the selected outcome/grouping variable {outcome}.","There is a significant difference in data missingness in {n_nonmcar} {ifelse(n_nonmcar==1,'variable','variables')} grouped by the selected outcome/grouping variable {outcome}." +"Include group differences","Include group differences" diff --git a/inst/translations/translation_sw.csv b/inst/translations/translation_sw.csv index 227ce09e..f1e8723a 100644 --- a/inst/translations/translation_sw.csv +++ b/inst/translations/translation_sw.csv @@ -306,3 +306,4 @@ "Select outcome variable for overview","Select outcome variable for overview" "No outcome measure chosen","No outcome measure chosen" "There is a significant difference in data missingness in {n_nonmcar} {ifelse(n_nonmcar==1,'variable','variables')} grouped by the selected outcome/grouping variable {outcome}.","There is a significant difference in data missingness in {n_nonmcar} {ifelse(n_nonmcar==1,'variable','variables')} grouped by the selected outcome/grouping variable {outcome}." +"Include group differences","Include group differences" diff --git a/man/create_baseline.Rd b/man/create_baseline.Rd index df159590..23b3621f 100644 --- a/man/create_baseline.Rd +++ b/man/create_baseline.Rd @@ -9,6 +9,7 @@ create_baseline( ..., by.var, add.p = FALSE, + add.diff = FALSE, add.overall = FALSE, theme = c("jama", "lancet", "nejm", "qjecon"), detail_level = c("minimal", "extended") diff --git a/renv.lock b/renv.lock index 22b9f3d9..6841ab5e 100644 --- a/renv.lock +++ b/renv.lock @@ -8397,6 +8397,39 @@ "Maintainer": "Dean Attali ", "Repository": "CRAN" }, + "smd": { + "Package": "smd", + "Version": "0.8.0", + "Source": "Repository", + "Type": "Package", + "Title": "Compute Standardized Mean Differences", + "Authors@R": "c(person(\"Bradley\", \"Saul\", role = c(\"aut\", \"cre\"), email = \"bradleysaul@fastmail.com\"), person(\"Alex\", \"Breskin\", role = c(\"ctb\"), email = \"alexbreskin@gmail.com\"), person(\"Catie\", \"Wiener\", role = c(\"ctb\"), email = \"cwiener@live.unc.edu\"), person(\"Matt\", \"Phelan\", role = c(\"ctb\"), email = \"mpphelan1@gmail.com\"), person(\"Daniel\", \"Sjoberg\", role = c(\"ctb\"), email = \"danield.sjoberg@gmail.com\"), person(\"Nuvan\", \"Rathnayaka\", role = c(\"ctb\"), email = \"nuvanrath@proton.me\"), person(\"Malcolm\", \"Barrett\", role = c(\"ctb\"), email = \"malcolmbarrett@gmail.com\") )", + "Description": "Computes standardized mean differences and confidence intervals for multiple data types based on Yang, D., & Dalton, J. E. (2012) .", + "Imports": [ + "MASS (>= 7.3-50)", + "methods (>= 3.5.1)" + ], + "Suggests": [ + "testthat", + "stddiff", + "tableone", + "knitr", + "dplyr", + "purrr", + "markdown", + "rmarkdown" + ], + "License": "MIT + file LICENSE", + "URL": "https://bsaul.github.io/smd/", + "BugReports": "https://github.com/bsaul/smd/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "VignetteBuilder": "knitr", + "Repository": "CRAN", + "NeedsCompilation": "no", + "Author": "Bradley Saul [aut, cre], Alex Breskin [ctb], Catie Wiener [ctb], Matt Phelan [ctb], Daniel Sjoberg [ctb], Nuvan Rathnayaka [ctb], Malcolm Barrett [ctb]", + "Maintainer": "Bradley Saul " + }, "sourcetools": { "Package": "sourcetools", "Version": "0.1.7-1",