mirror of
https://github.com/agdamsbo/FreesearchR.git
synced 2025-12-15 17:12:09 +01:00
Compare commits
10 commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ed74e0492c | |||
| d9614eb37f | |||
| 30f13c7232 | |||
| f4f433ee84 | |||
| 2a580965e3 | |||
| 208590e91f | |||
| 35afbc1dc9 | |||
| af523edc00 | |||
| fab5c6cf22 | |||
| f2c1c974e0 |
45 changed files with 3938 additions and 1559 deletions
118
CITATION.cff
118
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.1
|
||||
version: 25.12.6
|
||||
doi: 10.5281/zenodo.14527429
|
||||
identifiers:
|
||||
- type: url
|
||||
|
|
@ -143,7 +143,7 @@ references:
|
|||
authors:
|
||||
- family-names: Müller
|
||||
given-names: Kirill
|
||||
email: krlmlr+r@mailbox.org
|
||||
email: kirill@cynkra.com
|
||||
orcid: https://orcid.org/0000-0002-1416-3412
|
||||
year: '2025'
|
||||
doi: 10.32614/CRAN.package.here
|
||||
|
|
@ -250,6 +250,10 @@ references:
|
|||
given-names: Barret
|
||||
email: barret@posit.co
|
||||
orcid: https://orcid.org/0000-0001-9986-114X
|
||||
- family-names: Aden-Buie
|
||||
given-names: Garrick
|
||||
email: garrick@adenbuie.com
|
||||
orcid: https://orcid.org/0000-0002-7111-0077
|
||||
- family-names: Xie
|
||||
given-names: Yihui
|
||||
email: yihui@posit.co
|
||||
|
|
@ -312,6 +316,10 @@ references:
|
|||
given-names: Simon
|
||||
email: simon.couch@posit.co
|
||||
orcid: https://orcid.org/0000-0001-5676-5107
|
||||
- family-names: Hvitfeldt
|
||||
given-names: Emil
|
||||
email: emil.hvitfeldt@posit.co
|
||||
orcid: https://orcid.org/0000-0002-0679-1945
|
||||
year: '2025'
|
||||
doi: 10.32614/CRAN.package.broom
|
||||
- type: software
|
||||
|
|
@ -397,6 +405,10 @@ references:
|
|||
email: joe@posit.co
|
||||
- family-names: Tan
|
||||
given-names: Xianying
|
||||
- family-names: Aden-Buie
|
||||
given-names: Garrick
|
||||
email: garrick@posit.co
|
||||
orcid: https://orcid.org/0000-0002-7111-0077
|
||||
year: '2025'
|
||||
doi: 10.32614/CRAN.package.DT
|
||||
- type: software
|
||||
|
|
@ -480,6 +492,10 @@ references:
|
|||
given-names: Brenton M.
|
||||
email: brenton@wiernik.org
|
||||
orcid: https://orcid.org/0000-0001-9560-6336
|
||||
- family-names: Thériault
|
||||
given-names: Rémi
|
||||
email: remi.theriault@mail.mcgill.ca
|
||||
orcid: https://orcid.org/0000-0003-4315-6788
|
||||
- family-names: Waggoner
|
||||
given-names: Philip
|
||||
email: philip.waggoner@gmail.com
|
||||
|
|
@ -659,7 +675,7 @@ references:
|
|||
authors:
|
||||
- family-names: Wickham
|
||||
given-names: Hadley
|
||||
email: h.wickham@gmail.com
|
||||
email: hadley@posit.co
|
||||
year: '2025'
|
||||
doi: 10.32614/CRAN.package.reshape2
|
||||
- type: software
|
||||
|
|
@ -999,6 +1015,9 @@ references:
|
|||
- family-names: Lenth
|
||||
given-names: Russell V.
|
||||
email: russell-lenth@uiowa.edu
|
||||
- family-names: Piaskowski
|
||||
given-names: Julia
|
||||
email: julia.piask@gmail.com
|
||||
year: '2025'
|
||||
doi: 10.32614/CRAN.package.emmeans
|
||||
- type: software
|
||||
|
|
@ -1097,6 +1116,93 @@ references:
|
|||
orcid: https://orcid.org/0000-0002-0172-3812
|
||||
year: '2025'
|
||||
doi: 10.32614/CRAN.package.data.table
|
||||
- type: software
|
||||
title: viridis
|
||||
abstract: 'viridis: Colorblind-Friendly Color Maps for R'
|
||||
notes: Imports
|
||||
url: https://sjmgarnier.github.io/viridis/
|
||||
repository: https://CRAN.R-project.org/package=viridis
|
||||
authors:
|
||||
- family-names: Garnier
|
||||
given-names: Simon
|
||||
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: doconv
|
||||
abstract: 'doconv: Document Conversion to ''PDF'' or ''PNG'''
|
||||
notes: Imports
|
||||
url: https://github.com/ardata-fr/doconv
|
||||
repository: https://CRAN.R-project.org/package=doconv
|
||||
authors:
|
||||
- family-names: Gohel
|
||||
given-names: David
|
||||
email: david.gohel@ardata.fr
|
||||
year: '2025'
|
||||
doi: 10.32614/CRAN.package.doconv
|
||||
- type: software
|
||||
title: locatexec
|
||||
abstract: 'locatexec: Detection and Localization of Executable Files'
|
||||
notes: Imports
|
||||
url: https://github.com/ardata-fr/locatexec
|
||||
repository: https://CRAN.R-project.org/package=locatexec
|
||||
authors:
|
||||
- family-names: Gohel
|
||||
given-names: David
|
||||
email: david.gohel@ardata.fr
|
||||
year: '2025'
|
||||
doi: 10.32614/CRAN.package.locatexec
|
||||
- type: software
|
||||
title: magick
|
||||
abstract: 'magick: Advanced Graphics and Image-Processing in R'
|
||||
notes: Imports
|
||||
url: https://docs.ropensci.org/magick/
|
||||
repository: https://CRAN.R-project.org/package=magick
|
||||
authors:
|
||||
- family-names: Ooms
|
||||
given-names: Jeroen
|
||||
email: jeroenooms@gmail.com
|
||||
orcid: https://orcid.org/0000-0002-4035-0289
|
||||
year: '2025'
|
||||
doi: 10.32614/CRAN.package.magick
|
||||
- type: software
|
||||
title: pdftools
|
||||
abstract: 'pdftools: Text Extraction, Rendering and Converting of PDF Documents'
|
||||
notes: Imports
|
||||
url: https://ropensci.r-universe.dev/pdftools
|
||||
repository: https://CRAN.R-project.org/package=pdftools
|
||||
authors:
|
||||
- family-names: Ooms
|
||||
given-names: Jeroen
|
||||
email: jeroenooms@gmail.com
|
||||
orcid: https://orcid.org/0000-0002-4035-0289
|
||||
year: '2025'
|
||||
doi: 10.32614/CRAN.package.pdftools
|
||||
- type: software
|
||||
title: qpdf
|
||||
abstract: 'qpdf: Split, Combine and Compress PDF Files'
|
||||
notes: Imports
|
||||
url: https://docs.ropensci.org/qpdf/
|
||||
repository: https://CRAN.R-project.org/package=qpdf
|
||||
authors:
|
||||
- family-names: Ooms
|
||||
given-names: Jeroen
|
||||
email: jeroenooms@gmail.com
|
||||
orcid: https://orcid.org/0000-0002-4035-0289
|
||||
year: '2025'
|
||||
doi: 10.32614/CRAN.package.qpdf
|
||||
- type: software
|
||||
title: styler
|
||||
abstract: 'styler: Non-Invasive Pretty Printing of R Code'
|
||||
|
|
@ -1111,6 +1217,10 @@ references:
|
|||
- family-names: Walthert
|
||||
given-names: Lorenz
|
||||
email: lorenz.walthert@icloud.com
|
||||
- family-names: Patil
|
||||
given-names: Indrajeet
|
||||
email: patilindrajeet.science@gmail.com
|
||||
orcid: https://orcid.org/0000-0003-1995-6531
|
||||
year: '2025'
|
||||
doi: 10.32614/CRAN.package.styler
|
||||
- type: software
|
||||
|
|
@ -1128,7 +1238,7 @@ references:
|
|||
given-names: Winston
|
||||
- family-names: Bryan
|
||||
given-names: Jennifer
|
||||
email: jenny@rstudio.com
|
||||
email: jenny@posit.co
|
||||
orcid: https://orcid.org/0000-0002-6983-2759
|
||||
year: '2025'
|
||||
doi: 10.32614/CRAN.package.devtools
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Package: FreesearchR
|
||||
Title: Easy data analysis for clinicians
|
||||
Version: 25.12.1
|
||||
Version: 25.12.6
|
||||
Authors@R: c(
|
||||
person("Andreas Gammelgaard", "Damsbo",email="agdamsbo@clin.au.dk", role = c("aut", "cre"),
|
||||
comment = c(ORCID = "0000-0002-7559-1154")),
|
||||
|
|
@ -11,7 +11,7 @@ Description: Easily evaluate and analyse clinical health data in your browser, e
|
|||
License: AGPL (>= 3)
|
||||
Encoding: UTF-8
|
||||
Roxygen: list(markdown = TRUE)
|
||||
RoxygenNote: 7.3.2
|
||||
RoxygenNote: 7.3.3
|
||||
Imports:
|
||||
assertthat,
|
||||
bslib,
|
||||
|
|
@ -69,7 +69,9 @@ Imports:
|
|||
NHANES,
|
||||
shiny.i18n,
|
||||
stRoke,
|
||||
data.table
|
||||
data.table,
|
||||
viridis,
|
||||
smd
|
||||
Suggests:
|
||||
styler,
|
||||
devtools,
|
||||
|
|
@ -129,6 +131,7 @@ Collate:
|
|||
'report.R'
|
||||
'separate_string.R'
|
||||
'syntax_highlight.R'
|
||||
'table-download-module.R'
|
||||
'theme.R'
|
||||
'translate.R'
|
||||
'ui_elements.R'
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
# Generated by roxygen2: do not edit by hand
|
||||
|
||||
S3method(cut_var,character)
|
||||
S3method(cut_var,default)
|
||||
S3method(cut_var,factor)
|
||||
S3method(cut_var,hms)
|
||||
|
|
@ -9,6 +10,7 @@ export(add_class_icon)
|
|||
export(add_sparkline)
|
||||
export(align_axes)
|
||||
export(all_but)
|
||||
export(allowed_operations)
|
||||
export(append_column)
|
||||
export(append_list)
|
||||
export(argsstring2list)
|
||||
|
|
@ -87,7 +89,6 @@ export(launch_FreesearchR)
|
|||
export(limit_data_size)
|
||||
export(limit_log)
|
||||
export(line_break)
|
||||
export(list_allowed_operations)
|
||||
export(list_pkg_data)
|
||||
export(m_redcap_readServer)
|
||||
export(m_redcap_readUI)
|
||||
|
|
@ -98,6 +99,7 @@ export(merge_expression)
|
|||
export(merge_long)
|
||||
export(missing_fraction)
|
||||
export(missings_apex_plot)
|
||||
export(missings_logic_across)
|
||||
export(missings_validate)
|
||||
export(modal_create_column)
|
||||
export(modal_cut_variable)
|
||||
|
|
|
|||
26
NEWS.md
26
NEWS.md
|
|
@ -1,3 +1,29 @@
|
|||
# FreesearchR 25.12.6
|
||||
|
||||
*NEW* Export missingness table directly.
|
||||
|
||||
*NEW* Updated and slightly extended list of allowed operators for new variable creation.
|
||||
|
||||
*FIX* The exported MS Word documents prompts a warning. The codebase now includes a fix, but it only works running locally, but was disabled.
|
||||
|
||||
# FreesearchR 25.12.5
|
||||
|
||||
*NEW* Added option to add pairwise differences in discriptive table.
|
||||
|
||||
# FreesearchR 25.12.4
|
||||
|
||||
Republish 25.12.3
|
||||
|
||||
# FreesearchR 25.12.3
|
||||
|
||||
*NEW* Extended missingness evaluation to include two different approaches. Docs will catch up and video tutorials are coming.
|
||||
|
||||
# FreesearchR 25.12.2
|
||||
|
||||
*FIX* Fixed hanging interface when splitting strings.
|
||||
|
||||
*NEW* New option to shorten character variables to the first N words or characters. Shortening by characters could be useful working with eg. ICD-10 diagnostic codes.
|
||||
|
||||
# FreesearchR 25.12.1
|
||||
|
||||
*NEW* Option to edit factor label names in the "New factor" pop-up. This allows for easier naming for tables, but also to combine levels. A new variable is appended to the dataset if label names are changed. Code is now also exported.
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
app_version <- function()'25.12.1'
|
||||
app_version <- function()'25.12.6'
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -26,9 +26,9 @@ create_column_ui <- function(id) {
|
|||
htmltools::tagList(
|
||||
# datamods:::html_dependency_datamods(),
|
||||
# html_dependency_FreesearchR(),
|
||||
shiny::tags$head(
|
||||
shiny::tags$link(rel = "stylesheet", type = "text/css", href = "FreesearchR/inst/assets/css/FreesearchR.css")
|
||||
),
|
||||
shiny::tags$head(
|
||||
shiny::tags$link(rel = "stylesheet", type = "text/css", href = "FreesearchR/inst/assets/css/FreesearchR.css")
|
||||
),
|
||||
fluidRow(
|
||||
column(
|
||||
width = 6,
|
||||
|
|
@ -184,35 +184,44 @@ create_column_server <- function(id,
|
|||
#'
|
||||
#' @rdname create-column
|
||||
# @importFrom methods getGroupMembers
|
||||
list_allowed_operations <- function() {
|
||||
c(
|
||||
"(", "c",
|
||||
allowed_operations <- function() {
|
||||
list(
|
||||
"Misc" = c("(", "c",":","~"),
|
||||
# getGroupMembers("Arith"),
|
||||
c("+", "-", "*", "^", "%%", "%/%", "/"),
|
||||
"Arithmetics" = c("+", "-", "*", "^", "%%", "%/%", "/"),
|
||||
# getGroupMembers("Compare"),
|
||||
c("==", ">", "<", "!=", "<=", ">="),
|
||||
"Compare" = c("==", ">", "<", "!=", "<=", ">="),
|
||||
# getGroupMembers("Logic"),
|
||||
c("&", "|"),
|
||||
"Logic" = c("&", "|", "is.na", "ifelse", "any", "all"),
|
||||
# getGroupMembers("Math"),
|
||||
c(
|
||||
"Math" = c(
|
||||
"abs", "sign", "sqrt", "ceiling", "floor", "trunc", "cummax",
|
||||
"cummin", "cumprod", "cumsum", "exp", "expm1", "log", "log10",
|
||||
"log2", "log1p", "cos", "cosh", "sin", "sinh", "tan", "tanh",
|
||||
"acos", "acosh", "asin", "asinh", "atan", "atanh", "cospi", "sinpi",
|
||||
"tanpi", "gamma", "lgamma", "digamma", "trigamma"
|
||||
"tanpi", "gamma", "lgamma", "digamma", "trigamma", "round", "signif"
|
||||
),
|
||||
# getGroupMembers("Math2"),
|
||||
c("round", "signif"),
|
||||
# c("round", "signif"),
|
||||
# getGroupMembers("Summary"),
|
||||
c("max", "min", "range", "prod", "sum", "any", "all"),
|
||||
"pmin", "pmax", "mean",
|
||||
"paste", "paste0", "substr", "nchar", "trimws",
|
||||
"gsub", "sub", "grepl", "ifelse", "length",
|
||||
"as.numeric", "as.character", "as.integer", "as.Date", "as.POSIXct",
|
||||
"as.factor", "factor"
|
||||
"Summary" = c(
|
||||
"max", "min", "range", "prod", "sum", "length",
|
||||
"pmin", "pmax", "mean"
|
||||
),
|
||||
"Text" = c(
|
||||
"paste", "paste0", "substr", "nchar", "trimws",
|
||||
"gsub", "sub", "grepl"
|
||||
),
|
||||
"Class" = c(
|
||||
"as.numeric", "as.character", "as.integer", "as.Date", "as.POSIXct",
|
||||
"as.factor", "factor"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
list_allowed_operations <- function(data=allowed_operations()) {
|
||||
Reduce(c,data)
|
||||
}
|
||||
|
||||
|
||||
#' @inheritParams shiny::modalDialog
|
||||
|
|
|
|||
|
|
@ -20,8 +20,18 @@
|
|||
#' @importFrom shiny selectizeInput
|
||||
#' @export
|
||||
#'
|
||||
columnSelectInput <- function(inputId, label, data, selected = "", ...,
|
||||
col_subset = NULL, placeholder = "", onInitialize, none_label="No variable selected",maxItems=NULL) {
|
||||
columnSelectInput <- function(
|
||||
inputId,
|
||||
label,
|
||||
data,
|
||||
selected = "",
|
||||
...,
|
||||
col_subset = NULL,
|
||||
placeholder = "",
|
||||
onInitialize,
|
||||
none_label = "No variable selected",
|
||||
maxItems = NULL
|
||||
) {
|
||||
datar <- if (is.reactive(data)) data else reactive(data)
|
||||
col_subsetr <- if (is.reactive(col_subset)) col_subset else reactive(col_subset)
|
||||
|
||||
|
|
@ -41,8 +51,8 @@ columnSelectInput <- function(inputId, label, data, selected = "", ...,
|
|||
)
|
||||
}, col = names(datar()))
|
||||
|
||||
if (!"none" %in% names(datar())){
|
||||
labels <- c("none"=list(sprintf('\n {\n \"name\": \"none\",\n \"label\": \"%s\",\n \"dataclass\": \"\",\n \"datatype\": \"\"\n }',none_label)),labels)
|
||||
if (!"none" %in% names(datar())) {
|
||||
labels <- c("none" = list(sprintf('\n {\n \"name\": \"none\",\n \"label\": \"%s\",\n \"dataclass\": \"\",\n \"datatype\": \"\"\n }', none_label)), labels)
|
||||
choices <- setNames(names(labels), labels)
|
||||
choices <- choices[match(if (length(col_subsetr()) == 0 || isTRUE(col_subsetr() == "")) names(datar()) else col_subsetr(), choices)]
|
||||
} else {
|
||||
|
|
@ -86,7 +96,7 @@ columnSelectInput <- function(inputId, label, data, selected = "", ...,
|
|||
'</div>';
|
||||
}
|
||||
}")),
|
||||
if (!is.null(maxItems)) list(maxItems=maxItems)
|
||||
if (!is.null(maxItems)) list(maxItems = maxItems)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
@ -107,31 +117,31 @@ columnSelectInput <- function(inputId, label, data, selected = "", ...,
|
|||
#'
|
||||
#' @examples
|
||||
#' if (shiny::interactive()) {
|
||||
#' shinyApp(
|
||||
#' ui = fluidPage(
|
||||
#' shiny::uiOutput("select"),
|
||||
#' tableOutput("data")
|
||||
#' ),
|
||||
#' server = function(input, output) {
|
||||
#' output$select <- shiny::renderUI({
|
||||
#' vectorSelectInput(
|
||||
#' inputId = "variable", label = "Variable:",
|
||||
#' data = c(
|
||||
#' "Cylinders" = "cyl",
|
||||
#' "Transmission" = "am",
|
||||
#' "Gears" = "gear"
|
||||
#' shinyApp(
|
||||
#' ui = fluidPage(
|
||||
#' shiny::uiOutput("select"),
|
||||
#' tableOutput("data")
|
||||
#' ),
|
||||
#' server = function(input, output) {
|
||||
#' output$select <- shiny::renderUI({
|
||||
#' vectorSelectInput(
|
||||
#' inputId = "variable", label = "Variable:",
|
||||
#' data = c(
|
||||
#' "Cylinders" = "cyl",
|
||||
#' "Transmission" = "am",
|
||||
#' "Gears" = "gear"
|
||||
#' )
|
||||
#' )
|
||||
#' )
|
||||
#' })
|
||||
#' })
|
||||
#'
|
||||
#' output$data <- renderTable(
|
||||
#' {
|
||||
#' mtcars[, c("mpg", input$variable), drop = FALSE]
|
||||
#' },
|
||||
#' rownames = TRUE
|
||||
#' )
|
||||
#' }
|
||||
#' )
|
||||
#' output$data <- renderTable(
|
||||
#' {
|
||||
#' mtcars[, c("mpg", input$variable), drop = FALSE]
|
||||
#' },
|
||||
#' rownames = TRUE
|
||||
#' )
|
||||
#' }
|
||||
#' )
|
||||
#' }
|
||||
vectorSelectInput <- function(inputId,
|
||||
label,
|
||||
|
|
@ -184,5 +194,3 @@ vectorSelectInput <- function(inputId,
|
|||
)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ cut_variable_ui <- function(id) {
|
|||
column(
|
||||
width = 3,
|
||||
shiny::conditionalPanel(
|
||||
condition = "input.method != 'top' && input.method != 'bottom'",
|
||||
condition = "input.method != 'top' && input.method != 'bottom' && input.method != 'words' && input.method != 'characters'",
|
||||
ns = ns,
|
||||
checkboxInput(
|
||||
inputId = ns("right"),
|
||||
|
|
@ -94,7 +94,7 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
|
|||
data <- data_r()
|
||||
rv$data <- data
|
||||
vars_num <- vapply(data, \(.x){
|
||||
is.numeric(.x) || is_datetime(.x) || (is.factor(.x) && length(levels(.x)) > 2)
|
||||
is.numeric(.x) || is_datetime(.x) || (is.factor(.x) && length(levels(.x)) > 2) || is.character(.x)
|
||||
}, logical(1))
|
||||
vars_num <- names(vars_num)[vars_num]
|
||||
|
||||
|
|
@ -216,6 +216,12 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
|
|||
"top",
|
||||
"bottom"
|
||||
)
|
||||
} else if ("character" %in% class(data[[variable]])) {
|
||||
choices <- c(
|
||||
choices,
|
||||
"characters",
|
||||
"words"
|
||||
)
|
||||
} else {
|
||||
choices <- c(
|
||||
choices,
|
||||
|
|
@ -294,7 +300,9 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
|
|||
list(var = f, brks = levels(f))
|
||||
} else if (input$method %in% c(
|
||||
"top",
|
||||
"bottom"
|
||||
"bottom",
|
||||
"characters",
|
||||
"words"
|
||||
)) {
|
||||
# This allows factor simplification to get the top or bottom count
|
||||
f <- cut_var(data[[variable]], breaks = input$n_breaks)
|
||||
|
|
@ -409,7 +417,6 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
|
|||
responseName = "count"
|
||||
)
|
||||
count_data$freq <- paste(signif(count_data$count / nrow(data) * 100, 3), "%")
|
||||
# browser()
|
||||
gridTheme <- getOption("datagrid.theme")
|
||||
if (length(gridTheme) < 1) {
|
||||
datamods:::apply_grid_theme()
|
||||
|
|
@ -476,6 +483,9 @@ plot_histogram <- function(data, column = NULL, bins = 30, breaks = NULL, color
|
|||
} else {
|
||||
x <- data[[column]]
|
||||
}
|
||||
if (is.character(x)){
|
||||
x <- REDCapCAST::as_factor(x)
|
||||
}
|
||||
x <- as.numeric(x)
|
||||
op <- par(mar = rep(1.5, 4))
|
||||
on.exit(par(op))
|
||||
|
|
@ -551,6 +561,18 @@ cut_methods <- function() {
|
|||
min = 1,
|
||||
max = 50
|
||||
),
|
||||
"characters" = list(
|
||||
descr = i18n$t("Shorten to first letters"),
|
||||
breaks = i18n$t("Letters"),
|
||||
min = 1,
|
||||
max = 20
|
||||
),
|
||||
"words" = list(
|
||||
descr = i18n$t("Shorten to first words"),
|
||||
breaks = i18n$t("Words"),
|
||||
min = 1,
|
||||
max = 50
|
||||
),
|
||||
"fixed" = list(
|
||||
descr = i18n$t("By specified numbers"),
|
||||
breaks = i18n$t("Breaks"),
|
||||
|
|
|
|||
48
R/cut_var.R
48
R/cut_var.R
|
|
@ -184,21 +184,24 @@ cut_var.factor <- function(x, breaks = NULL, type = c("top", "bottom"), other =
|
|||
tbl <- sort(table(x), decreasing = TRUE)
|
||||
|
||||
if (type == "top") {
|
||||
if (length(levels(x)) <= breaks){
|
||||
if (length(levels(x)) <= breaks) {
|
||||
return(x)
|
||||
}
|
||||
lvls <- names(tbl[seq_len(breaks)])
|
||||
} else if (type == "bottom") {
|
||||
freqs_check <- tbl / NROW(x) * 100 < breaks
|
||||
if (!any(freqs_check)){
|
||||
if (!any(freqs_check)) {
|
||||
return(x)
|
||||
}
|
||||
lvls <- names(tbl)[!freqs_check]
|
||||
}
|
||||
|
||||
if (other %in% lvls) {
|
||||
other <- paste(other, "_freesearchr")
|
||||
}
|
||||
# if (other %in% lvls) {
|
||||
# other <- paste(other, "_freesearchr")
|
||||
# }
|
||||
|
||||
# Ensure unique new level name
|
||||
other <- unique_names(other, lvls)
|
||||
|
||||
## Relabel and relevel
|
||||
out <- forcats::fct_relabel(
|
||||
|
|
@ -214,6 +217,41 @@ cut_var.factor <- function(x, breaks = NULL, type = c("top", "bottom"), other =
|
|||
}
|
||||
|
||||
|
||||
#' Subset first part of string to factor
|
||||
#'
|
||||
#' @name cut_var
|
||||
#'
|
||||
#' @returns factor
|
||||
#' @export
|
||||
#'
|
||||
#' @examples
|
||||
#' c("Sunday", "This week is short") |> cut_var(breaks = 3)
|
||||
cut_var.character <- function(x, breaks = NULL, type = c("characters", "words"), ...) {
|
||||
args <- list(...)
|
||||
|
||||
if (is.null(breaks)) {
|
||||
return(x)
|
||||
}
|
||||
|
||||
type <- match.arg(type)
|
||||
|
||||
if (type == "characters") {
|
||||
out <- substr(x, start = 1, stop = breaks)
|
||||
} else if (type == "words") {
|
||||
out <- strsplit(x, " ") |>
|
||||
sapply(\(.x){
|
||||
if (length(.x) > breaks) {
|
||||
paste(.x[seq_len(breaks)], collapse = " ")
|
||||
} else {
|
||||
paste(.x, collapse = " ")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
attr(out, which = "brks") <- breaks
|
||||
REDCapCAST::as_factor(out)
|
||||
}
|
||||
|
||||
#' Test class
|
||||
#'
|
||||
#' @param data data
|
||||
|
|
|
|||
|
|
@ -709,7 +709,7 @@ create_plot <- function(data, type, pri, sec, ter = NULL, ...) {
|
|||
out
|
||||
}
|
||||
|
||||
#' Print label, and if missing print variable name
|
||||
#' Print label, and if missing print variable name for plots
|
||||
#'
|
||||
#' @param data vector or data frame
|
||||
#' @param var variable name. Optional.
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
hosted_version <- function()'v25.12.1-251202'
|
||||
hosted_version <- function()'v25.12.6-251212'
|
||||
|
|
|
|||
|
|
@ -1,18 +1,56 @@
|
|||
#' Data correlations evaluation module
|
||||
#'
|
||||
#' @param id Module id
|
||||
#' @param ... additional UI elements to show before the table overview
|
||||
#'
|
||||
#' @name data-missings
|
||||
#' @returns Shiny ui module
|
||||
#' @export
|
||||
data_missings_ui <- function(id) {
|
||||
data_missings_ui <- function(id, ...) {
|
||||
ns <- shiny::NS(id)
|
||||
|
||||
shiny::tagList(
|
||||
gt::gt_output(outputId = ns("missings_table"))
|
||||
list(
|
||||
bslib::layout_sidebar(
|
||||
sidebar = bslib::sidebar(
|
||||
bslib::accordion(
|
||||
id = ns("acc_mis"),
|
||||
open = "acc_chars",
|
||||
multiple = FALSE,
|
||||
bslib::accordion_panel(
|
||||
value = "acc_pan_mis",
|
||||
title = "Settings",
|
||||
icon = bsicons::bs_icon("gear"),
|
||||
shiny::uiOutput(ns("missings_method")),
|
||||
shiny::uiOutput(ns("missings_var")),
|
||||
shiny::helpText(i18n$t("Evaluate missingness by either comparing missing values across variables (optionally grouped by af categorical or dichotomous variable) or compare variables grouped by the missing status (missing or not) of an outcome variable. If there is a significant difference i the missingness, this may cause a bias in you data and should be considered carefully interpreting the data and analyses as data may not be missing at random.")),
|
||||
shiny::br(),
|
||||
shiny::actionButton(
|
||||
inputId = ns("act_miss"),
|
||||
label = i18n$t("Evaluate"),
|
||||
width = "100%",
|
||||
icon = shiny::icon("calculator"),
|
||||
disabled = FALSE
|
||||
)
|
||||
),
|
||||
do.call(
|
||||
bslib::accordion_panel,
|
||||
c(
|
||||
list(
|
||||
title = "Download",
|
||||
icon = bsicons::bs_icon("file-earmark-arrow-down")
|
||||
),
|
||||
table_download_ui(id = ns("tbl_dwn"), title = NULL)
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
...,
|
||||
gt::gt_output(outputId = ns("missings_table"))
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
## This should really just be rebuild to only contain a function
|
||||
|
||||
#'
|
||||
#' @param data data
|
||||
|
|
@ -23,108 +61,216 @@ data_missings_ui <- function(id) {
|
|||
#' @export
|
||||
data_missings_server <- function(id,
|
||||
data,
|
||||
variable,
|
||||
max_level=20,
|
||||
max_level = 20,
|
||||
...) {
|
||||
shiny::moduleServer(
|
||||
id = id,
|
||||
module = function(input, output, session) {
|
||||
# ns <- session$ns
|
||||
ns <- session$ns
|
||||
|
||||
datar <- if (is.reactive(data)) data else reactive(data)
|
||||
variabler <- if (is.reactive(variable)) variable else reactive(variable)
|
||||
|
||||
rv <- shiny::reactiveValues(
|
||||
data = NULL,
|
||||
table = NULL
|
||||
)
|
||||
|
||||
rv$data <- shiny::reactive({
|
||||
df_tbl <- datar()
|
||||
by_var <- variabler()
|
||||
## Notes
|
||||
##
|
||||
## Code export is still missing
|
||||
## Direct table export would be nice
|
||||
|
||||
tryCatch(
|
||||
{
|
||||
out <- compare_missings(df_tbl,by_var,max_level = max_level)
|
||||
},
|
||||
error = function(err) {
|
||||
showNotification(paste0("Error: ", err), type = "err")
|
||||
}
|
||||
)
|
||||
shiny::observe(
|
||||
output$missings_method <- shiny::renderUI({
|
||||
shiny::req(data())
|
||||
vectorSelectInput(
|
||||
inputId = ns("missings_method"),
|
||||
label = i18n$t("Analysis method for missingness overview"),
|
||||
choices = setNames(
|
||||
c(
|
||||
"predictors",
|
||||
"outcome"
|
||||
),
|
||||
c(
|
||||
i18n$t("Overview of missings across variables"),
|
||||
i18n$t("Overview of difference in variables by missing status in outcome")
|
||||
)
|
||||
)
|
||||
)
|
||||
})
|
||||
)
|
||||
|
||||
out
|
||||
})
|
||||
|
||||
output$missings_table <- gt::render_gt({
|
||||
shiny::req(datar)
|
||||
shiny::req(variabler)
|
||||
|
||||
if (is.null(variabler()) || variabler() == "" || !variabler() %in% names(datar())) {
|
||||
tbl <- rv$data()
|
||||
if (anyNA(datar())){
|
||||
title <- i18n$t("No variable chosen for analysis")
|
||||
shiny::observe({
|
||||
output$missings_var <- shiny::renderUI({
|
||||
shiny::req(datar())
|
||||
shiny::req(input$missings_method)
|
||||
# browser()
|
||||
if (input$missings_method == "predictors") {
|
||||
label <- i18n$t("Select a variable for grouped overview")
|
||||
df <- data_type_filter(data(), type = c("categorical", "dichotomous"))
|
||||
col_subset <- c("none", names(df))
|
||||
} else {
|
||||
title <- i18n$t("No missing observations")
|
||||
label <- i18n$t("Select outcome variable for overview")
|
||||
df <- datar()[apply(datar(), 2, anyNA)]
|
||||
col_subset <- names(df)
|
||||
}
|
||||
} else {
|
||||
tbl <- rv$data()|>
|
||||
gtsummary::bold_p()
|
||||
title <- glue::glue(i18n$t("Missing vs non-missing observations in the variable **'{variabler()}'**"))
|
||||
}
|
||||
|
||||
out <- tbl |>
|
||||
gtsummary::as_gt() |>
|
||||
gt::tab_header(title = gt::md(title))
|
||||
|
||||
rv$table <- out
|
||||
|
||||
out
|
||||
columnSelectInput(
|
||||
inputId = ns("missings_var"),
|
||||
label = label,
|
||||
data = df,
|
||||
col_subset = col_subset,
|
||||
none_label = i18n$t("No variable")
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
return(reactive(rv$table))
|
||||
|
||||
shiny::observeEvent(
|
||||
list(input$act_miss),
|
||||
{
|
||||
shiny::req(datar())
|
||||
shiny::req(input$missings_var)
|
||||
# browser()
|
||||
df_tbl <- datar()
|
||||
by_var <- input$missings_var
|
||||
|
||||
parameters <- list(
|
||||
by_var = by_var,
|
||||
max_level = max_level,
|
||||
type = input$missings_method
|
||||
)
|
||||
|
||||
tryCatch(
|
||||
{
|
||||
shiny::withProgress(message = i18n$t("Calculating. Hold tight for a moment.."), {
|
||||
out <- do.call(
|
||||
compare_missings,
|
||||
modifyList(parameters, list(data = df_tbl))
|
||||
)
|
||||
})
|
||||
},
|
||||
error = function(err) {
|
||||
showNotification(paste0("Error: ", err), type = "err")
|
||||
}
|
||||
)
|
||||
|
||||
if (is.null(input$missings_var) || input$missings_var == "" || !input$missings_var %in% names(datar()) || input$missings_var == "none") {
|
||||
# if (is.null(variabler()) || variabler() == "" || !variabler() %in% names(data()) || variabler() == "none") {
|
||||
# tbl <- rv$data()
|
||||
if (anyNA(datar())) {
|
||||
if (input$missings_method == "predictors") {
|
||||
title <- i18n$t("Overview of missing observations")
|
||||
} else {
|
||||
title <- i18n$t("No outcome measure chosen")
|
||||
}
|
||||
} else {
|
||||
title <- i18n$t("No missing observations")
|
||||
}
|
||||
} else {
|
||||
## Due to reactivity, the table updates too quickly. this mitigates that issue..
|
||||
|
||||
|
||||
if (input$missings_var == "predictors") {
|
||||
title <- glue::glue(i18n$t("Missings across variables by the variable **'{input$missings_var}'**"))
|
||||
} else {
|
||||
title <- glue::glue(i18n$t("Missing vs non-missing observations in the variable **'{input$missings_var}'**"))
|
||||
}
|
||||
}
|
||||
|
||||
attr(out, "tbl_title") <- title
|
||||
|
||||
rv$data <- shiny::reactive(out)
|
||||
}
|
||||
)
|
||||
|
||||
shiny::observeEvent(
|
||||
list(
|
||||
# input$act_miss
|
||||
rv$data
|
||||
),
|
||||
{
|
||||
output$missings_table <- gt::render_gt({
|
||||
shiny::req(rv$data)
|
||||
# shiny::req(input$missings_var)
|
||||
# browser()
|
||||
if ("p.value" %in% names(rv$data()[["table_body"]])) {
|
||||
tbl <- rv$data() |>
|
||||
gtsummary::bold_p()
|
||||
} else {
|
||||
tbl <- rv$data()
|
||||
}
|
||||
|
||||
|
||||
out <- tbl |>
|
||||
gtsummary::as_gt() |>
|
||||
gt::tab_header(title = gt::md(attr(tbl, "tbl_title")))
|
||||
|
||||
attr(out, "strat_var") <- input$missings_var
|
||||
|
||||
rv$table <- out
|
||||
|
||||
out
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
table_download_server(
|
||||
id = "tbl_dwn",
|
||||
data = shiny::reactive(rv$table),
|
||||
file_name = "missings_table"
|
||||
)
|
||||
|
||||
return(shiny::reactive(rv$table))
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
missing_demo_app <- function() {
|
||||
ui <- shiny::fluidPage(
|
||||
shiny::actionButton(
|
||||
inputId = "modal_missings",
|
||||
label = "Browse data",
|
||||
width = "100%",
|
||||
disabled = FALSE
|
||||
),
|
||||
shiny::selectInput(
|
||||
inputId = "missings_var",
|
||||
label = "Select variable to stratify analysis", choices = c("cyl", "vs")
|
||||
),
|
||||
data_missings_ui("data")
|
||||
ui <- do.call(
|
||||
bslib::page,
|
||||
c(
|
||||
list(
|
||||
title = i18n$t("Missings"),
|
||||
icon = bsicons::bs_icon("x-circle")
|
||||
),
|
||||
data_missings_ui(id = "data"),
|
||||
gt::gt_output("table_p")
|
||||
)
|
||||
)
|
||||
server <- function(input, output, session) {
|
||||
data_demo <- mtcars
|
||||
data_demo[sample(1:32, 10), "cyl"] <- NA
|
||||
data_demo[sample(1:32, 8), "vs"] <- NA
|
||||
|
||||
data_missings_server(id = "data", data = data_demo, variable = shiny::reactive(input$missings_var))
|
||||
rv <- shiny::reactiveValues(
|
||||
table = NULL
|
||||
)
|
||||
|
||||
visual_summary_server(id = "visual", data = data_demo)
|
||||
rv$table <- data_missings_server(id = "data", data = data_demo)
|
||||
|
||||
observeEvent(input$modal_missings, {
|
||||
tryCatch(
|
||||
{
|
||||
modal_visual_summary(id = "visual")
|
||||
},
|
||||
error = function(err) {
|
||||
showNotification(paste0("We encountered the following error browsing your data: ", err), type = "err")
|
||||
}
|
||||
)
|
||||
output$table_p <- gt::render_gt({
|
||||
rv$table
|
||||
})
|
||||
|
||||
# visual_summary_server(id = "visual", data = data_demo)
|
||||
|
||||
# observeEvent(input$modal_missings, {
|
||||
# tryCatch(
|
||||
# {
|
||||
# modal_visual_summary(id = "visual")
|
||||
# },
|
||||
# error = function(err) {
|
||||
# showNotification(paste0("We encountered the following error browsing your data: ", err), type = "err")
|
||||
# }
|
||||
# )
|
||||
# })
|
||||
}
|
||||
shiny::shinyApp(ui, server)
|
||||
}
|
||||
|
||||
missing_demo_app()
|
||||
# missing_demo_app()
|
||||
|
||||
#' Pairwise comparison of missings across covariables
|
||||
#'
|
||||
|
|
@ -134,24 +280,76 @@ missing_demo_app()
|
|||
#' @returns gtsummary list object
|
||||
#' @export
|
||||
#'
|
||||
compare_missings <- function(data,by_var,max_level=20){
|
||||
compare_missings <- function(
|
||||
data,
|
||||
by_var,
|
||||
max_level = 20,
|
||||
type = c("predictors", "outcome")
|
||||
) {
|
||||
type <- match.arg(type)
|
||||
|
||||
if (!is.null(by_var) && by_var != "" && by_var %in% names(data)) {
|
||||
data <- data |>
|
||||
lapply(\(.x){
|
||||
# browser()
|
||||
if (is.factor(.x)){
|
||||
cut_var(.x,breaks=20,type="top")
|
||||
if (is.factor(.x)) {
|
||||
cut_var(.x, breaks = 20, type = "top")
|
||||
} else {
|
||||
.x
|
||||
}
|
||||
}) |> dplyr::bind_cols()
|
||||
}) |>
|
||||
dplyr::bind_cols()
|
||||
|
||||
data[[by_var]] <- ifelse(is.na(data[[by_var]]), "Missing", "Non-missing")
|
||||
if (type == "predictors") {
|
||||
data <- missings_logic_across(data, exclude = by_var)
|
||||
} else {
|
||||
data[[by_var]] <- ifelse(is.na(data[[by_var]]), "Missing", "Non-missing")
|
||||
}
|
||||
|
||||
out <- gtsummary::tbl_summary(data, by = by_var) |>
|
||||
gtsummary::add_p()
|
||||
} else {
|
||||
if (type == "predictors") {
|
||||
data <- missings_logic_across(data)
|
||||
}
|
||||
|
||||
out <- gtsummary::tbl_summary(data)
|
||||
}
|
||||
|
||||
out
|
||||
}
|
||||
|
||||
#' Converting all variables to logicals by missing status
|
||||
#'
|
||||
#' @param data data
|
||||
#' @param exclude character vector of variable names to be excluded
|
||||
#'
|
||||
#' @returns data frame
|
||||
#' @export
|
||||
#'
|
||||
#' @examples
|
||||
#' mtcars |> missings_logic_across("cyl")
|
||||
#' ## gtsummary::trial |>
|
||||
#' ## missings_logic_across() |>
|
||||
#' ## gtsummary::tbl_summary()
|
||||
missings_logic_across <- function(data, exclude = NULL) {
|
||||
# This function includes a approach way to preserve variable labels
|
||||
names(data) |>
|
||||
lapply(\(.x){
|
||||
# browser()
|
||||
# Saving original labels
|
||||
lab <- REDCapCAST::get_attr(data[[.x]], attr = "label")
|
||||
if (!.x %in% exclude) {
|
||||
out <- is.na(data[[.x]])
|
||||
} else {
|
||||
out <- data[[.x]]
|
||||
}
|
||||
if (!is.na(lab)) {
|
||||
# Restoring original labels, if not NA
|
||||
REDCapCAST::set_attr(data = out, label = lab, attr = "label", overwrite = TRUE)
|
||||
} else {
|
||||
out
|
||||
}
|
||||
}) |>
|
||||
dplyr::bind_cols(.name_repair = "unique_quiet") |>
|
||||
setNames(names(data))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,12 +51,10 @@ plot_download_server <- function(id,
|
|||
shiny::moduleServer(
|
||||
id = id,
|
||||
module = function(input, output, session) {
|
||||
# ns <- session$ns
|
||||
|
||||
|
||||
|
||||
output$download_plot <- shiny::downloadHandler(
|
||||
filename = paste0(file_name, ".", input$plot_type),
|
||||
filename = function() {
|
||||
paste0(file_name, ".", input$plot_type)
|
||||
},
|
||||
content = function(file) {
|
||||
shiny::withProgress(message = "Saving the plot. Hold on for a moment..", {
|
||||
ggplot2::ggsave(
|
||||
|
|
@ -65,7 +63,8 @@ plot_download_server <- function(id,
|
|||
width = input$plot_width,
|
||||
height = input$plot_height,
|
||||
dpi = 300,
|
||||
units = "mm", scale = 2
|
||||
units = "mm",
|
||||
scale = 2
|
||||
)
|
||||
})
|
||||
}
|
||||
|
|
@ -73,3 +72,57 @@ plot_download_server <- function(id,
|
|||
}
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
plot_download_demo_app <- function() {
|
||||
|
||||
ui <- bslib::page_fillable(
|
||||
title = "Plot Download Demo",
|
||||
bslib::layout_sidebar(
|
||||
sidebar = bslib::sidebar(
|
||||
title = "Download Settings",
|
||||
plot_download_ui(id = "plot_dwn")
|
||||
),
|
||||
bslib::card(
|
||||
bslib::card_header("Sample Plot"),
|
||||
shiny::plotOutput("demo_plot", height = "500px")
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
server <- function(input, output, session) {
|
||||
|
||||
# Create a sample ggplot
|
||||
sample_plot <- ggplot2::ggplot(mtcars, ggplot2::aes(x = wt, y = mpg, color = factor(cyl))) +
|
||||
ggplot2::geom_point(size = 3) +
|
||||
ggplot2::geom_smooth(method = "lm", se = TRUE) +
|
||||
ggplot2::labs(
|
||||
title = "Car Weight vs MPG",
|
||||
x = "Weight (1000 lbs)",
|
||||
y = "Miles per Gallon",
|
||||
color = "Cylinders"
|
||||
) +
|
||||
ggplot2::theme_minimal() +
|
||||
ggplot2::theme(
|
||||
plot.title = ggplot2::element_text(size = 16, face = "bold"),
|
||||
legend.position = "bottom"
|
||||
)
|
||||
|
||||
# Display the plot
|
||||
output$demo_plot <- shiny::renderPlot({
|
||||
sample_plot
|
||||
})
|
||||
|
||||
# Connect to download module
|
||||
plot_download_server(
|
||||
id = "plot_dwn",
|
||||
data = sample_plot,
|
||||
file_name = "mtcars_plot"
|
||||
)
|
||||
}
|
||||
|
||||
shiny::shinyApp(ui, server)
|
||||
}
|
||||
|
||||
# Run the demo
|
||||
# plot_download_demo_app()
|
||||
|
|
|
|||
BIN
R/sysdata.rda
BIN
R/sysdata.rda
Binary file not shown.
115
R/table-download-module.R
Normal file
115
R/table-download-module.R
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
table_download_ui <- function(id, title = "Table", ...) {
|
||||
ns <- shiny::NS(id)
|
||||
shiny::tagList(
|
||||
shiny::h4(title),
|
||||
shiny::helpText(i18n$t("Choose your favourite output file format for further work, and download, when the analyses are done.")),
|
||||
shiny::br(),
|
||||
shiny::br(),
|
||||
shiny::selectInput(
|
||||
inputId = ns("output_format"),
|
||||
label = "Output format",
|
||||
selected = NULL,
|
||||
choices = list(
|
||||
"MS Word" = "docx",
|
||||
"Compatible (rtf)" = "rtf"
|
||||
)
|
||||
),
|
||||
shiny::br(),
|
||||
shiny::uiOutput(ns("download_button_container")),
|
||||
# shiny::downloadButton(
|
||||
# outputId = ns("act_table"),
|
||||
# label = "Download table",
|
||||
# icon = shiny::icon("download")
|
||||
# ),
|
||||
shiny::br()
|
||||
)
|
||||
}
|
||||
|
||||
table_download_server <- function(id, data, file_name = "table", ...) {
|
||||
shiny::moduleServer(
|
||||
id = id,
|
||||
module = function(input, output, session) {
|
||||
ns <- session$ns
|
||||
|
||||
output$download_button_container <- shiny::renderUI({
|
||||
# Check if data exists and is valid
|
||||
if (!is.null(data()) && (inherits(data(), "gt_tbl") || inherits(data(), "gtsummary"))) {
|
||||
shiny::downloadButton(
|
||||
outputId = ns("act_table"),
|
||||
label = i18n$t("Download table"),
|
||||
icon = shiny::icon("download")
|
||||
)
|
||||
} else {
|
||||
# Return NULL to show nothing
|
||||
NULL
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
output$act_table <- shiny::downloadHandler(
|
||||
filename = function() {
|
||||
paste0("report.", input$output_format)
|
||||
},
|
||||
content = function(file) {
|
||||
shiny::req(data())
|
||||
type <- input$output_format
|
||||
table <- data()
|
||||
|
||||
shiny::withProgress(message = i18n$t("Generating the report. Hold on for a moment.."), {
|
||||
tryCatch(
|
||||
{
|
||||
# browser()
|
||||
if (inherits(table, "gtsummary")) {
|
||||
table <- gtsummary::as_gt(table)
|
||||
}
|
||||
out <- gt::gtsave(
|
||||
data = table,
|
||||
filename = file # Save to the file path provided by downloadHandler
|
||||
)
|
||||
# This only works locally and was disabled
|
||||
# if (type == "docx") {
|
||||
# out |> doconv::docx_update()
|
||||
# } else {
|
||||
# out
|
||||
# }
|
||||
|
||||
out
|
||||
},
|
||||
error = function(err) {
|
||||
shiny::showNotification(paste0(i18n$t("Error: "), err), type = "error")
|
||||
}
|
||||
)
|
||||
})
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
# In your UI
|
||||
table_download_demo <- function() {
|
||||
ui <- fluidPage(
|
||||
table_download_ui(id = "my_table", title = "Download Results")
|
||||
)
|
||||
|
||||
# In your server
|
||||
server <- function(input, output, session) {
|
||||
# Your data as a reactive
|
||||
my_table_data <- reactive({
|
||||
# This should return a gt or gtsummary table
|
||||
mtcars |>
|
||||
gt::gt() |>
|
||||
gt::tab_header("My Table")
|
||||
})
|
||||
|
||||
# Call the module server - THIS IS CRITICAL
|
||||
table_download_server(
|
||||
id = "my_table", # Must match the UI id
|
||||
data = my_table_data # Pass the reactive (without parentheses)
|
||||
)
|
||||
}
|
||||
shiny::shinyApp(ui, server)
|
||||
}
|
||||
|
||||
# table_download_demo()
|
||||
|
|
@ -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"),
|
||||
|
|
@ -452,26 +462,15 @@ ui_elements <- function(selection) {
|
|||
data_correlations_ui(id = "correlations", height = 600)
|
||||
)
|
||||
),
|
||||
bslib::nav_panel(
|
||||
title = i18n$t("Missings"),
|
||||
icon = bsicons::bs_icon("x-circle"),
|
||||
bslib::layout_sidebar(
|
||||
sidebar = bslib::sidebar(
|
||||
bslib::accordion(
|
||||
id = "acc_mis",
|
||||
open = "acc_chars",
|
||||
multiple = FALSE,
|
||||
bslib::accordion_panel(
|
||||
value = "acc_pan_mis",
|
||||
title = "Settings",
|
||||
icon = bsicons::bs_icon("x-circle"),
|
||||
shiny::uiOutput("missings_var"),
|
||||
shiny::helpText(i18n$t("To consider if data is missing by random, choose the outcome/dependent variable (only variables with any missings are available). If there is a significant difference across other variables depending on missing observations, it may not be missing at random."))
|
||||
)
|
||||
)
|
||||
do.call(
|
||||
bslib::nav_panel,
|
||||
c(
|
||||
list(
|
||||
title = i18n$t("Missings"),
|
||||
icon = bsicons::bs_icon("x-circle")
|
||||
),
|
||||
validation_ui("validation_mcar"),
|
||||
data_missings_ui(id = "missingness")
|
||||
data_missings_ui(id = "missingness",
|
||||
validation_ui("validation_mcar"))
|
||||
)
|
||||
)
|
||||
),
|
||||
|
|
|
|||
|
|
@ -688,7 +688,7 @@ convert_to <- function(data,
|
|||
|
||||
#' Get variable(s) to convert
|
||||
#'
|
||||
#' @param vars Output of [summary_vars()]
|
||||
#' @param vars variables, output from summary_vars() function
|
||||
#' @param classes_input List of inputs containing new classes
|
||||
#'
|
||||
#' @return a `data.table`.
|
||||
|
|
|
|||
|
|
@ -109,6 +109,9 @@ validation_server <- function(id,
|
|||
purrr::list_flatten()
|
||||
} else if (length(to_validate) > 0) {
|
||||
out <- make_validation_alerts(to_validate)
|
||||
} else {
|
||||
## Defaulting to an emptu output vector
|
||||
out <- character()
|
||||
}
|
||||
valid_ui$x <- tagList(out)
|
||||
}
|
||||
|
|
@ -332,7 +335,7 @@ validation_lib <- function(name = NULL) {
|
|||
"mcar" = function(x, y) {
|
||||
### Placeholder for missingness validation
|
||||
list(
|
||||
string = i18n$t("There is a significant correlation between {n_nonmcar} variables and missing observations in the outcome variable {outcome}."),
|
||||
string = i18n$t("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}."),
|
||||
summary.fun = mcar_validate,
|
||||
summary.fun.args = list(
|
||||
data = x,
|
||||
|
|
|
|||
183
SESSION.md
183
SESSION.md
|
|
@ -11,11 +11,11 @@
|
|||
|collate |en_US.UTF-8 |
|
||||
|ctype |en_US.UTF-8 |
|
||||
|tz |Europe/Copenhagen |
|
||||
|date |2025-12-02 |
|
||||
|date |2025-12-12 |
|
||||
|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.1.251202 |
|
||||
|FreesearchR |25.12.6.251212 |
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
|
@ -26,181 +26,205 @@
|
|||
|apexcharter |0.4.4 |2024-09-06 |CRAN (R 4.4.1) |
|
||||
|askpass |1.2.1 |2024-10-04 |CRAN (R 4.4.1) |
|
||||
|assertthat |0.2.1 |2019-03-21 |CRAN (R 4.4.1) |
|
||||
|attachment |0.4.5 |2025-03-14 |CRAN (R 4.4.1) |
|
||||
|attempt |0.3.1 |2020-05-03 |CRAN (R 4.4.1) |
|
||||
|backports |1.5.0 |2024-05-23 |CRAN (R 4.4.1) |
|
||||
|base64enc |0.1-3 |2015-07-28 |CRAN (R 4.4.1) |
|
||||
|bayestestR |0.16.1 |2025-07-01 |CRAN (R 4.4.1) |
|
||||
|bayestestR |0.17.0 |2025-08-29 |CRAN (R 4.4.1) |
|
||||
|bit |4.6.0 |2025-03-06 |CRAN (R 4.4.1) |
|
||||
|bit64 |4.6.0-1 |2025-01-16 |CRAN (R 4.4.1) |
|
||||
|bitops |1.0-9 |2024-10-03 |CRAN (R 4.4.1) |
|
||||
|boot |1.3-31 |2024-08-28 |RSPM (R 4.4.0) |
|
||||
|boot |1.3-32 |2025-08-29 |CRAN (R 4.4.1) |
|
||||
|brio |1.1.5 |2024-04-24 |CRAN (R 4.4.1) |
|
||||
|broom |1.0.9 |2025-07-28 |CRAN (R 4.4.1) |
|
||||
|broom.helpers |1.21.0 |2025-04-24 |CRAN (R 4.4.1) |
|
||||
|broom |1.0.11 |2025-12-04 |CRAN (R 4.4.3) |
|
||||
|broom.helpers |1.22.0 |2025-09-17 |CRAN (R 4.4.1) |
|
||||
|bsicons |0.1.2 |2023-11-04 |CRAN (R 4.4.0) |
|
||||
|bslib |0.9.0 |2025-01-30 |CRAN (R 4.4.1) |
|
||||
|cachem |1.1.0 |2024-05-16 |CRAN (R 4.4.1) |
|
||||
|calendar |0.2.0 |2024-08-20 |CRAN (R 4.4.1) |
|
||||
|cards |0.6.1 |2025-07-03 |CRAN (R 4.4.1) |
|
||||
|cardx |0.2.5 |2025-07-03 |CRAN (R 4.4.1) |
|
||||
|cards |0.7.1 |2025-12-02 |CRAN (R 4.4.3) |
|
||||
|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) |
|
||||
|checkmate |2.3.2 |2024-07-29 |RSPM (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) |
|
||||
|cli |3.6.5 |2025-04-23 |CRAN (R 4.4.1) |
|
||||
|cluster |2.1.8.1 |2025-03-12 |CRAN (R 4.4.1) |
|
||||
|codetools |0.2-20 |2024-03-31 |CRAN (R 4.4.1) |
|
||||
|colorspace |2.1-1 |2024-07-26 |CRAN (R 4.4.1) |
|
||||
|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.2.0 |2025-07-17 |CRAN (R 4.4.1) |
|
||||
|datawizard |1.3.0 |2025-10-11 |CRAN (R 4.4.1) |
|
||||
|DEoptimR |1.1-4 |2025-07-27 |CRAN (R 4.4.1) |
|
||||
|desc |1.4.3 |2023-12-10 |CRAN (R 4.4.1) |
|
||||
|devtools |2.4.5 |2022-10-11 |CRAN (R 4.4.0) |
|
||||
|devtools |2.4.6 |2025-10-03 |CRAN (R 4.4.1) |
|
||||
|DHARMa |0.4.7 |2024-10-18 |CRAN (R 4.4.1) |
|
||||
|digest |0.6.37 |2024-08-19 |CRAN (R 4.4.1) |
|
||||
|digest |0.6.39 |2025-11-19 |CRAN (R 4.4.3) |
|
||||
|dockerfiler |0.2.5 |2025-05-07 |CRAN (R 4.4.1) |
|
||||
|doconv |0.3.3 |2025-08-18 |CRAN (R 4.4.1) |
|
||||
|doParallel |1.0.17 |2022-02-07 |CRAN (R 4.4.0) |
|
||||
|dplyr |1.1.4 |2023-11-17 |CRAN (R 4.4.0) |
|
||||
|DT |0.33 |2024-04-04 |CRAN (R 4.4.0) |
|
||||
|DT |0.34.0 |2025-09-02 |CRAN (R 4.4.1) |
|
||||
|e1071 |1.7-16 |2024-09-16 |CRAN (R 4.4.1) |
|
||||
|easystats |0.7.5 |2025-07-11 |CRAN (R 4.4.1) |
|
||||
|ellipsis |0.3.2 |2021-04-29 |CRAN (R 4.4.1) |
|
||||
|emmeans |1.11.2 |2025-07-11 |CRAN (R 4.4.1) |
|
||||
|emmeans |2.0.0 |2025-10-29 |CRAN (R 4.4.1) |
|
||||
|esquisse |2.1.0 |2025-02-21 |CRAN (R 4.4.1) |
|
||||
|estimability |1.5.1 |2024-05-12 |CRAN (R 4.4.1) |
|
||||
|eulerr |7.0.2 |2024-03-28 |CRAN (R 4.4.0) |
|
||||
|evaluate |1.0.4 |2025-06-18 |RSPM (R 4.4.0) |
|
||||
|eulerr |7.0.4 |2025-09-24 |CRAN (R 4.4.1) |
|
||||
|evaluate |1.0.5 |2025-08-27 |CRAN (R 4.4.1) |
|
||||
|farver |2.1.2 |2024-05-13 |CRAN (R 4.4.1) |
|
||||
|fastmap |1.2.0 |2024-05-15 |CRAN (R 4.4.1) |
|
||||
|flextable |0.9.9 |2025-05-31 |CRAN (R 4.4.1) |
|
||||
|flextable |0.9.10 |2025-08-24 |CRAN (R 4.4.1) |
|
||||
|fontawesome |0.5.3 |2024-11-16 |CRAN (R 4.4.1) |
|
||||
|fontBitstreamVera |0.1.1 |2017-02-01 |CRAN (R 4.4.1) |
|
||||
|fontLiberation |0.1.0 |2016-10-15 |CRAN (R 4.4.1) |
|
||||
|fontquiver |0.2.1 |2017-02-01 |CRAN (R 4.4.0) |
|
||||
|forcats |1.0.0 |2023-01-29 |RSPM (R 4.4.0) |
|
||||
|forcats |1.0.1 |2025-09-25 |CRAN (R 4.4.1) |
|
||||
|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.1 |NA |NA |
|
||||
|FreesearchR |25.12.6 |NA |NA |
|
||||
|fs |1.6.6 |2025-04-12 |CRAN (R 4.4.1) |
|
||||
|gdtools |0.4.2 |2025-03-27 |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) |
|
||||
|ggalluvial |0.12.5 |2023-02-22 |CRAN (R 4.4.0) |
|
||||
|ggcorrplot |0.1.4.1 |2023-09-05 |CRAN (R 4.4.0) |
|
||||
|ggforce |0.5.0 |2025-06-18 |CRAN (R 4.4.1) |
|
||||
|ggplot2 |3.5.2 |2025-04-09 |CRAN (R 4.4.1) |
|
||||
|ggridges |0.5.6 |2024-01-23 |CRAN (R 4.4.0) |
|
||||
|ggstats |0.10.0 |2025-07-02 |CRAN (R 4.4.1) |
|
||||
|ggplot2 |4.0.1 |2025-11-14 |CRAN (R 4.4.1) |
|
||||
|ggridges |0.5.7 |2025-08-27 |CRAN (R 4.4.1) |
|
||||
|ggstats |0.11.0 |2025-09-15 |CRAN (R 4.4.1) |
|
||||
|glue |1.8.0 |2024-09-30 |CRAN (R 4.4.1) |
|
||||
|gridExtra |2.3 |2017-09-09 |CRAN (R 4.4.1) |
|
||||
|gt |1.0.0 |2025-04-05 |CRAN (R 4.4.1) |
|
||||
|gt |1.1.0 |2025-09-23 |CRAN (R 4.4.1) |
|
||||
|gtable |0.3.6 |2024-10-25 |CRAN (R 4.4.1) |
|
||||
|gtsummary |2.3.0 |2025-07-03 |CRAN (R 4.4.1) |
|
||||
|gtsummary |2.5.0 |2025-12-05 |CRAN (R 4.4.3) |
|
||||
|haven |2.5.5 |2025-05-30 |CRAN (R 4.4.1) |
|
||||
|here |1.0.1 |2020-12-13 |CRAN (R 4.4.1) |
|
||||
|Hmisc |5.2-3 |2025-03-16 |CRAN (R 4.4.1) |
|
||||
|hms |1.1.3 |2023-03-21 |CRAN (R 4.4.0) |
|
||||
|here |1.0.2 |2025-09-15 |CRAN (R 4.4.1) |
|
||||
|Hmisc |5.2-4 |2025-10-05 |CRAN (R 4.4.1) |
|
||||
|hms |1.1.4 |2025-10-17 |CRAN (R 4.4.1) |
|
||||
|htmlTable |2.4.3 |2024-07-21 |CRAN (R 4.4.0) |
|
||||
|htmltools |0.5.8.1 |2024-04-04 |CRAN (R 4.4.1) |
|
||||
|htmltools |0.5.9 |2025-12-04 |CRAN (R 4.4.3) |
|
||||
|htmlwidgets |1.6.4 |2023-12-06 |CRAN (R 4.4.0) |
|
||||
|httpuv |1.6.16 |2025-04-16 |CRAN (R 4.4.1) |
|
||||
|IDEAFilter |0.2.1 |2025-07-29 |CRAN (R 4.4.1) |
|
||||
|insight |1.4.0 |2025-08-18 |CRAN (R 4.4.1) |
|
||||
|insight |1.4.4 |2025-12-06 |CRAN (R 4.4.3) |
|
||||
|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) |
|
||||
|later |1.4.2 |2025-04-08 |RSPM (R 4.4.0) |
|
||||
|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) |
|
||||
|lme4 |1.1-37 |2025-03-26 |CRAN (R 4.4.1) |
|
||||
|litedown |0.8 |2025-11-02 |CRAN (R 4.4.1) |
|
||||
|lme4 |1.1-38 |2025-12-02 |CRAN (R 4.4.3) |
|
||||
|locatexec |0.1.1 |2021-05-19 |CRAN (R 4.4.0) |
|
||||
|lubridate |1.9.4 |2024-12-08 |CRAN (R 4.4.1) |
|
||||
|magrittr |2.0.3 |2022-03-30 |RSPM (R 4.4.0) |
|
||||
|magick |2.9.0 |2025-09-08 |CRAN (R 4.4.1) |
|
||||
|magrittr |2.0.4 |2025-09-12 |CRAN (R 4.4.1) |
|
||||
|markdown |2.0 |2025-03-23 |CRAN (R 4.4.1) |
|
||||
|MASS |7.3-65 |2025-02-28 |CRAN (R 4.4.1) |
|
||||
|Matrix |1.7-3 |2025-03-11 |RSPM (R 4.4.0) |
|
||||
|Matrix |1.7-4 |2025-08-28 |CRAN (R 4.4.1) |
|
||||
|memoise |2.0.1 |2021-11-26 |CRAN (R 4.4.0) |
|
||||
|mgcv |1.9-4 |2025-11-07 |CRAN (R 4.4.1) |
|
||||
|mime |0.13 |2025-03-17 |CRAN (R 4.4.1) |
|
||||
|miniUI |0.1.2 |2025-04-17 |CRAN (R 4.4.1) |
|
||||
|minqa |1.2.8 |2024-08-17 |CRAN (R 4.4.1) |
|
||||
|mvtnorm |1.3-3 |2025-01-10 |CRAN (R 4.4.1) |
|
||||
|NHANES |2.1.0 |2015-07-02 |CRAN (R 4.4.0) |
|
||||
|nlme |3.1-168 |2025-03-31 |CRAN (R 4.4.1) |
|
||||
|nloptr |2.2.1 |2025-03-17 |CRAN (R 4.4.1) |
|
||||
|nnet |7.3-20 |2025-01-01 |CRAN (R 4.4.1) |
|
||||
|officer |0.6.10 |2025-05-30 |CRAN (R 4.4.1) |
|
||||
|officer |0.7.2 |2025-12-04 |CRAN (R 4.4.3) |
|
||||
|opdisDownsampling |1.0.1 |2024-04-15 |CRAN (R 4.4.0) |
|
||||
|openssl |2.3.3 |2025-05-26 |CRAN (R 4.4.1) |
|
||||
|openxlsx2 |1.18 |2025-07-29 |CRAN (R 4.4.1) |
|
||||
|parameters |0.27.0 |2025-07-09 |CRAN (R 4.4.1) |
|
||||
|patchwork |1.3.1 |2025-06-21 |RSPM (R 4.4.0) |
|
||||
|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) |
|
||||
|performance |0.15.0 |2025-07-10 |CRAN (R 4.4.1) |
|
||||
|pdftools |3.6.0 |2025-09-10 |CRAN (R 4.4.1) |
|
||||
|performance |0.15.3 |2025-12-01 |CRAN (R 4.4.3) |
|
||||
|phosphoricons |0.2.1 |2024-04-08 |CRAN (R 4.4.0) |
|
||||
|pillar |1.11.0 |2025-07-04 |RSPM (R 4.4.0) |
|
||||
|pillar |1.11.1 |2025-09-17 |CRAN (R 4.4.1) |
|
||||
|pkgbuild |1.4.8 |2025-05-26 |CRAN (R 4.4.1) |
|
||||
|pkgconfig |2.0.3 |2019-09-22 |CRAN (R 4.4.1) |
|
||||
|pkgload |1.4.0 |2024-06-28 |RSPM (R 4.4.0) |
|
||||
|pkgload |1.4.1 |2025-09-23 |CRAN (R 4.4.1) |
|
||||
|plyr |1.8.9 |2023-10-02 |CRAN (R 4.4.1) |
|
||||
|polyclip |1.10-7 |2024-07-23 |CRAN (R 4.4.1) |
|
||||
|pracma |2.4.4 |2023-11-10 |CRAN (R 4.4.1) |
|
||||
|pracma |2.4.6 |2025-10-22 |CRAN (R 4.4.1) |
|
||||
|processx |3.8.6 |2025-02-21 |CRAN (R 4.4.1) |
|
||||
|profvis |0.4.0 |2024-09-20 |CRAN (R 4.4.1) |
|
||||
|promises |1.3.3 |2025-05-29 |CRAN (R 4.4.1) |
|
||||
|promises |1.5.0 |2025-11-01 |CRAN (R 4.4.1) |
|
||||
|proxy |0.4-27 |2022-06-09 |CRAN (R 4.4.1) |
|
||||
|ps |1.9.1 |2025-04-12 |CRAN (R 4.4.1) |
|
||||
|purrr |1.1.0 |2025-07-10 |CRAN (R 4.4.1) |
|
||||
|purrr |1.2.0 |2025-11-04 |CRAN (R 4.4.1) |
|
||||
|qpdf |1.4.1 |2025-07-02 |CRAN (R 4.4.1) |
|
||||
|qqconf |1.3.2 |2023-04-14 |CRAN (R 4.4.0) |
|
||||
|qqplotr |0.0.6 |2023-01-25 |CRAN (R 4.4.0) |
|
||||
|quarto |1.5.0 |2025-07-28 |RSPM (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.4.0 |2025-04-10 |RSPM (R 4.4.0) |
|
||||
|ragg |1.5.0 |2025-09-02 |CRAN (R 4.4.1) |
|
||||
|rankinPlot |1.1.0 |2023-01-30 |CRAN (R 4.4.0) |
|
||||
|rbibutils |2.3 |2024-10-04 |CRAN (R 4.4.1) |
|
||||
|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) |
|
||||
|RcppArmadillo |14.6.0-1 |2025-07-02 |CRAN (R 4.4.1) |
|
||||
|RcppArmadillo |15.2.2-1 |2025-11-22 |CRAN (R 4.4.3) |
|
||||
|Rdpack |2.6.4 |2025-04-09 |CRAN (R 4.4.1) |
|
||||
|reactable |0.4.4 |2023-03-12 |CRAN (R 4.4.0) |
|
||||
|reactable |0.4.5 |2025-12-01 |CRAN (R 4.4.3) |
|
||||
|readODS |2.3.2 |2025-01-13 |CRAN (R 4.4.1) |
|
||||
|readr |2.1.5 |2024-01-10 |CRAN (R 4.4.0) |
|
||||
|readr |2.1.6 |2025-11-14 |CRAN (R 4.4.3) |
|
||||
|readxl |1.4.5 |2025-03-07 |CRAN (R 4.4.1) |
|
||||
|REDCapCAST |25.3.2 |2025-03-10 |CRAN (R 4.4.1) |
|
||||
|REDCapR |1.5.0 |2025-07-28 |CRAN (R 4.4.1) |
|
||||
|reformulas |0.4.1 |2025-04-30 |CRAN (R 4.4.1) |
|
||||
|REDCapR |1.6.0 |2025-10-08 |CRAN (R 4.4.1) |
|
||||
|reformulas |0.4.2 |2025-10-28 |CRAN (R 4.4.1) |
|
||||
|remotes |2.5.0 |2024-03-17 |CRAN (R 4.4.1) |
|
||||
|rempsyc |0.1.9 |2025-02-01 |CRAN (R 4.4.1) |
|
||||
|rempsyc |0.2.0 |2025-09-15 |CRAN (R 4.4.1) |
|
||||
|renv |1.1.5 |2025-07-24 |CRAN (R 4.4.1) |
|
||||
|reshape2 |1.4.4 |2020-04-09 |CRAN (R 4.4.0) |
|
||||
|rio |1.2.3 |2024-09-25 |CRAN (R 4.4.1) |
|
||||
|reshape2 |1.4.5 |2025-11-12 |CRAN (R 4.4.1) |
|
||||
|rio |1.2.4 |2025-09-26 |CRAN (R 4.4.1) |
|
||||
|rlang |1.1.6 |2025-04-11 |CRAN (R 4.4.1) |
|
||||
|rmarkdown |2.29 |2024-11-04 |CRAN (R 4.4.1) |
|
||||
|robustbase |0.99-4-1 |2024-09-27 |CRAN (R 4.4.1) |
|
||||
|roxygen2 |7.3.2 |2024-06-28 |RSPM (R 4.4.0) |
|
||||
|rmarkdown |2.30 |2025-09-28 |CRAN (R 4.4.1) |
|
||||
|robustbase |0.99-6 |2025-09-04 |CRAN (R 4.4.1) |
|
||||
|roxygen2 |7.3.3 |2025-09-03 |CRAN (R 4.4.1) |
|
||||
|rpart |4.1.24 |2025-01-07 |CRAN (R 4.4.1) |
|
||||
|rprojroot |2.1.0 |2025-07-12 |RSPM (R 4.4.0) |
|
||||
|rsconnect |1.5.0 |2025-06-26 |CRAN (R 4.4.1) |
|
||||
|rprojroot |2.1.1 |2025-08-26 |CRAN (R 4.4.1) |
|
||||
|rsconnect |1.7.0 |2025-12-06 |CRAN (R 4.4.3) |
|
||||
|rstudioapi |0.17.1 |2024-10-22 |CRAN (R 4.4.1) |
|
||||
|S7 |0.2.1 |2025-11-14 |CRAN (R 4.4.3) |
|
||||
|sass |0.4.10 |2025-04-11 |CRAN (R 4.4.1) |
|
||||
|scales |1.4.0 |2025-04-24 |CRAN (R 4.4.1) |
|
||||
|see |0.11.0 |2025-03-11 |CRAN (R 4.4.1) |
|
||||
|see |0.12.0 |2025-09-14 |CRAN (R 4.4.1) |
|
||||
|sessioninfo |1.2.3 |2025-02-05 |CRAN (R 4.4.1) |
|
||||
|shiny |1.11.1 |2025-07-03 |CRAN (R 4.4.1) |
|
||||
|shiny |1.12.1 |2025-12-09 |CRAN (R 4.4.1) |
|
||||
|shiny.i18n |0.3.0 |2023-01-16 |CRAN (R 4.4.0) |
|
||||
|shiny2docker |0.0.3 |2025-06-28 |CRAN (R 4.4.1) |
|
||||
|shinybusy |0.3.3 |2024-03-09 |CRAN (R 4.4.0) |
|
||||
|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) |
|
||||
|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.5.1 |2023-11-14 |RSPM (R 4.4.0) |
|
||||
|stringr |1.6.0 |2025-11-04 |CRAN (R 4.4.1) |
|
||||
|stRoke |25.9.2 |2025-09-30 |CRAN (R 4.4.1) |
|
||||
|systemfonts |1.2.3 |2025-04-30 |CRAN (R 4.4.1) |
|
||||
|testthat |3.2.3 |2025-01-13 |CRAN (R 4.4.1) |
|
||||
|textshaping |1.0.1 |2025-05-01 |RSPM (R 4.4.0) |
|
||||
|thematic |0.1.7 |2025-06-19 |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) |
|
||||
|thematic |0.1.8 |2025-09-29 |CRAN (R 4.4.1) |
|
||||
|tibble |3.3.0 |2025-06-08 |CRAN (R 4.4.1) |
|
||||
|tidyr |1.3.1 |2024-01-24 |CRAN (R 4.4.1) |
|
||||
|tidyselect |1.2.1 |2024-03-11 |CRAN (R 4.4.0) |
|
||||
|
|
@ -209,15 +233,18 @@
|
|||
|tweenr |2.0.3 |2024-02-26 |CRAN (R 4.4.0) |
|
||||
|twosamples |2.0.1 |2023-06-23 |CRAN (R 4.4.1) |
|
||||
|tzdb |0.5.0 |2025-03-15 |CRAN (R 4.4.1) |
|
||||
|urlchecker |1.0.1 |2021-11-30 |CRAN (R 4.4.1) |
|
||||
|usethis |3.1.0 |2024-11-26 |RSPM (R 4.4.0) |
|
||||
|usethis |3.2.1 |2025-09-06 |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) |
|
||||
|vroom |1.6.5 |2023-12-05 |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) |
|
||||
|vroom |1.6.7 |2025-11-28 |CRAN (R 4.4.3) |
|
||||
|withr |3.0.2 |2024-10-28 |CRAN (R 4.4.1) |
|
||||
|writexl |1.5.4 |2025-04-15 |CRAN (R 4.4.1) |
|
||||
|xfun |0.52 |2025-04-02 |RSPM (R 4.4.0) |
|
||||
|xml2 |1.3.8 |2025-03-14 |RSPM (R 4.4.0) |
|
||||
|xfun |0.54 |2025-10-30 |CRAN (R 4.4.1) |
|
||||
|xml2 |1.5.1 |2025-12-01 |CRAN (R 4.4.3) |
|
||||
|xtable |1.8-4 |2019-04-21 |CRAN (R 4.4.1) |
|
||||
|yaml |2.3.10 |2024-07-26 |CRAN (R 4.4.1) |
|
||||
|yaml |2.3.11 |2025-11-28 |CRAN (R 4.4.3) |
|
||||
|yesno |0.1.3 |2024-07-26 |CRAN (R 4.4.1) |
|
||||
|zip |2.3.3 |2025-05-13 |CRAN (R 4.4.1) |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
FROM rocker/geospatial:4.4.1
|
||||
RUN apt-get update -y && apt-get install -y cmake make libcurl4-openssl-dev libicu-dev libssl-dev pandoc zlib1g-dev libsecret-1-dev libxml2-dev libx11-dev libcairo2-dev libfontconfig1-dev libfreetype6-dev libfribidi-dev libharfbuzz-dev libjpeg-dev libpng-dev libtiff-dev libwebp-dev libfftw3-dev && rm -rf /var/lib/apt/lists/*
|
||||
RUN apt-get update -y && apt-get install -y cmake make libcurl4-openssl-dev libicu-dev libssl-dev pandoc zlib1g-dev libsecret-1-dev libxml2-dev libx11-dev libmagick++-dev gsfonts libjpeg-dev libpoppler-cpp-dev libcairo2-dev libfontconfig1-dev libfreetype6-dev libfribidi-dev libharfbuzz-dev libpng-dev libtiff-dev libwebp-dev libfftw3-dev && rm -rf /var/lib/apt/lists/*
|
||||
RUN mkdir -p /usr/local/lib/R/etc/ /usr/lib/R/etc/
|
||||
RUN echo "options(renv.config.pak.enabled = FALSE, repos = c(CRAN = 'https://cran.rstudio.com/'), download.file.method = 'libcurl', Ncpus = 4)" | tee /usr/local/lib/R/etc/Rprofile.site | tee /usr/lib/R/etc/Rprofile.site
|
||||
RUN R -e 'install.packages("remotes")'
|
||||
|
|
|
|||
843
app_docker/app.R
843
app_docker/app.R
File diff suppressed because it is too large
Load diff
1184
app_docker/renv.lock
1184
app_docker/renv.lock
File diff suppressed because one or more lines are too long
|
|
@ -150,10 +150,7 @@
|
|||
"Settings","Indstillinger"
|
||||
"The following error occured on determining correlations:","Følgende fejl opstod i forbindelse med korrelationsanalysen:"
|
||||
"We encountered the following error creating your report:","Følgende fejl opstod, da rapporten blev dannet:"
|
||||
"No variable chosen for analysis","Ingen variabel er valgt til analysen"
|
||||
"No missing observations","Ingen manglende observationer"
|
||||
"Missing vs non-missing observations in the variable **'{variabler()}'**","Manglende vs ikke-manglende observationer i variablen **'{variabler()}'**"
|
||||
"There is a significant correlation between {n_nonmcar} variables and missing observations in the outcome variable {outcome}.","Der er en betydelig korrelation blandt {n_nonmcar} variabler sammenlignet efter manglende observationer i {outcome}."
|
||||
"There is a total of {p_miss} % missing observations.","Der er i alt {p_miss} % manglende observationer."
|
||||
"Median:","Median:"
|
||||
"Restore original data","Gendan originale data"
|
||||
|
|
@ -246,11 +243,9 @@
|
|||
"Data characteristics table","Oversigtstabel"
|
||||
"The dataset without text variables","Datasættet uden variabler formateret som tekst"
|
||||
"Creating the table. Hold on for a moment..","Opretter tabellen. Vent et øjeblik.."
|
||||
"Select variable to stratify analysis","Vælg variabler til at stratificere analysen"
|
||||
"Generating the report. Hold on for a moment..","Opretter rapporten. Vent et øjeblik.."
|
||||
"We encountered the following error showing missingness:","Under analysen af manglende observationer opstod følgende fejl:"
|
||||
"We encountered the following error browsing your data:","I forsøget på at vise en dataoversigt opstod følgende fejl:"
|
||||
"To consider if data is missing by random, choose the outcome/dependent variable (only variables with any missings are available). If there is a significant difference across other variables depending on missing observations, it may not be missing at random.","Vælg svarvariablen, for at få hjælp til at vurdere om manglende observationer manglende tilfældigt eller ej (kun variabler med manglende data kan vælges). Hvis der er statistisk signifikant forskel mellem nogle af de øvrige variabler i forhold til manglende data i den valgte variable kan det være et udtryk for at data ikke mangler tilfældigt."
|
||||
"Choose a name for the column to be created or modified, then enter an expression before clicking on the button below to create the variable, or cancel to exit without saving anything.","Vælg et navn til den nye variabel, skriv din formel og tryk så på knappen for at gemme variablen, eller annuler for at lukke uden at gemme."
|
||||
"Please fill in web address and API token, then press 'Connect'.","Udfyld serveradresse og API-nøgle, og tryk så 'Fobind'."
|
||||
"Other","Other"
|
||||
|
|
@ -295,3 +290,22 @@
|
|||
"Level of detail","Level of detail"
|
||||
"Minimal","Minimal"
|
||||
"Extensive","Extensive"
|
||||
"Letters","Letters"
|
||||
"Words","Words"
|
||||
"Shorten to first letters","Shorten to first letters"
|
||||
"Shorten to first words","Shorten to first words"
|
||||
"Missings across variables by the variable **'{input$missings_var}'**","Missings across variables by the variable **'{input$missings_var}'**"
|
||||
"Missing vs non-missing observations in the variable **'{input$missings_var}'**","Missing vs non-missing observations in the variable **'{input$missings_var}'**"
|
||||
"Evaluate missingness by either comparing missing values across variables (optionally grouped by af categorical or dichotomous variable) or compare variables grouped by the missing status (missing or not) of an outcome variable. If there is a significant difference i the missingness, this may cause a bias in you data and should be considered carefully interpreting the data and analyses as data may not be missing at random.","Evaluate missingness by either comparing missing values across variables (optionally grouped by af categorical or dichotomous variable) or compare variables grouped by the missing status (missing or not) of an outcome variable. If there is a significant difference i the missingness, this may cause a bias in you data and should be considered carefully interpreting the data and analyses as data may not be missing at random."
|
||||
"Calculating. Hold tight for a moment..","Calculating. Hold tight for a moment.."
|
||||
"Overview of missing observations","Overview of missing observations"
|
||||
"Analysis method for missingness overview","Analysis method for missingness overview"
|
||||
"Overview of missings across variables","Overview of missings across variables"
|
||||
"Overview of difference in variables by missing status in outcome","Overview of difference in variables by missing status in outcome"
|
||||
"Select a variable for grouped overview","Select a variable for grouped overview"
|
||||
"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"
|
||||
"Error:","Error:"
|
||||
"Download table","Download table"
|
||||
|
|
|
|||
|
|
|
@ -103,9 +103,7 @@
|
|||
"You can choose between these file types:","You can choose between these file types:"
|
||||
"You can import {file_extensions_text} files","You can import {file_extensions_text} files"
|
||||
"First five rows are shown below:","First five rows are shown below:"
|
||||
"No variable chosen for analysis","No variable chosen for analysis"
|
||||
"No missing observations","No missing observations"
|
||||
"Missing vs non-missing observations in the variable **'{variabler()}'**","Missing vs non-missing observations in the variable **'{variabler()}'**"
|
||||
"Grouped by {get_label(data,ter)}","Grouped by {get_label(data,ter)}"
|
||||
"Import data from REDCap","Import data from REDCap"
|
||||
"REDCap server","REDCap server"
|
||||
|
|
@ -207,7 +205,6 @@
|
|||
"Correlation cut-off","Correlation cut-off"
|
||||
"Set the cut-off for considered 'highly correlated'.","Set the cut-off for considered 'highly correlated'."
|
||||
"Missings","Missings"
|
||||
"To consider if data is missing by random, choose the outcome/dependent variable (only variables with any missings are available). If there is a significant difference across other variables depending on missing observations, it may not be missing at random.","To consider if data is missing by random, choose the outcome/dependent variable (only variables with any missings are available). If there is a significant difference across other variables depending on missing observations, it may not be missing at random."
|
||||
"Visuals","Visuals"
|
||||
"Analysis validation","Analysis validation"
|
||||
"Report","Report"
|
||||
|
|
@ -230,7 +227,6 @@
|
|||
"You removed {p_out} % of observations.","You removed {p_out} % of observations."
|
||||
"You removed {p_out} % of variables.","You removed {p_out} % of variables."
|
||||
"There is a total of {p_miss} % missing observations.","There is a total of {p_miss} % missing observations."
|
||||
"There is a significant correlation between {n_nonmcar} variables and missing observations in the outcome variable {outcome}.","There is a significant correlation between {n_nonmcar} variables and missing observations in the outcome variable {outcome}."
|
||||
"Data includes {n_pairs} pairs of highly correlated variables.","Data includes {n_pairs} pairs of highly correlated variables."
|
||||
"Class","Class"
|
||||
"Observations","Observations"
|
||||
|
|
@ -267,7 +263,6 @@
|
|||
"The dataset without text variables","The dataset without text variables"
|
||||
"The data includes {n_col} variables. Please limit to 100.","The data includes {n_col} variables. Please limit to 100."
|
||||
"Creating the table. Hold on for a moment..","Creating the table. Hold on for a moment.."
|
||||
"Select variable to stratify analysis","Select variable to stratify analysis"
|
||||
"Generating the report. Hold on for a moment..","Generating the report. Hold on for a moment.."
|
||||
"We encountered the following error creating your report:","We encountered the following error creating your report:"
|
||||
"There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data.","There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data."
|
||||
|
|
@ -295,3 +290,22 @@
|
|||
"Level of detail","Level of detail"
|
||||
"Minimal","Minimal"
|
||||
"Extensive","Extensive"
|
||||
"Letters","Letters"
|
||||
"Words","Words"
|
||||
"Shorten to first letters","Shorten to first letters"
|
||||
"Shorten to first words","Shorten to first words"
|
||||
"Missings across variables by the variable **'{input$missings_var}'**","Missings across variables by the variable **'{input$missings_var}'**"
|
||||
"Missing vs non-missing observations in the variable **'{input$missings_var}'**","Missing vs non-missing observations in the variable **'{input$missings_var}'**"
|
||||
"Evaluate missingness by either comparing missing values across variables (optionally grouped by af categorical or dichotomous variable) or compare variables grouped by the missing status (missing or not) of an outcome variable. If there is a significant difference i the missingness, this may cause a bias in you data and should be considered carefully interpreting the data and analyses as data may not be missing at random.","Evaluate missingness by either comparing missing values across variables (optionally grouped by af categorical or dichotomous variable) or compare variables grouped by the missing status (missing or not) of an outcome variable. If there is a significant difference i the missingness, this may cause a bias in you data and should be considered carefully interpreting the data and analyses as data may not be missing at random."
|
||||
"Calculating. Hold tight for a moment..","Calculating. Hold tight for a moment.."
|
||||
"Overview of missing observations","Overview of missing observations"
|
||||
"Analysis method for missingness overview","Analysis method for missingness overview"
|
||||
"Overview of missings across variables","Overview of missings across variables"
|
||||
"Overview of difference in variables by missing status in outcome","Overview of difference in variables by missing status in outcome"
|
||||
"Select a variable for grouped overview","Select a variable for grouped overview"
|
||||
"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"
|
||||
"Error:","Error:"
|
||||
"Download table","Download table"
|
||||
|
|
|
|||
|
|
|
@ -103,9 +103,7 @@
|
|||
"You can choose between these file types:","You can choose between these file types:"
|
||||
"You can import {file_extensions_text} files","You can import {file_extensions_text} files"
|
||||
"First five rows are shown below:","First five rows are shown below:"
|
||||
"No variable chosen for analysis","No variable chosen for analysis"
|
||||
"No missing observations","No missing observations"
|
||||
"Missing vs non-missing observations in the variable **'{variabler()}'**","Missing vs non-missing observations in the variable **'{variabler()}'**"
|
||||
"Grouped by {get_label(data,ter)}","Grouped by {get_label(data,ter)}"
|
||||
"Import data from REDCap","Import data from REDCap"
|
||||
"REDCap server","REDCap server"
|
||||
|
|
@ -207,7 +205,6 @@
|
|||
"Correlation cut-off","Correlation cut-off"
|
||||
"Set the cut-off for considered 'highly correlated'.","Set the cut-off for considered 'highly correlated'."
|
||||
"Missings","Missings"
|
||||
"To consider if data is missing by random, choose the outcome/dependent variable (only variables with any missings are available). If there is a significant difference across other variables depending on missing observations, it may not be missing at random.","To consider if data is missing by random, choose the outcome/dependent variable (only variables with any missings are available). If there is a significant difference across other variables depending on missing observations, it may not be missing at random."
|
||||
"Visuals","Visuals"
|
||||
"Analysis validation","Analysis validation"
|
||||
"Report","Report"
|
||||
|
|
@ -230,7 +227,6 @@
|
|||
"You removed {p_out} % of observations.","You removed {p_out} % of observations."
|
||||
"You removed {p_out} % of variables.","You removed {p_out} % of variables."
|
||||
"There is a total of {p_miss} % missing observations.","There is a total of {p_miss} % missing observations."
|
||||
"There is a significant correlation between {n_nonmcar} variables and missing observations in the outcome variable {outcome}.","There is a significant correlation between {n_nonmcar} variables and missing observations in the outcome variable {outcome}."
|
||||
"Data includes {n_pairs} pairs of highly correlated variables.","Data includes {n_pairs} pairs of highly correlated variables."
|
||||
"Class","Class"
|
||||
"Observations","Observations"
|
||||
|
|
@ -267,7 +263,6 @@
|
|||
"The dataset without text variables","The dataset without text variables"
|
||||
"The data includes {n_col} variables. Please limit to 100.","The data includes {n_col} variables. Please limit to 100."
|
||||
"Creating the table. Hold on for a moment..","Creating the table. Hold on for a moment.."
|
||||
"Select variable to stratify analysis","Select variable to stratify analysis"
|
||||
"Generating the report. Hold on for a moment..","Generating the report. Hold on for a moment.."
|
||||
"We encountered the following error creating your report:","We encountered the following error creating your report:"
|
||||
"There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data.","There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data."
|
||||
|
|
@ -295,3 +290,22 @@
|
|||
"Level of detail","Level of detail"
|
||||
"Minimal","Minimal"
|
||||
"Extensive","Extensive"
|
||||
"Letters","Letters"
|
||||
"Words","Words"
|
||||
"Shorten to first letters","Shorten to first letters"
|
||||
"Shorten to first words","Shorten to first words"
|
||||
"Missings across variables by the variable **'{input$missings_var}'**","Missings across variables by the variable **'{input$missings_var}'**"
|
||||
"Missing vs non-missing observations in the variable **'{input$missings_var}'**","Missing vs non-missing observations in the variable **'{input$missings_var}'**"
|
||||
"Evaluate missingness by either comparing missing values across variables (optionally grouped by af categorical or dichotomous variable) or compare variables grouped by the missing status (missing or not) of an outcome variable. If there is a significant difference i the missingness, this may cause a bias in you data and should be considered carefully interpreting the data and analyses as data may not be missing at random.","Evaluate missingness by either comparing missing values across variables (optionally grouped by af categorical or dichotomous variable) or compare variables grouped by the missing status (missing or not) of an outcome variable. If there is a significant difference i the missingness, this may cause a bias in you data and should be considered carefully interpreting the data and analyses as data may not be missing at random."
|
||||
"Calculating. Hold tight for a moment..","Calculating. Hold tight for a moment.."
|
||||
"Overview of missing observations","Overview of missing observations"
|
||||
"Analysis method for missingness overview","Analysis method for missingness overview"
|
||||
"Overview of missings across variables","Overview of missings across variables"
|
||||
"Overview of difference in variables by missing status in outcome","Overview of difference in variables by missing status in outcome"
|
||||
"Select a variable for grouped overview","Select a variable for grouped overview"
|
||||
"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"
|
||||
"Error:","Error:"
|
||||
"Download table","Download table"
|
||||
|
|
|
|||
|
|
|
@ -150,10 +150,7 @@
|
|||
"Settings","Settings"
|
||||
"The following error occured on determining correlations:","The following error occured on determining correlations:"
|
||||
"We encountered the following error creating your report:","We encountered the following error creating your report:"
|
||||
"No variable chosen for analysis","No variable chosen for analysis"
|
||||
"No missing observations","No missing observations"
|
||||
"Missing vs non-missing observations in the variable **'{variabler()}'**","Missing vs non-missing observations in the variable **'{variabler()}'**"
|
||||
"There is a significant correlation between {n_nonmcar} variables and missing observations in the outcome variable {outcome}.","There is a significant correlation between {n_nonmcar} variables and missing observations in the outcome variable {outcome}."
|
||||
"There is a total of {p_miss} % missing observations.","There is a total of {p_miss} % missing observations."
|
||||
"Median:","Median:"
|
||||
"Restore original data","Restore original data"
|
||||
|
|
@ -246,11 +243,9 @@
|
|||
"Data characteristics table","Data characteristics table"
|
||||
"The dataset without text variables","The dataset without text variables"
|
||||
"Creating the table. Hold on for a moment..","Creating the table. Hold on for a moment.."
|
||||
"Select variable to stratify analysis","Select variable to stratify analysis"
|
||||
"Generating the report. Hold on for a moment..","Generating the report. Hold on for a moment.."
|
||||
"We encountered the following error showing missingness:","We encountered the following error showing missingness:"
|
||||
"We encountered the following error browsing your data:","We encountered the following error browsing your data:"
|
||||
"To consider if data is missing by random, choose the outcome/dependent variable (only variables with any missings are available). If there is a significant difference across other variables depending on missing observations, it may not be missing at random.","To consider if data is missing by random, choose the outcome/dependent variable (only variables with any missings are available). If there is a significant difference across other variables depending on missing observations, it may not be missing at random."
|
||||
"Choose a name for the column to be created or modified, then enter an expression before clicking on the button below to create the variable, or cancel to exit without saving anything.","Choose a name for the column to be created or modified, then enter an expression before clicking on the button below to create the variable, or cancel to exit without saving anything."
|
||||
"Other","Other"
|
||||
"Hour of the day","Hour of the day"
|
||||
|
|
@ -295,3 +290,22 @@
|
|||
"Level of detail","Level of detail"
|
||||
"Minimal","Minimal"
|
||||
"Extensive","Extensive"
|
||||
"Letters","Letters"
|
||||
"Words","Words"
|
||||
"Shorten to first letters","Shorten to first letters"
|
||||
"Shorten to first words","Shorten to first words"
|
||||
"Missings across variables by the variable **'{input$missings_var}'**","Missings across variables by the variable **'{input$missings_var}'**"
|
||||
"Missing vs non-missing observations in the variable **'{input$missings_var}'**","Missing vs non-missing observations in the variable **'{input$missings_var}'**"
|
||||
"Evaluate missingness by either comparing missing values across variables (optionally grouped by af categorical or dichotomous variable) or compare variables grouped by the missing status (missing or not) of an outcome variable. If there is a significant difference i the missingness, this may cause a bias in you data and should be considered carefully interpreting the data and analyses as data may not be missing at random.","Evaluate missingness by either comparing missing values across variables (optionally grouped by af categorical or dichotomous variable) or compare variables grouped by the missing status (missing or not) of an outcome variable. If there is a significant difference i the missingness, this may cause a bias in you data and should be considered carefully interpreting the data and analyses as data may not be missing at random."
|
||||
"Calculating. Hold tight for a moment..","Calculating. Hold tight for a moment.."
|
||||
"Overview of missing observations","Overview of missing observations"
|
||||
"Analysis method for missingness overview","Analysis method for missingness overview"
|
||||
"Overview of missings across variables","Overview of missings across variables"
|
||||
"Overview of difference in variables by missing status in outcome","Overview of difference in variables by missing status in outcome"
|
||||
"Select a variable for grouped overview","Select a variable for grouped overview"
|
||||
"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"
|
||||
"Error:","Error:"
|
||||
"Download table","Download table"
|
||||
|
|
|
|||
|
|
|
@ -91,3 +91,12 @@ $(document).on('focus', '.smart-dropdown .selectize-control input', function() {
|
|||
}
|
||||
});
|
||||
|
||||
// window.addEventListener('beforeunload', function (e) {
|
||||
// // Cancel the event
|
||||
// e.preventDefault();
|
||||
// // Chrome requires returnValue to be set
|
||||
// e.returnValue = '';
|
||||
// // Some browsers display this message, others show a generic one
|
||||
// return 'Are you sure you want to leave? Any unsaved changes will be lost.';
|
||||
// });
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -91,3 +91,12 @@ $(document).on('focus', '.smart-dropdown .selectize-control input', function() {
|
|||
}
|
||||
});
|
||||
|
||||
// window.addEventListener('beforeunload', function (e) {
|
||||
// // Cancel the event
|
||||
// e.preventDefault();
|
||||
// // Chrome requires returnValue to be set
|
||||
// e.returnValue = '';
|
||||
// // Some browsers display this message, others show a generic one
|
||||
// return 'Are you sure you want to leave? Any unsaved changes will be lost.';
|
||||
// });
|
||||
|
||||
|
|
|
|||
|
|
@ -91,3 +91,12 @@ $(document).on('focus', '.smart-dropdown .selectize-control input', function() {
|
|||
}
|
||||
});
|
||||
|
||||
// window.addEventListener('beforeunload', function (e) {
|
||||
// // Cancel the event
|
||||
// e.preventDefault();
|
||||
// // Chrome requires returnValue to be set
|
||||
// e.returnValue = '';
|
||||
// // Some browsers display this message, others show a generic one
|
||||
// return 'Are you sure you want to leave? Any unsaved changes will be lost.';
|
||||
// });
|
||||
|
||||
|
|
|
|||
|
|
@ -150,10 +150,7 @@
|
|||
"Settings","Indstillinger"
|
||||
"The following error occured on determining correlations:","Følgende fejl opstod i forbindelse med korrelationsanalysen:"
|
||||
"We encountered the following error creating your report:","Følgende fejl opstod, da rapporten blev dannet:"
|
||||
"No variable chosen for analysis","Ingen variabel er valgt til analysen"
|
||||
"No missing observations","Ingen manglende observationer"
|
||||
"Missing vs non-missing observations in the variable **'{variabler()}'**","Manglende vs ikke-manglende observationer i variablen **'{variabler()}'**"
|
||||
"There is a significant correlation between {n_nonmcar} variables and missing observations in the outcome variable {outcome}.","Der er en betydelig korrelation blandt {n_nonmcar} variabler sammenlignet efter manglende observationer i {outcome}."
|
||||
"There is a total of {p_miss} % missing observations.","Der er i alt {p_miss} % manglende observationer."
|
||||
"Median:","Median:"
|
||||
"Restore original data","Gendan originale data"
|
||||
|
|
@ -246,11 +243,9 @@
|
|||
"Data characteristics table","Oversigtstabel"
|
||||
"The dataset without text variables","Datasættet uden variabler formateret som tekst"
|
||||
"Creating the table. Hold on for a moment..","Opretter tabellen. Vent et øjeblik.."
|
||||
"Select variable to stratify analysis","Vælg variabler til at stratificere analysen"
|
||||
"Generating the report. Hold on for a moment..","Opretter rapporten. Vent et øjeblik.."
|
||||
"We encountered the following error showing missingness:","Under analysen af manglende observationer opstod følgende fejl:"
|
||||
"We encountered the following error browsing your data:","I forsøget på at vise en dataoversigt opstod følgende fejl:"
|
||||
"To consider if data is missing by random, choose the outcome/dependent variable (only variables with any missings are available). If there is a significant difference across other variables depending on missing observations, it may not be missing at random.","Vælg svarvariablen, for at få hjælp til at vurdere om manglende observationer manglende tilfældigt eller ej (kun variabler med manglende data kan vælges). Hvis der er statistisk signifikant forskel mellem nogle af de øvrige variabler i forhold til manglende data i den valgte variable kan det være et udtryk for at data ikke mangler tilfældigt."
|
||||
"Choose a name for the column to be created or modified, then enter an expression before clicking on the button below to create the variable, or cancel to exit without saving anything.","Vælg et navn til den nye variabel, skriv din formel og tryk så på knappen for at gemme variablen, eller annuler for at lukke uden at gemme."
|
||||
"Please fill in web address and API token, then press 'Connect'.","Udfyld serveradresse og API-nøgle, og tryk så 'Fobind'."
|
||||
"Other","Other"
|
||||
|
|
@ -295,3 +290,22 @@
|
|||
"Level of detail","Level of detail"
|
||||
"Minimal","Minimal"
|
||||
"Extensive","Extensive"
|
||||
"Letters","Letters"
|
||||
"Words","Words"
|
||||
"Shorten to first letters","Shorten to first letters"
|
||||
"Shorten to first words","Shorten to first words"
|
||||
"Missings across variables by the variable **'{input$missings_var}'**","Missings across variables by the variable **'{input$missings_var}'**"
|
||||
"Missing vs non-missing observations in the variable **'{input$missings_var}'**","Missing vs non-missing observations in the variable **'{input$missings_var}'**"
|
||||
"Evaluate missingness by either comparing missing values across variables (optionally grouped by af categorical or dichotomous variable) or compare variables grouped by the missing status (missing or not) of an outcome variable. If there is a significant difference i the missingness, this may cause a bias in you data and should be considered carefully interpreting the data and analyses as data may not be missing at random.","Evaluate missingness by either comparing missing values across variables (optionally grouped by af categorical or dichotomous variable) or compare variables grouped by the missing status (missing or not) of an outcome variable. If there is a significant difference i the missingness, this may cause a bias in you data and should be considered carefully interpreting the data and analyses as data may not be missing at random."
|
||||
"Calculating. Hold tight for a moment..","Calculating. Hold tight for a moment.."
|
||||
"Overview of missing observations","Overview of missing observations"
|
||||
"Analysis method for missingness overview","Analysis method for missingness overview"
|
||||
"Overview of missings across variables","Overview of missings across variables"
|
||||
"Overview of difference in variables by missing status in outcome","Overview of difference in variables by missing status in outcome"
|
||||
"Select a variable for grouped overview","Select a variable for grouped overview"
|
||||
"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"
|
||||
"Error:","Error:"
|
||||
"Download table","Download table"
|
||||
|
|
|
|||
|
|
|
@ -103,9 +103,7 @@
|
|||
"You can choose between these file types:","You can choose between these file types:"
|
||||
"You can import {file_extensions_text} files","You can import {file_extensions_text} files"
|
||||
"First five rows are shown below:","First five rows are shown below:"
|
||||
"No variable chosen for analysis","No variable chosen for analysis"
|
||||
"No missing observations","No missing observations"
|
||||
"Missing vs non-missing observations in the variable **'{variabler()}'**","Missing vs non-missing observations in the variable **'{variabler()}'**"
|
||||
"Grouped by {get_label(data,ter)}","Grouped by {get_label(data,ter)}"
|
||||
"Import data from REDCap","Import data from REDCap"
|
||||
"REDCap server","REDCap server"
|
||||
|
|
@ -207,7 +205,6 @@
|
|||
"Correlation cut-off","Correlation cut-off"
|
||||
"Set the cut-off for considered 'highly correlated'.","Set the cut-off for considered 'highly correlated'."
|
||||
"Missings","Missings"
|
||||
"To consider if data is missing by random, choose the outcome/dependent variable (only variables with any missings are available). If there is a significant difference across other variables depending on missing observations, it may not be missing at random.","To consider if data is missing by random, choose the outcome/dependent variable (only variables with any missings are available). If there is a significant difference across other variables depending on missing observations, it may not be missing at random."
|
||||
"Visuals","Visuals"
|
||||
"Analysis validation","Analysis validation"
|
||||
"Report","Report"
|
||||
|
|
@ -230,7 +227,6 @@
|
|||
"You removed {p_out} % of observations.","You removed {p_out} % of observations."
|
||||
"You removed {p_out} % of variables.","You removed {p_out} % of variables."
|
||||
"There is a total of {p_miss} % missing observations.","There is a total of {p_miss} % missing observations."
|
||||
"There is a significant correlation between {n_nonmcar} variables and missing observations in the outcome variable {outcome}.","There is a significant correlation between {n_nonmcar} variables and missing observations in the outcome variable {outcome}."
|
||||
"Data includes {n_pairs} pairs of highly correlated variables.","Data includes {n_pairs} pairs of highly correlated variables."
|
||||
"Class","Class"
|
||||
"Observations","Observations"
|
||||
|
|
@ -267,7 +263,6 @@
|
|||
"The dataset without text variables","The dataset without text variables"
|
||||
"The data includes {n_col} variables. Please limit to 100.","The data includes {n_col} variables. Please limit to 100."
|
||||
"Creating the table. Hold on for a moment..","Creating the table. Hold on for a moment.."
|
||||
"Select variable to stratify analysis","Select variable to stratify analysis"
|
||||
"Generating the report. Hold on for a moment..","Generating the report. Hold on for a moment.."
|
||||
"We encountered the following error creating your report:","We encountered the following error creating your report:"
|
||||
"There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data.","There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data."
|
||||
|
|
@ -295,3 +290,22 @@
|
|||
"Level of detail","Level of detail"
|
||||
"Minimal","Minimal"
|
||||
"Extensive","Extensive"
|
||||
"Letters","Letters"
|
||||
"Words","Words"
|
||||
"Shorten to first letters","Shorten to first letters"
|
||||
"Shorten to first words","Shorten to first words"
|
||||
"Missings across variables by the variable **'{input$missings_var}'**","Missings across variables by the variable **'{input$missings_var}'**"
|
||||
"Missing vs non-missing observations in the variable **'{input$missings_var}'**","Missing vs non-missing observations in the variable **'{input$missings_var}'**"
|
||||
"Evaluate missingness by either comparing missing values across variables (optionally grouped by af categorical or dichotomous variable) or compare variables grouped by the missing status (missing or not) of an outcome variable. If there is a significant difference i the missingness, this may cause a bias in you data and should be considered carefully interpreting the data and analyses as data may not be missing at random.","Evaluate missingness by either comparing missing values across variables (optionally grouped by af categorical or dichotomous variable) or compare variables grouped by the missing status (missing or not) of an outcome variable. If there is a significant difference i the missingness, this may cause a bias in you data and should be considered carefully interpreting the data and analyses as data may not be missing at random."
|
||||
"Calculating. Hold tight for a moment..","Calculating. Hold tight for a moment.."
|
||||
"Overview of missing observations","Overview of missing observations"
|
||||
"Analysis method for missingness overview","Analysis method for missingness overview"
|
||||
"Overview of missings across variables","Overview of missings across variables"
|
||||
"Overview of difference in variables by missing status in outcome","Overview of difference in variables by missing status in outcome"
|
||||
"Select a variable for grouped overview","Select a variable for grouped overview"
|
||||
"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"
|
||||
"Error:","Error:"
|
||||
"Download table","Download table"
|
||||
|
|
|
|||
|
|
|
@ -103,9 +103,7 @@
|
|||
"You can choose between these file types:","You can choose between these file types:"
|
||||
"You can import {file_extensions_text} files","You can import {file_extensions_text} files"
|
||||
"First five rows are shown below:","First five rows are shown below:"
|
||||
"No variable chosen for analysis","No variable chosen for analysis"
|
||||
"No missing observations","No missing observations"
|
||||
"Missing vs non-missing observations in the variable **'{variabler()}'**","Missing vs non-missing observations in the variable **'{variabler()}'**"
|
||||
"Grouped by {get_label(data,ter)}","Grouped by {get_label(data,ter)}"
|
||||
"Import data from REDCap","Import data from REDCap"
|
||||
"REDCap server","REDCap server"
|
||||
|
|
@ -207,7 +205,6 @@
|
|||
"Correlation cut-off","Correlation cut-off"
|
||||
"Set the cut-off for considered 'highly correlated'.","Set the cut-off for considered 'highly correlated'."
|
||||
"Missings","Missings"
|
||||
"To consider if data is missing by random, choose the outcome/dependent variable (only variables with any missings are available). If there is a significant difference across other variables depending on missing observations, it may not be missing at random.","To consider if data is missing by random, choose the outcome/dependent variable (only variables with any missings are available). If there is a significant difference across other variables depending on missing observations, it may not be missing at random."
|
||||
"Visuals","Visuals"
|
||||
"Analysis validation","Analysis validation"
|
||||
"Report","Report"
|
||||
|
|
@ -230,7 +227,6 @@
|
|||
"You removed {p_out} % of observations.","You removed {p_out} % of observations."
|
||||
"You removed {p_out} % of variables.","You removed {p_out} % of variables."
|
||||
"There is a total of {p_miss} % missing observations.","There is a total of {p_miss} % missing observations."
|
||||
"There is a significant correlation between {n_nonmcar} variables and missing observations in the outcome variable {outcome}.","There is a significant correlation between {n_nonmcar} variables and missing observations in the outcome variable {outcome}."
|
||||
"Data includes {n_pairs} pairs of highly correlated variables.","Data includes {n_pairs} pairs of highly correlated variables."
|
||||
"Class","Class"
|
||||
"Observations","Observations"
|
||||
|
|
@ -267,7 +263,6 @@
|
|||
"The dataset without text variables","The dataset without text variables"
|
||||
"The data includes {n_col} variables. Please limit to 100.","The data includes {n_col} variables. Please limit to 100."
|
||||
"Creating the table. Hold on for a moment..","Creating the table. Hold on for a moment.."
|
||||
"Select variable to stratify analysis","Select variable to stratify analysis"
|
||||
"Generating the report. Hold on for a moment..","Generating the report. Hold on for a moment.."
|
||||
"We encountered the following error creating your report:","We encountered the following error creating your report:"
|
||||
"There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data.","There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data."
|
||||
|
|
@ -295,3 +290,22 @@
|
|||
"Level of detail","Level of detail"
|
||||
"Minimal","Minimal"
|
||||
"Extensive","Extensive"
|
||||
"Letters","Letters"
|
||||
"Words","Words"
|
||||
"Shorten to first letters","Shorten to first letters"
|
||||
"Shorten to first words","Shorten to first words"
|
||||
"Missings across variables by the variable **'{input$missings_var}'**","Missings across variables by the variable **'{input$missings_var}'**"
|
||||
"Missing vs non-missing observations in the variable **'{input$missings_var}'**","Missing vs non-missing observations in the variable **'{input$missings_var}'**"
|
||||
"Evaluate missingness by either comparing missing values across variables (optionally grouped by af categorical or dichotomous variable) or compare variables grouped by the missing status (missing or not) of an outcome variable. If there is a significant difference i the missingness, this may cause a bias in you data and should be considered carefully interpreting the data and analyses as data may not be missing at random.","Evaluate missingness by either comparing missing values across variables (optionally grouped by af categorical or dichotomous variable) or compare variables grouped by the missing status (missing or not) of an outcome variable. If there is a significant difference i the missingness, this may cause a bias in you data and should be considered carefully interpreting the data and analyses as data may not be missing at random."
|
||||
"Calculating. Hold tight for a moment..","Calculating. Hold tight for a moment.."
|
||||
"Overview of missing observations","Overview of missing observations"
|
||||
"Analysis method for missingness overview","Analysis method for missingness overview"
|
||||
"Overview of missings across variables","Overview of missings across variables"
|
||||
"Overview of difference in variables by missing status in outcome","Overview of difference in variables by missing status in outcome"
|
||||
"Select a variable for grouped overview","Select a variable for grouped overview"
|
||||
"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"
|
||||
"Error:","Error:"
|
||||
"Download table","Download table"
|
||||
|
|
|
|||
|
|
|
@ -150,10 +150,7 @@
|
|||
"Settings","Settings"
|
||||
"The following error occured on determining correlations:","The following error occured on determining correlations:"
|
||||
"We encountered the following error creating your report:","We encountered the following error creating your report:"
|
||||
"No variable chosen for analysis","No variable chosen for analysis"
|
||||
"No missing observations","No missing observations"
|
||||
"Missing vs non-missing observations in the variable **'{variabler()}'**","Missing vs non-missing observations in the variable **'{variabler()}'**"
|
||||
"There is a significant correlation between {n_nonmcar} variables and missing observations in the outcome variable {outcome}.","There is a significant correlation between {n_nonmcar} variables and missing observations in the outcome variable {outcome}."
|
||||
"There is a total of {p_miss} % missing observations.","There is a total of {p_miss} % missing observations."
|
||||
"Median:","Median:"
|
||||
"Restore original data","Restore original data"
|
||||
|
|
@ -246,11 +243,9 @@
|
|||
"Data characteristics table","Data characteristics table"
|
||||
"The dataset without text variables","The dataset without text variables"
|
||||
"Creating the table. Hold on for a moment..","Creating the table. Hold on for a moment.."
|
||||
"Select variable to stratify analysis","Select variable to stratify analysis"
|
||||
"Generating the report. Hold on for a moment..","Generating the report. Hold on for a moment.."
|
||||
"We encountered the following error showing missingness:","We encountered the following error showing missingness:"
|
||||
"We encountered the following error browsing your data:","We encountered the following error browsing your data:"
|
||||
"To consider if data is missing by random, choose the outcome/dependent variable (only variables with any missings are available). If there is a significant difference across other variables depending on missing observations, it may not be missing at random.","To consider if data is missing by random, choose the outcome/dependent variable (only variables with any missings are available). If there is a significant difference across other variables depending on missing observations, it may not be missing at random."
|
||||
"Choose a name for the column to be created or modified, then enter an expression before clicking on the button below to create the variable, or cancel to exit without saving anything.","Choose a name for the column to be created or modified, then enter an expression before clicking on the button below to create the variable, or cancel to exit without saving anything."
|
||||
"Other","Other"
|
||||
"Hour of the day","Hour of the day"
|
||||
|
|
@ -295,3 +290,22 @@
|
|||
"Level of detail","Level of detail"
|
||||
"Minimal","Minimal"
|
||||
"Extensive","Extensive"
|
||||
"Letters","Letters"
|
||||
"Words","Words"
|
||||
"Shorten to first letters","Shorten to first letters"
|
||||
"Shorten to first words","Shorten to first words"
|
||||
"Missings across variables by the variable **'{input$missings_var}'**","Missings across variables by the variable **'{input$missings_var}'**"
|
||||
"Missing vs non-missing observations in the variable **'{input$missings_var}'**","Missing vs non-missing observations in the variable **'{input$missings_var}'**"
|
||||
"Evaluate missingness by either comparing missing values across variables (optionally grouped by af categorical or dichotomous variable) or compare variables grouped by the missing status (missing or not) of an outcome variable. If there is a significant difference i the missingness, this may cause a bias in you data and should be considered carefully interpreting the data and analyses as data may not be missing at random.","Evaluate missingness by either comparing missing values across variables (optionally grouped by af categorical or dichotomous variable) or compare variables grouped by the missing status (missing or not) of an outcome variable. If there is a significant difference i the missingness, this may cause a bias in you data and should be considered carefully interpreting the data and analyses as data may not be missing at random."
|
||||
"Calculating. Hold tight for a moment..","Calculating. Hold tight for a moment.."
|
||||
"Overview of missing observations","Overview of missing observations"
|
||||
"Analysis method for missingness overview","Analysis method for missingness overview"
|
||||
"Overview of missings across variables","Overview of missings across variables"
|
||||
"Overview of difference in variables by missing status in outcome","Overview of difference in variables by missing status in outcome"
|
||||
"Select a variable for grouped overview","Select a variable for grouped overview"
|
||||
"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"
|
||||
"Error:","Error:"
|
||||
"Download table","Download table"
|
||||
|
|
|
|||
|
|
|
@ -4,7 +4,12 @@
|
|||
\alias{compare_missings}
|
||||
\title{Pairwise comparison of missings across covariables}
|
||||
\usage{
|
||||
compare_missings(data, by_var, max_level = 20)
|
||||
compare_missings(
|
||||
data,
|
||||
by_var,
|
||||
max_level = 20,
|
||||
type = c("predictors", "outcome")
|
||||
)
|
||||
}
|
||||
\arguments{
|
||||
\item{data}{data frame}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
\alias{create-column}
|
||||
\alias{create_column_ui}
|
||||
\alias{create_column_server}
|
||||
\alias{list_allowed_operations}
|
||||
\alias{allowed_operations}
|
||||
\alias{modal_create_column}
|
||||
\alias{winbox_create_column}
|
||||
\title{Create new column}
|
||||
|
|
@ -17,7 +17,7 @@ create_column_server(
|
|||
allowed_operations = list_allowed_operations()
|
||||
)
|
||||
|
||||
list_allowed_operations()
|
||||
allowed_operations()
|
||||
|
||||
modal_create_column(
|
||||
id,
|
||||
|
|
@ -68,7 +68,7 @@ A \code{\link[shiny:reactive]{shiny::reactive()}} function returning the data.
|
|||
This module allow to enter an expression to create a new column in a \code{data.frame}.
|
||||
}
|
||||
\note{
|
||||
User can only use a subset of function: (, c, +, -, *, ^, \%\%, \%/\%, /, ==, >, <, !=, <=, >=, &, |, abs, sign, sqrt, ceiling, floor, trunc, cummax, cummin, cumprod, cumsum, exp, expm1, log, log10, log2, log1p, cos, cosh, sin, sinh, tan, tanh, acos, acosh, asin, asinh, atan, atanh, cospi, sinpi, tanpi, gamma, lgamma, digamma, trigamma, round, signif, max, min, range, prod, sum, any, all, pmin, pmax, mean, paste, paste0, substr, nchar, trimws, gsub, sub, grepl, ifelse, length, as.numeric, as.character, as.integer, as.Date, as.POSIXct, as.factor, factor.
|
||||
User can only use a subset of function: (, c, :, ~, +, -, *, ^, \%\%, \%/\%, /, ==, >, <, !=, <=, >=, &, |, is.na, ifelse, any, all, abs, sign, sqrt, ceiling, floor, trunc, cummax, cummin, cumprod, cumsum, exp, expm1, log, log10, log2, log1p, cos, cosh, sin, sinh, tan, tanh, acos, acosh, asin, asinh, atan, atanh, cospi, sinpi, tanpi, gamma, lgamma, digamma, trigamma, round, signif, max, min, range, prod, sum, length, pmin, pmax, mean, paste, paste0, substr, nchar, trimws, gsub, sub, grepl, as.numeric, as.character, as.integer, as.Date, as.POSIXct, as.factor, factor.
|
||||
You can add more operations using the \code{allowed_operations} argument, for example if you want to allow to use package lubridate, you can do:
|
||||
|
||||
\if{html}{\out{<div class="sourceCode r">}}\preformatted{c(list_allowed_operations(), getNamespaceExports("lubridate"))
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
\alias{cut_var.POSIXct}
|
||||
\alias{cut_var.Date}
|
||||
\alias{cut_var.factor}
|
||||
\alias{cut_var.character}
|
||||
\title{Extended cutting function with fall-back to the native base::cut}
|
||||
\usage{
|
||||
cut_var(x, ...)
|
||||
|
|
@ -37,6 +38,8 @@ cut_var(x, ...)
|
|||
\method{cut_var}{Date}(x, breaks = NULL, start.on.monday = TRUE, ...)
|
||||
|
||||
\method{cut_var}{factor}(x, breaks = NULL, type = c("top", "bottom"), other = "Other", ...)
|
||||
|
||||
\method{cut_var}{character}(x, breaks = NULL, type = c("characters", "words"), ...)
|
||||
}
|
||||
\arguments{
|
||||
\item{x}{an object inheriting from class "POSIXct"}
|
||||
|
|
@ -48,12 +51,16 @@ cut_var(x, ...)
|
|||
\value{
|
||||
factor
|
||||
|
||||
factor
|
||||
|
||||
factor
|
||||
}
|
||||
\description{
|
||||
Extended cutting function with fall-back to the native base::cut
|
||||
|
||||
Simplify a factor to only the top or bottom n levels
|
||||
|
||||
Subset first part of string to factor
|
||||
}
|
||||
\examples{
|
||||
readr::parse_time(c("01:00:20", "03:00:20", "01:20:20", "08:20:20", "21:20:20", "03:02:20")) |> cut_var(2)
|
||||
|
|
@ -80,4 +87,5 @@ mtcars$carb |>
|
|||
as.factor() |>
|
||||
cut_var(20, "bottom") |>
|
||||
table()
|
||||
c("Sunday", "This week is short") |> cut_var(breaks = 3)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,13 +6,15 @@
|
|||
\alias{data_missings_server}
|
||||
\title{Data correlations evaluation module}
|
||||
\usage{
|
||||
data_missings_ui(id)
|
||||
data_missings_ui(id, ...)
|
||||
|
||||
data_missings_server(id, data, variable, max_level = 20, ...)
|
||||
data_missings_server(id, data, max_level = 20, ...)
|
||||
}
|
||||
\arguments{
|
||||
\item{id}{Module id}
|
||||
|
||||
\item{...}{additional UI elements to show before the table overview}
|
||||
|
||||
\item{data}{data}
|
||||
|
||||
\item{output.format}{output format}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
% Please edit documentation in R/data_plots.R
|
||||
\name{get_label}
|
||||
\alias{get_label}
|
||||
\title{Print label, and if missing print variable name}
|
||||
\title{Print label, and if missing print variable name for plots}
|
||||
\usage{
|
||||
get_label(data, var = NULL)
|
||||
}
|
||||
|
|
@ -15,7 +15,7 @@ get_label(data, var = NULL)
|
|||
character string
|
||||
}
|
||||
\description{
|
||||
Print label, and if missing print variable name
|
||||
Print label, and if missing print variable name for plots
|
||||
}
|
||||
\examples{
|
||||
mtcars |> get_label(var = "mpg")
|
||||
|
|
|
|||
25
man/missings_logic_across.Rd
Normal file
25
man/missings_logic_across.Rd
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
% Generated by roxygen2: do not edit by hand
|
||||
% Please edit documentation in R/missings-module.R
|
||||
\name{missings_logic_across}
|
||||
\alias{missings_logic_across}
|
||||
\title{Converting all variables to logicals by missing status}
|
||||
\usage{
|
||||
missings_logic_across(data, exclude = NULL)
|
||||
}
|
||||
\arguments{
|
||||
\item{data}{data}
|
||||
|
||||
\item{exclude}{character vector of variable names to be excluded}
|
||||
}
|
||||
\value{
|
||||
data frame
|
||||
}
|
||||
\description{
|
||||
Converting all variables to logicals by missing status
|
||||
}
|
||||
\examples{
|
||||
mtcars |> missings_logic_across("cyl")
|
||||
## gtsummary::trial |>
|
||||
## missings_logic_across() |>
|
||||
## gtsummary::tbl_summary()
|
||||
}
|
||||
|
|
@ -37,30 +37,30 @@ A selectizeInput customized for named vectors
|
|||
}
|
||||
\examples{
|
||||
if (shiny::interactive()) {
|
||||
shinyApp(
|
||||
ui = fluidPage(
|
||||
shiny::uiOutput("select"),
|
||||
tableOutput("data")
|
||||
),
|
||||
server = function(input, output) {
|
||||
output$select <- shiny::renderUI({
|
||||
vectorSelectInput(
|
||||
inputId = "variable", label = "Variable:",
|
||||
data = c(
|
||||
"Cylinders" = "cyl",
|
||||
"Transmission" = "am",
|
||||
"Gears" = "gear"
|
||||
shinyApp(
|
||||
ui = fluidPage(
|
||||
shiny::uiOutput("select"),
|
||||
tableOutput("data")
|
||||
),
|
||||
server = function(input, output) {
|
||||
output$select <- shiny::renderUI({
|
||||
vectorSelectInput(
|
||||
inputId = "variable", label = "Variable:",
|
||||
data = c(
|
||||
"Cylinders" = "cyl",
|
||||
"Transmission" = "am",
|
||||
"Gears" = "gear"
|
||||
)
|
||||
)
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
output$data <- renderTable(
|
||||
{
|
||||
mtcars[, c("mpg", input$variable), drop = FALSE]
|
||||
},
|
||||
rownames = TRUE
|
||||
)
|
||||
}
|
||||
)
|
||||
output$data <- renderTable(
|
||||
{
|
||||
mtcars[, c("mpg", input$variable), drop = FALSE]
|
||||
},
|
||||
rownames = TRUE
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ shiny server
|
|||
|
||||
shiny modal
|
||||
|
||||
An \code{\link[=apexchart]{apexchart()}} \code{htmlwidget} object.
|
||||
An \code{\link[apexcharter:apexchart]{apexcharter::apexchart()}} \code{htmlwidget} object.
|
||||
|
||||
ggplot2 object
|
||||
}
|
||||
|
|
|
|||
1184
renv.lock
1184
renv.lock
File diff suppressed because one or more lines are too long
Loading…
Add table
Reference in a new issue