Compare commits

..

No commits in common. "main" and "v25.10.4" have entirely different histories.

69 changed files with 2239 additions and 7785 deletions

View file

@ -8,7 +8,7 @@ message: 'To cite package "FreesearchR" in publications use:'
type: software type: software
license: AGPL-3.0-or-later license: AGPL-3.0-or-later
title: 'FreesearchR: Easy data analysis for clinicians' title: 'FreesearchR: Easy data analysis for clinicians'
version: 25.12.6 version: 25.10.4
doi: 10.5281/zenodo.14527429 doi: 10.5281/zenodo.14527429
identifiers: identifiers:
- type: url - type: url
@ -143,7 +143,7 @@ references:
authors: authors:
- family-names: Müller - family-names: Müller
given-names: Kirill given-names: Kirill
email: kirill@cynkra.com email: krlmlr+r@mailbox.org
orcid: https://orcid.org/0000-0002-1416-3412 orcid: https://orcid.org/0000-0002-1416-3412
year: '2025' year: '2025'
doi: 10.32614/CRAN.package.here doi: 10.32614/CRAN.package.here
@ -250,10 +250,6 @@ references:
given-names: Barret given-names: Barret
email: barret@posit.co email: barret@posit.co
orcid: https://orcid.org/0000-0001-9986-114X 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 - family-names: Xie
given-names: Yihui given-names: Yihui
email: yihui@posit.co email: yihui@posit.co
@ -316,10 +312,6 @@ references:
given-names: Simon given-names: Simon
email: simon.couch@posit.co email: simon.couch@posit.co
orcid: https://orcid.org/0000-0001-5676-5107 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' year: '2025'
doi: 10.32614/CRAN.package.broom doi: 10.32614/CRAN.package.broom
- type: software - type: software
@ -405,10 +397,6 @@ references:
email: joe@posit.co email: joe@posit.co
- family-names: Tan - family-names: Tan
given-names: Xianying given-names: Xianying
- family-names: Aden-Buie
given-names: Garrick
email: garrick@posit.co
orcid: https://orcid.org/0000-0002-7111-0077
year: '2025' year: '2025'
doi: 10.32614/CRAN.package.DT doi: 10.32614/CRAN.package.DT
- type: software - type: software
@ -492,10 +480,6 @@ references:
given-names: Brenton M. given-names: Brenton M.
email: brenton@wiernik.org email: brenton@wiernik.org
orcid: https://orcid.org/0000-0001-9560-6336 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 - family-names: Waggoner
given-names: Philip given-names: Philip
email: philip.waggoner@gmail.com email: philip.waggoner@gmail.com
@ -675,7 +659,7 @@ references:
authors: authors:
- family-names: Wickham - family-names: Wickham
given-names: Hadley given-names: Hadley
email: hadley@posit.co email: h.wickham@gmail.com
year: '2025' year: '2025'
doi: 10.32614/CRAN.package.reshape2 doi: 10.32614/CRAN.package.reshape2
- type: software - type: software
@ -1015,9 +999,6 @@ references:
- family-names: Lenth - family-names: Lenth
given-names: Russell V. given-names: Russell V.
email: russell-lenth@uiowa.edu email: russell-lenth@uiowa.edu
- family-names: Piaskowski
given-names: Julia
email: julia.piask@gmail.com
year: '2025' year: '2025'
doi: 10.32614/CRAN.package.emmeans doi: 10.32614/CRAN.package.emmeans
- type: software - type: software
@ -1082,127 +1063,6 @@ references:
orcid: https://orcid.org/0000-0002-7559-1154 orcid: https://orcid.org/0000-0002-7559-1154
year: '2025' year: '2025'
doi: 10.32614/CRAN.package.stRoke doi: 10.32614/CRAN.package.stRoke
- type: software
title: data.table
abstract: 'data.table: Extension of `data.frame`'
notes: Imports
url: https://r-datatable.com
repository: https://CRAN.R-project.org/package=data.table
authors:
- family-names: Barrett
given-names: Tyson
email: t.barrett88@gmail.com
orcid: https://orcid.org/0000-0002-2137-1391
- family-names: Dowle
given-names: Matt
email: mattjdowle@gmail.com
- family-names: Srinivasan
given-names: Arun
email: asrini@pm.me
- family-names: Gorecki
given-names: Jan
- family-names: Chirico
given-names: Michael
orcid: https://orcid.org/0000-0003-0787-087X
- family-names: Hocking
given-names: Toby
orcid: https://orcid.org/0000-0002-3146-0865
- family-names: Schwendinger
given-names: Benjamin
orcid: https://orcid.org/0000-0003-3315-8114
- family-names: Krylov
given-names: Ivan
email: ikrylov@disroot.org
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 - type: software
title: styler title: styler
abstract: 'styler: Non-Invasive Pretty Printing of R Code' abstract: 'styler: Non-Invasive Pretty Printing of R Code'
@ -1217,10 +1077,6 @@ references:
- family-names: Walthert - family-names: Walthert
given-names: Lorenz given-names: Lorenz
email: lorenz.walthert@icloud.com 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' year: '2025'
doi: 10.32614/CRAN.package.styler doi: 10.32614/CRAN.package.styler
- type: software - type: software
@ -1238,7 +1094,7 @@ references:
given-names: Winston given-names: Winston
- family-names: Bryan - family-names: Bryan
given-names: Jennifer given-names: Jennifer
email: jenny@posit.co email: jenny@rstudio.com
orcid: https://orcid.org/0000-0002-6983-2759 orcid: https://orcid.org/0000-0002-6983-2759
year: '2025' year: '2025'
doi: 10.32614/CRAN.package.devtools doi: 10.32614/CRAN.package.devtools

View file

@ -1,6 +1,6 @@
Package: FreesearchR Package: FreesearchR
Title: Easy data analysis for clinicians Title: Easy data analysis for clinicians
Version: 25.12.6 Version: 25.10.4
Authors@R: c( Authors@R: c(
person("Andreas Gammelgaard", "Damsbo",email="agdamsbo@clin.au.dk", role = c("aut", "cre"), person("Andreas Gammelgaard", "Damsbo",email="agdamsbo@clin.au.dk", role = c("aut", "cre"),
comment = c(ORCID = "0000-0002-7559-1154")), 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) License: AGPL (>= 3)
Encoding: UTF-8 Encoding: UTF-8
Roxygen: list(markdown = TRUE) Roxygen: list(markdown = TRUE)
RoxygenNote: 7.3.3 RoxygenNote: 7.3.2
Imports: Imports:
assertthat, assertthat,
bslib, bslib,
@ -68,10 +68,7 @@ Imports:
readxl, readxl,
NHANES, NHANES,
shiny.i18n, shiny.i18n,
stRoke, stRoke
data.table,
viridis,
smd
Suggests: Suggests:
styler, styler,
devtools, devtools,
@ -115,7 +112,6 @@ Collate:
'launch_FreesearchR.R' 'launch_FreesearchR.R'
'missings-module.R' 'missings-module.R'
'plot-download-module.R' 'plot-download-module.R'
'plot_bar.R'
'plot_box.R' 'plot_box.R'
'plot_euler.R' 'plot_euler.R'
'plot_hbar.R' 'plot_hbar.R'
@ -129,9 +125,7 @@ Collate:
'regression_plot.R' 'regression_plot.R'
'regression_table.R' 'regression_table.R'
'report.R' 'report.R'
'separate_string.R'
'syntax_highlight.R' 'syntax_highlight.R'
'table-download-module.R'
'theme.R' 'theme.R'
'translate.R' 'translate.R'
'ui_elements.R' 'ui_elements.R'

View file

@ -1,6 +1,5 @@
# Generated by roxygen2: do not edit by hand # Generated by roxygen2: do not edit by hand
S3method(cut_var,character)
S3method(cut_var,default) S3method(cut_var,default)
S3method(cut_var,factor) S3method(cut_var,factor)
S3method(cut_var,hms) S3method(cut_var,hms)
@ -10,7 +9,6 @@ export(add_class_icon)
export(add_sparkline) export(add_sparkline)
export(align_axes) export(align_axes)
export(all_but) export(all_but)
export(allowed_operations)
export(append_column) export(append_column)
export(append_list) export(append_list)
export(argsstring2list) export(argsstring2list)
@ -50,10 +48,8 @@ export(data_visuals_server)
export(data_visuals_ui) export(data_visuals_ui)
export(default_format_arguments) export(default_format_arguments)
export(default_parsing) export(default_parsing)
export(detect_delimiter)
export(drop_empty_event) export(drop_empty_event)
export(expression_string) export(expression_string)
export(factor_new_levels_labels)
export(factorize) export(factorize)
export(file_export) export(file_export)
export(format_writer) export(format_writer)
@ -82,13 +78,13 @@ export(is_any_class)
export(is_consecutive) export(is_consecutive)
export(is_datetime) export(is_datetime)
export(is_identical_to_previous) export(is_identical_to_previous)
export(is_splittable)
export(is_valid_redcap_url) export(is_valid_redcap_url)
export(is_valid_token) export(is_valid_token)
export(launch_FreesearchR) export(launch_FreesearchR)
export(limit_data_size) export(limit_data_size)
export(limit_log) export(limit_log)
export(line_break) export(line_break)
export(list_allowed_operations)
export(list_pkg_data) export(list_pkg_data)
export(m_redcap_readServer) export(m_redcap_readServer)
export(m_redcap_readUI) export(m_redcap_readUI)
@ -99,18 +95,15 @@ export(merge_expression)
export(merge_long) export(merge_long)
export(missing_fraction) export(missing_fraction)
export(missings_apex_plot) export(missings_apex_plot)
export(missings_logic_across)
export(missings_validate) export(missings_validate)
export(modal_create_column) export(modal_create_column)
export(modal_cut_variable) export(modal_cut_variable)
export(modal_string_split)
export(modal_update_factor) export(modal_update_factor)
export(modal_visual_summary) export(modal_visual_summary)
export(modify_qmd) export(modify_qmd)
export(names2val) export(names2val)
export(overview_vars) export(overview_vars)
export(pipe_string) export(pipe_string)
export(plot_bar_single)
export(plot_box) export(plot_box)
export(plot_box_single) export(plot_box_single)
export(plot_euler) export(plot_euler)
@ -136,14 +129,11 @@ export(remove_nested_list)
export(repeated_instruments) export(repeated_instruments)
export(sankey_ready) export(sankey_ready)
export(selectInputIcon) export(selectInputIcon)
export(separate_string)
export(set_column_label) export(set_column_label)
export(show_data) export(show_data)
export(simple_snake) export(simple_snake)
export(sort_by) export(sort_by)
export(specify_qmd_format) export(specify_qmd_format)
export(string_split_server)
export(string_split_ui)
export(subset_types) export(subset_types)
export(supported_functions) export(supported_functions)
export(supported_plots) export(supported_plots)
@ -151,7 +141,6 @@ export(symmetrical_scale_x_log10)
export(tbl_merge) export(tbl_merge)
export(type_icons) export(type_icons)
export(ui_elements) export(ui_elements)
export(unique_names)
export(unique_short) export(unique_short)
export(update_factor_server) export(update_factor_server)
export(update_factor_ui) export(update_factor_ui)

50
NEWS.md
View file

@ -1,53 +1,3 @@
# 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.
*FIX* Fixes a bug, where white space in code exported was removed. Now a little too many spaces are included. Fine tuning continues.
*NEW* Easily copy code by just clicking "copy" in code blocks.
# FreesearchR 25.11.2
*NEW* Vignettes were moved to the [FreesearchR project knowledge base](https://freesearchr.github.io/FreesearchR-knowledge/). This was mainly to ease rendering and allow quick and easy updates as well as future translations.
# FreesearchR 25.11.1
*NEW* Added option to select extensive baseline table selecting between "Minimal" (current) or "Extensive" which adds mean/sd and min/max as well as plots all levels also for dichotomous variables.
# FreesearchR 25.10.5
*NEW* New character/text split function available. A selection of delimiters are recognised and selectable. Function only available if splittable variables are present.
*NEW* Distribution plotting for factors have been much improved including two new bar plot styles and removing options better suited for continuous data.
These were the last major functions to be implemented after workshops at Jitimai in Zanzibar City, Zanzibar during October 2025.
# FreesearchR 25.10.4 # FreesearchR 25.10.4
*NEW* Two new options to create new simplified factors from factors. The "top" option will keep only the top N levels, while the "bottom" option will combine all levels occurring below set percentage. *NEW* Two new options to create new simplified factors from factors. The "top" option will keep only the top N levels, while the "bottom" option will combine all levels occurring below set percentage.

View file

@ -1 +1 @@
app_version <- function()'25.12.6' app_version <- function()'25.10.4'

View file

@ -12,6 +12,7 @@
#' mtcars |> baseline_table() #' mtcars |> baseline_table()
#' mtcars |> baseline_table(fun.args = list(by = "gear")) #' mtcars |> baseline_table(fun.args = list(by = "gear"))
baseline_table <- function(data, fun.args = NULL, fun = gtsummary::tbl_summary, vars = NULL) { baseline_table <- function(data, fun.args = NULL, fun = gtsummary::tbl_summary, vars = NULL) {
out <- do.call(fun, c(list(data = data), fun.args)) out <- do.call(fun, c(list(data = data), fun.args))
return(out) return(out)
} }
@ -22,26 +23,19 @@ baseline_table <- function(data, fun.args = NULL, fun = gtsummary::tbl_summary,
#' #'
#' @param data data #' @param data data
#' @param ... passed as fun.arg to baseline_table() #' @param ... passed as fun.arg to baseline_table()
#' @param strat.var grouping/strat variable
#' @param add.p add comparison/p-value #' @param add.p add comparison/p-value
#' @param add.overall add overall column #' @param add.overall add overall column
#' @param by.var specify stratification variable
#' @param theme set table theme
#' @param detail_level specify detail level. Either "minimal" or "extended".
#' #'
#' @returns gtsummary table list object #' @returns gtsummary table list object
#' @export #' @export
#' #'
#' @examples #' @examples
#' mtcars |> create_baseline(by.var = "gear", add.p = "yes" == "yes") #' mtcars |> create_baseline(by.var = "gear", add.p = "yes" == "yes")
#' mtcars |> create_baseline(by.var = "gear", detail_level = "extended")
#' 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(default_parsing(mtcars), by.var = "am", add.p = FALSE, add.overall = FALSE, theme = "lancet")
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")) { create_baseline <- function(data, ..., by.var, add.p = FALSE, add.overall = FALSE, theme = c("jama", "lancet", "nejm", "qjecon")) {
theme <- match.arg(theme) theme <- match.arg(theme)
detail_level <- match.arg(detail_level)
if (by.var == "none" | !by.var %in% names(data)) { if (by.var == "none" | !by.var %in% names(data)) {
by.var <- NULL by.var <- NULL
} }
@ -59,32 +53,11 @@ create_baseline <- function(data, ..., by.var, add.p = FALSE, add.diff=FALSE, ad
args <- list(...) args <- list(...)
# browser()
if (!any(hasName(args, c("type", "statistic")))) {
if (detail_level == "extended") {
args <-
modifyList(
args,
list(
type = list(gtsummary::all_continuous() ~ "continuous2",
gtsummary::all_dichotomous() ~ "categorical"),
statistic = list(gtsummary::all_continuous() ~ c(
"{median} ({p25}, {p75})",
"{mean} ({sd})",
"{min}, {max}"))
)
)
}
}
parameters <- list( parameters <- list(
data = data, data = data,
fun.args = purrr::list_flatten(list(by = by.var, args)) fun.args = list(by = by.var, ...)
) )
# browser()
out <- do.call( out <- do.call(
baseline_table, baseline_table,
parameters parameters
@ -100,10 +73,6 @@ create_baseline <- function(data, ..., by.var, add.p = FALSE, add.diff=FALSE, ad
gtsummary::add_p() |> gtsummary::add_p() |>
gtsummary::bold_p() gtsummary::bold_p()
} }
if (isTRUE(add.diff)) {
out <- out |>
gtsummary::add_difference()
}
} }
out out

View file

@ -29,6 +29,35 @@ create_column_ui <- function(id) {
shiny::tags$head( shiny::tags$head(
shiny::tags$link(rel = "stylesheet", type = "text/css", href = "FreesearchR/inst/assets/css/FreesearchR.css") shiny::tags$link(rel = "stylesheet", type = "text/css", href = "FreesearchR/inst/assets/css/FreesearchR.css")
), ),
# tags$head(
# # Note the wrapping of the string in HTML()
# tags$style(HTML("
# /* modified from esquisse for data types */
# .btn-column-categorical {
# background-color: #EF562D;
# color: #FFFFFF;
# }
# .btn-column-continuous {
# background-color: #0C4C8A;
# color: #FFFFFF;
# }
# .btn-column-dichotomous {
# background-color: #97D5E0;
# color: #FFFFFF;
# }
# .btn-column-datetime {
# background-color: #97D5E0;
# color: #FFFFFF;
# }
# .btn-column-id {
# background-color: #848484;
# color: #FFFFFF;
# }
# .btn-column-text {
# background-color: #2E2E2E;
# color: #FFFFFF;
# }"))
# ),
fluidRow( fluidRow(
column( column(
width = 6, width = 6,
@ -184,44 +213,35 @@ create_column_server <- function(id,
#' #'
#' @rdname create-column #' @rdname create-column
# @importFrom methods getGroupMembers # @importFrom methods getGroupMembers
allowed_operations <- function() { list_allowed_operations <- function() {
list( c(
"Misc" = c("(", "c",":","~"), "(", "c",
# getGroupMembers("Arith"), # getGroupMembers("Arith"),
"Arithmetics" = c("+", "-", "*", "^", "%%", "%/%", "/"), c("+", "-", "*", "^", "%%", "%/%", "/"),
# getGroupMembers("Compare"), # getGroupMembers("Compare"),
"Compare" = c("==", ">", "<", "!=", "<=", ">="), c("==", ">", "<", "!=", "<=", ">="),
# getGroupMembers("Logic"), # getGroupMembers("Logic"),
"Logic" = c("&", "|", "is.na", "ifelse", "any", "all"), c("&", "|"),
# getGroupMembers("Math"), # getGroupMembers("Math"),
"Math" = c( c(
"abs", "sign", "sqrt", "ceiling", "floor", "trunc", "cummax", "abs", "sign", "sqrt", "ceiling", "floor", "trunc", "cummax",
"cummin", "cumprod", "cumsum", "exp", "expm1", "log", "log10", "cummin", "cumprod", "cumsum", "exp", "expm1", "log", "log10",
"log2", "log1p", "cos", "cosh", "sin", "sinh", "tan", "tanh", "log2", "log1p", "cos", "cosh", "sin", "sinh", "tan", "tanh",
"acos", "acosh", "asin", "asinh", "atan", "atanh", "cospi", "sinpi", "acos", "acosh", "asin", "asinh", "atan", "atanh", "cospi", "sinpi",
"tanpi", "gamma", "lgamma", "digamma", "trigamma", "round", "signif" "tanpi", "gamma", "lgamma", "digamma", "trigamma"
), ),
# getGroupMembers("Math2"), # getGroupMembers("Math2"),
# c("round", "signif"), c("round", "signif"),
# getGroupMembers("Summary"), # getGroupMembers("Summary"),
"Summary" = c( c("max", "min", "range", "prod", "sum", "any", "all"),
"max", "min", "range", "prod", "sum", "length", "pmin", "pmax", "mean",
"pmin", "pmax", "mean"
),
"Text" = c(
"paste", "paste0", "substr", "nchar", "trimws", "paste", "paste0", "substr", "nchar", "trimws",
"gsub", "sub", "grepl" "gsub", "sub", "grepl", "ifelse", "length",
),
"Class" = c(
"as.numeric", "as.character", "as.integer", "as.Date", "as.POSIXct", "as.numeric", "as.character", "as.integer", "as.Date", "as.POSIXct",
"as.factor", "factor" "as.factor", "factor"
) )
)
} }
list_allowed_operations <- function(data=allowed_operations()) {
Reduce(c,data)
}
#' @inheritParams shiny::modalDialog #' @inheritParams shiny::modalDialog

View file

@ -20,18 +20,8 @@
#' @importFrom shiny selectizeInput #' @importFrom shiny selectizeInput
#' @export #' @export
#' #'
columnSelectInput <- function( columnSelectInput <- function(inputId, label, data, selected = "", ...,
inputId, col_subset = NULL, placeholder = "", onInitialize, none_label="No variable selected",maxItems=NULL) {
label,
data,
selected = "",
...,
col_subset = NULL,
placeholder = "",
onInitialize,
none_label = "No variable selected",
maxItems = NULL
) {
datar <- if (is.reactive(data)) data else reactive(data) datar <- if (is.reactive(data)) data else reactive(data)
col_subsetr <- if (is.reactive(col_subset)) col_subset else reactive(col_subset) col_subsetr <- if (is.reactive(col_subset)) col_subset else reactive(col_subset)
@ -194,3 +184,5 @@ vectorSelectInput <- function(inputId,
) )
) )
} }

View file

@ -35,12 +35,19 @@ cut_variable_ui <- function(id) {
), ),
column( column(
width = 3, width = 3,
shiny::uiOutput(ns("n_breaks")) numericInput(
inputId = ns("n_breaks"),
label = i18n$t("Number of breaks:"),
value = 3,
min = 2,
max = 12,
width = "100%"
)
), ),
column( column(
width = 3, width = 3,
shiny::conditionalPanel( shiny::conditionalPanel(
condition = "input.method != 'top' && input.method != 'bottom' && input.method != 'words' && input.method != 'characters'", condition = "input.method != 'top' && input.method != 'bottom'",
ns = ns, ns = ns,
checkboxInput( checkboxInput(
inputId = ns("right"), inputId = ns("right"),
@ -94,7 +101,7 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
data <- data_r() data <- data_r()
rv$data <- data rv$data <- data
vars_num <- vapply(data, \(.x){ vars_num <- vapply(data, \(.x){
is.numeric(.x) || is_datetime(.x) || (is.factor(.x) && length(levels(.x)) > 2) || is.character(.x) is.numeric(.x) || is_datetime(.x) || (is.factor(.x) && length(levels(.x)) > 2)
}, logical(1)) }, logical(1))
vars_num <- names(vars_num)[vars_num] vars_num <- names(vars_num)[vars_num]
@ -116,38 +123,8 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
# ) # )
}), data_r(), input$hidden) }), data_r(), input$hidden)
output$n_breaks <- shiny::renderUI({
req(input$method)
# req(!is.null(get_list_elements(name = input$cut_method,element = "breaks")))
# browser()
break_text <- get_list_elements(name = input$method, element = "breaks")
if (is.null(get_list_elements(name = input$method, element = "min"))) {
min <- 2
} else {
min <- get_list_elements(name = input$method, element = "min")
}
if (is.null(get_list_elements(name = input$method, element = "max"))) {
max <- 10
} else {
max <- get_list_elements(name = input$method, element = "max")
}
numericInput(
inputId = ns("n_breaks"),
label = break_text,
value = 3,
min = min,
max = max,
width = "100%"
)
})
output$slider_fixed <- renderUI({ output$slider_fixed <- renderUI({
data <- req(data_r()) data <- req(data_r())
req(input$n_breaks)
variable <- req(input$variable) variable <- req(input$variable)
req(hasName(data, variable)) req(hasName(data, variable))
@ -216,12 +193,6 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
"top", "top",
"bottom" "bottom"
) )
} else if ("character" %in% class(data[[variable]])) {
choices <- c(
choices,
"characters",
"words"
)
} else { } else {
choices <- c( choices <- c(
choices, choices,
@ -243,6 +214,13 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
choices <- unique(choices) choices <- unique(choices)
## Implement labeled vector selection of cut methods to include descriptions
##
## cut_methods()
##
vectorSelectInput( vectorSelectInput(
inputId = ns("method"), inputId = ns("method"),
label = i18n$t("Method:"), label = i18n$t("Method:"),
@ -250,6 +228,14 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
selected = NULL, selected = NULL,
width = "100%" width = "100%"
) )
# shinyWidgets::virtualSelectInput(
# inputId = session$ns("method"),
# label = i18n$t("Method:"),
# choices = choices,
# selected = NULL,
# width = "100%"
# )
}) })
@ -300,9 +286,7 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
list(var = f, brks = levels(f)) list(var = f, brks = levels(f))
} else if (input$method %in% c( } else if (input$method %in% c(
"top", "top",
"bottom", "bottom"
"characters",
"words"
)) { )) {
# This allows factor simplification to get the top or bottom count # This allows factor simplification to get the top or bottom count
f <- cut_var(data[[variable]], breaks = input$n_breaks) f <- cut_var(data[[variable]], breaks = input$n_breaks)
@ -382,11 +366,7 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
} }
) )
data <- append_column(data, data <- append_column(data, column = new_variable, name = paste0(variable, "_cut"), index = "right")
column = new_variable,
name = unique_names(paste0(variable, "_cut"),
existing = names(data)),
index = "right")
code <- rlang::call2( code <- rlang::call2(
"append_column", "append_column",
@ -408,7 +388,6 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
# shiny::req(rv$new_var_name) # shiny::req(rv$new_var_name)
data <- req(data_cutted_r()) data <- req(data_cutted_r())
# variable <- req(input$variable) # variable <- req(input$variable)
count_data <- as.data.frame( count_data <- as.data.frame(
table( table(
breaks = data[[length(data)]], breaks = data[[length(data)]],
@ -416,7 +395,6 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
), ),
responseName = "count" responseName = "count"
) )
count_data$freq <- paste(signif(count_data$count / nrow(data) * 100, 3), "%")
gridTheme <- getOption("datagrid.theme") gridTheme <- getOption("datagrid.theme")
if (length(gridTheme) < 1) { if (length(gridTheme) < 1) {
datamods:::apply_grid_theme() datamods:::apply_grid_theme()
@ -424,7 +402,7 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
on.exit(toastui::reset_grid_theme()) on.exit(toastui::reset_grid_theme())
grid <- toastui::datagrid( grid <- toastui::datagrid(
data = count_data, data = count_data,
colwidths = "fit", colwidths = "guess",
theme = "default", theme = "default",
bodyHeight = "auto" bodyHeight = "auto"
) )
@ -483,9 +461,6 @@ plot_histogram <- function(data, column = NULL, bins = 30, breaks = NULL, color
} else { } else {
x <- data[[column]] x <- data[[column]]
} }
if (is.character(x)){
x <- REDCapCAST::as_factor(x)
}
x <- as.numeric(x) x <- as.numeric(x)
op <- par(mar = rep(1.5, 4)) op <- par(mar = rep(1.5, 4))
on.exit(par(op)) on.exit(par(op))
@ -515,75 +490,55 @@ cut_methods <- function() {
"hour" = list( "hour" = list(
descr = i18n$t("Hour of the day"), descr = i18n$t("Hour of the day"),
# class = c("hms", "POSIXct"), # Not implemented yet, but will during rewrite at some point... # class = c("hms", "POSIXct"), # Not implemented yet, but will during rewrite at some point...
breaks = NULL breaks = i18n$t("Breaks")
), ),
"day" = list( "day" = list(
descr = i18n$t("By day of the week"), descr = i18n$t("By day of the week"),
breaks = NULL breaks = i18n$t("Breaks")
), ),
"weekday" = list( "weekday" = list(
descr = i18n$t("By weekday"), descr = i18n$t("By weekday"),
breaks = NULL breaks = i18n$t("Breaks")
), ),
"week" = list( "week" = list(
descr = i18n$t("By week number and year"), descr = i18n$t("By week number and year"),
breaks = NULL breaks = i18n$t("Breaks")
), ),
"week_only" = list( "week_only" = list(
descr = i18n$t("By week number"), descr = i18n$t("By week number"),
breaks = NULL breaks = i18n$t("Breaks")
), ),
"month" = list( "month" = list(
descr = i18n$t("By month and year"), descr = i18n$t("By month and year"),
breaks = NULL breaks = i18n$t("Breaks")
), ),
"month_only" = list( "month_only" = list(
descr = i18n$t("By month only"), descr = i18n$t("By month only"),
breaks = NULL breaks = i18n$t("Breaks")
), ),
"quarter" = list( "quarter" = list(
descr = i18n$t("By quarter of the year"), descr = i18n$t("By quarter of the year"),
breaks = NULL breaks = i18n$t("Breaks")
), ),
"year" = list( "year" = list(
descr = i18n$t("By year"), descr = i18n$t("By year"),
breaks = NULL breaks = i18n$t("Breaks")
), ),
"top" = list( "top" = list(
descr = i18n$t("Keep only most common"), descr = i18n$t("Keep only most common"),
breaks = i18n$t("Number"), breaks = i18n$t("Number")
min = 1,
max = 20
), ),
"bottom" = list( "bottom" = list(
descr = i18n$t("Combine below percentage"), descr = i18n$t("Combine below percentage"),
breaks = i18n$t("Percentage"), breaks = i18n$t("Percentage")
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( "fixed" = list(
descr = i18n$t("By specified numbers"), descr = i18n$t("By specified numbers"),
breaks = i18n$t("Breaks"), breaks = i18n$t("Breaks")
min = 2,
max = 12
), ),
"quantile" = list( "quantile" = list(
descr = i18n$t("By quantiles (groups of equal size)"), descr = i18n$t("By quantiles (groups of equal size)"),
breaks = i18n$t("Breaks"), breaks = i18n$t("Breaks")
min = 2,
max = 10
) )
) )
} }
@ -604,14 +559,10 @@ cut_methods <- function() {
#' @examples #' @examples
#' get_list_elements(c("top", "bottom"), "descr") #' get_list_elements(c("top", "bottom"), "descr")
get_list_elements <- function(name, element, dict = cut_methods()) { get_list_elements <- function(name, element, dict = cut_methods()) {
if (is.null(name)) {
return(NULL)
} else {
sapply(dict[name], \(.x){ sapply(dict[name], \(.x){
.x[[element]] .x[[element]]
}) })
} }
}
#' Set values as names and names as values #' Set values as names and names as values
#' #'

View file

@ -184,24 +184,14 @@ cut_var.factor <- function(x, breaks = NULL, type = c("top", "bottom"), other =
tbl <- sort(table(x), decreasing = TRUE) tbl <- sort(table(x), decreasing = TRUE)
if (type == "top") { if (type == "top") {
if (length(levels(x)) <= breaks) {
return(x)
}
lvls <- names(tbl[seq_len(breaks)]) lvls <- names(tbl[seq_len(breaks)])
} else if (type == "bottom") { } else if (type == "bottom") {
freqs_check <- tbl / NROW(x) * 100 < breaks lvls <- names(tbl)[!tbl / NROW(x) * 100 < breaks]
if (!any(freqs_check)) {
return(x)
}
lvls <- names(tbl)[!freqs_check]
} }
# if (other %in% lvls) { if (other %in% lvls) {
# other <- paste(other, "_freesearchr") other <- paste(other, "_freesearchr")
# } }
# Ensure unique new level name
other <- unique_names(other, lvls)
## Relabel and relevel ## Relabel and relevel
out <- forcats::fct_relabel( out <- forcats::fct_relabel(
@ -217,41 +207,6 @@ 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 #' Test class
#' #'
#' @param data data #' @param data data

View file

@ -343,12 +343,6 @@ data_visuals_server <- function(id,
ter = input$tertiary ter = input$tertiary
) )
## If the dictionary holds additional arguments to pass to the
## plotting function, these are included
if (!is.null(rv$plot.params()[["fun.args"]])){
parameters <- modifyList(parameters,rv$plot.params()[["fun.args"]])
}
shiny::withProgress(message = i18n$t("Drawing the plot. Hold tight for a moment.."), { shiny::withProgress(message = i18n$t("Drawing the plot. Hold tight for a moment.."), {
rv$plot <- rlang::exec( rv$plot <- rlang::exec(
create_plot, create_plot,
@ -498,28 +492,6 @@ subset_types <- function(data, types, type.fun = data_type) {
#' supported_plots() |> str() #' supported_plots() |> str()
supported_plots <- function() { supported_plots <- function() {
list( list(
plot_bar_rel = list(
fun = "plot_bar",
fun.args =list(style="fill"),
descr = i18n$t("Stacked relative barplot"),
note = i18n$t("Create relative stacked barplots to show the distribution of categorical levels"),
primary.type = c("dichotomous", "categorical"),
secondary.type = c("dichotomous", "categorical"),
secondary.multi = FALSE,
tertiary.type = c("dichotomous", "categorical"),
secondary.extra = NULL
),
plot_bar_abs = list(
fun = "plot_bar",
fun.args =list(style="dodge"),
descr = i18n$t("Side-by-side barplot"),
note = i18n$t("Create side-by-side barplot to show the distribution of categorical levels"),
primary.type = c("dichotomous", "categorical"),
secondary.type = c("dichotomous", "categorical"),
secondary.multi = FALSE,
tertiary.type = c("dichotomous", "categorical"),
secondary.extra = "none"
),
plot_hbars = list( plot_hbars = list(
fun = "plot_hbars", fun = "plot_hbars",
descr = i18n$t("Stacked horizontal bars"), descr = i18n$t("Stacked horizontal bars"),
@ -534,7 +506,7 @@ supported_plots <- function() {
fun = "plot_violin", fun = "plot_violin",
descr = i18n$t("Violin plot"), descr = i18n$t("Violin plot"),
note = i18n$t("A modern alternative to the classic boxplot to visualise data distribution"), note = i18n$t("A modern alternative to the classic boxplot to visualise data distribution"),
primary.type = c("datatime", "continuous"), primary.type = c("datatime", "continuous", "dichotomous", "categorical"),
secondary.type = c("dichotomous", "categorical"), secondary.type = c("dichotomous", "categorical"),
secondary.multi = FALSE, secondary.multi = FALSE,
secondary.extra = "none", secondary.extra = "none",
@ -572,7 +544,7 @@ supported_plots <- function() {
fun = "plot_box", fun = "plot_box",
descr = i18n$t("Box plot"), descr = i18n$t("Box plot"),
note = i18n$t("A classic way to plot data distribution by groups"), note = i18n$t("A classic way to plot data distribution by groups"),
primary.type = c("datatime", "continuous"), primary.type = c("datatime", "continuous", "dichotomous", "categorical"),
secondary.type = c("dichotomous", "categorical"), secondary.type = c("dichotomous", "categorical"),
secondary.multi = FALSE, secondary.multi = FALSE,
tertiary.type = c("dichotomous", "categorical"), tertiary.type = c("dichotomous", "categorical"),
@ -709,7 +681,7 @@ create_plot <- function(data, type, pri, sec, ter = NULL, ...) {
out out
} }
#' Print label, and if missing print variable name for plots #' Print label, and if missing print variable name
#' #'
#' @param data vector or data frame #' @param data vector or data frame
#' @param var variable name. Optional. #' @param var variable name. Optional.

View file

@ -522,75 +522,11 @@ pipe_string <- function(data, collapse = "|>\n") {
#' expression_string() #' expression_string()
expression_string <- function(data, assign.str = "") { expression_string <- function(data, assign.str = "") {
exp.str <- if (is.call(data)) deparse(data) else data exp.str <- if (is.call(data)) deparse(data) else data
# browser()
out <- paste0(assign.str, gsub("%>%", "|>\n", paste(gsub('"', "'", paste(exp.str, collapse = "")), collapse = ""))) out <- paste0(assign.str, gsub("%>%", "|>\n", paste(gsub('"', "'", paste(exp.str, collapse = "")), collapse = "")))
out <- collapse_spaces(out,preserve_newlines = FALSE) gsub(" |`", "", out)
gsub("`", "", out)
} }
#' Substitue spaces/tabs with single space excluding text within quotes
#'
#' @description
#' Written assisted by Claude.ai. It is long and possibly too complicated,
#' but it works
#'
#'
#' @param x character string
#' @param preserve_newlines flag to preserve new lines
#'
#' @returns character string
#'
#' @examples
#' collapse_spaces(c("cyl", "di sp","s e d","d e'dl e'"))
collapse_spaces <- function(x, preserve_newlines = TRUE) {
# Function to process a single string
process_string <- function(text) {
# Pattern to match single-quoted strings
quote_pattern <- "'[^']*'"
# Find all quoted strings and their positions
quotes <- gregexpr(quote_pattern, text, perl = TRUE)[[1]]
if (quotes[1] == -1) {
# No quoted strings, process entire text
if (preserve_newlines) {
return(gsub("[ \\t]{1,}", " ", text))
} else {
return(gsub("\\s{1,}", " ", text))
}
}
# Extract quoted strings
quote_lengths <- attr(quotes, "match.length")
quoted_parts <- substring(text, quotes, quotes + quote_lengths - 1)
# Create placeholders
placeholders <- paste0("__QUOTE_", seq_along(quoted_parts), "__")
# Replace quoted strings with placeholders
result <- text
for (i in seq_along(quoted_parts)) {
result <- sub(quote_pattern, placeholders[i], result, perl = TRUE)
}
# Collapse spaces in non-quoted parts
if (preserve_newlines) {
result <- gsub("[ \\t]{2,}", "", result)
} else {
result <- gsub("\\s{2,}", "", result)
}
# Restore quoted strings
for (i in seq_along(quoted_parts)) {
result <- sub(placeholders[i], quoted_parts[i], result, fixed = TRUE)
}
return(result)
}
# Apply to each element of vector
sapply(x, process_string, USE.NAMES = FALSE)
}
#' Very simple function to remove nested lists, like when uploading .rds #' Very simple function to remove nested lists, like when uploading .rds
#' #'

View file

@ -1 +1 @@
hosted_version <- function()'v25.12.6-251212' hosted_version <- function()'v25.10.4-251027'

View file

@ -1,56 +1,18 @@
#' Data correlations evaluation module #' Data correlations evaluation module
#' #'
#' @param id Module id #' @param id Module id
#' @param ... additional UI elements to show before the table overview
#' #'
#' @name data-missings #' @name data-missings
#' @returns Shiny ui module #' @returns Shiny ui module
#' @export #' @export
data_missings_ui <- function(id, ...) { data_missings_ui <- function(id) {
ns <- shiny::NS(id) ns <- shiny::NS(id)
list( shiny::tagList(
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")) gt::gt_output(outputId = ns("missings_table"))
) )
)
} }
## This should really just be rebuild to only contain a function
#' #'
#' @param data data #' @param data data
@ -61,216 +23,107 @@ data_missings_ui <- function(id, ...) {
#' @export #' @export
data_missings_server <- function(id, data_missings_server <- function(id,
data, data,
max_level = 20, variable,
...) { ...) {
shiny::moduleServer( shiny::moduleServer(
id = id, id = id,
module = function(input, output, session) { module = function(input, output, session) {
ns <- session$ns # ns <- session$ns
datar <- if (is.reactive(data)) data else reactive(data) datar <- if (is.reactive(data)) data else reactive(data)
variabler <- if (is.reactive(variable)) variable else reactive(variable)
rv <- shiny::reactiveValues( rv <- shiny::reactiveValues(
data = NULL, data = NULL,
table = NULL table = NULL
) )
## Notes rv$data <- shiny::reactive({
##
## Code export is still missing
## Direct table export would be nice
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")
)
)
)
})
)
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 {
label <- i18n$t("Select outcome variable for overview")
df <- datar()[apply(datar(), 2, anyNA)]
col_subset <- names(df)
}
columnSelectInput(
inputId = ns("missings_var"),
label = label,
data = df,
col_subset = col_subset,
none_label = i18n$t("No variable")
)
})
})
shiny::observeEvent(
list(input$act_miss),
{
shiny::req(datar())
shiny::req(input$missings_var)
# browser()
df_tbl <- datar() df_tbl <- datar()
by_var <- input$missings_var by_var <- variabler()
parameters <- list(
by_var = by_var,
max_level = max_level,
type = input$missings_method
)
tryCatch( tryCatch(
{ {
shiny::withProgress(message = i18n$t("Calculating. Hold tight for a moment.."), { out <- compare_missings(df_tbl,by_var)
out <- do.call(
compare_missings,
modifyList(parameters, list(data = df_tbl))
)
})
}, },
error = function(err) { error = function(err) {
showNotification(paste0("Error: ", err), type = "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") { out
# if (is.null(variabler()) || variabler() == "" || !variabler() %in% names(data()) || variabler() == "none") { })
# tbl <- rv$data()
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())){ if (anyNA(datar())){
if (input$missings_method == "predictors") { title <- i18n$t("No variable chosen for analysis")
title <- i18n$t("Overview of missing observations")
} else {
title <- i18n$t("No outcome measure chosen")
}
} else { } else {
title <- i18n$t("No missing observations") title <- i18n$t("No missing observations")
} }
} else { } 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()|> tbl <- rv$data()|>
gtsummary::bold_p() gtsummary::bold_p()
} else { title <- glue::glue(i18n$t("Missing vs non-missing observations in the variable **'{variabler()}'**"))
tbl <- rv$data()
} }
out <- tbl |> out <- tbl |>
gtsummary::as_gt() |> gtsummary::as_gt() |>
gt::tab_header(title = gt::md(attr(tbl, "tbl_title"))) gt::tab_header(title = gt::md(title))
attr(out, "strat_var") <- input$missings_var
rv$table <- out rv$table <- out
out out
}) })
}
)
return(reactive(rv$table))
table_download_server(
id = "tbl_dwn",
data = shiny::reactive(rv$table),
file_name = "missings_table"
)
return(shiny::reactive(rv$table))
} }
) )
} }
missing_demo_app <- function() { missing_demo_app <- function() {
ui <- do.call( ui <- shiny::fluidPage(
bslib::page, shiny::actionButton(
c( inputId = "modal_missings",
list( label = "Browse data",
title = i18n$t("Missings"), width = "100%",
icon = bsicons::bs_icon("x-circle") disabled = FALSE
), ),
data_missings_ui(id = "data"), shiny::selectInput(
gt::gt_output("table_p") inputId = "missings_var",
) label = "Select variable to stratify analysis", choices = c("cyl", "vs")
),
data_missings_ui("data")
) )
server <- function(input, output, session) { server <- function(input, output, session) {
data_demo <- mtcars data_demo <- mtcars
data_demo[sample(1:32, 10), "cyl"] <- NA data_demo[sample(1:32, 10), "cyl"] <- NA
data_demo[sample(1:32, 8), "vs"] <- NA data_demo[sample(1:32, 8), "vs"] <- NA
rv <- shiny::reactiveValues( data_missings_server(id = "data", data = data_demo, variable = shiny::reactive(input$missings_var))
table = NULL
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")
}
) )
rv$table <- data_missings_server(id = "data", data = data_demo)
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) shiny::shinyApp(ui, server)
} }
# missing_demo_app() missing_demo_app()
#' Pairwise comparison of missings across covariables #' Pairwise comparison of missings across covariables
#' #'
@ -280,76 +133,14 @@ missing_demo_app <- function() {
#' @returns gtsummary list object #' @returns gtsummary list object
#' @export #' @export
#' #'
compare_missings <- function( compare_missings <- function(data,by_var){
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)) { if (!is.null(by_var) && by_var != "" && by_var %in% names(data)) {
data <- data |>
lapply(\(.x){
if (is.factor(.x)) {
cut_var(.x, breaks = 20, type = "top")
} else {
.x
}
}) |>
dplyr::bind_cols()
if (type == "predictors") {
data <- missings_logic_across(data, exclude = by_var)
} else {
data[[by_var]] <- ifelse(is.na(data[[by_var]]), "Missing", "Non-missing") data[[by_var]] <- ifelse(is.na(data[[by_var]]), "Missing", "Non-missing")
}
out <- gtsummary::tbl_summary(data, by = by_var) |> out <- gtsummary::tbl_summary(data, by = by_var) |>
gtsummary::add_p() gtsummary::add_p()
} else { } else {
if (type == "predictors") {
data <- missings_logic_across(data)
}
out <- gtsummary::tbl_summary(data) out <- gtsummary::tbl_summary(data)
} }
out 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))
}

View file

@ -51,10 +51,12 @@ plot_download_server <- function(id,
shiny::moduleServer( shiny::moduleServer(
id = id, id = id,
module = function(input, output, session) { module = function(input, output, session) {
# ns <- session$ns
output$download_plot <- shiny::downloadHandler( output$download_plot <- shiny::downloadHandler(
filename = function() { filename = paste0(file_name, ".", input$plot_type),
paste0(file_name, ".", input$plot_type)
},
content = function(file) { content = function(file) {
shiny::withProgress(message = "Saving the plot. Hold on for a moment..", { shiny::withProgress(message = "Saving the plot. Hold on for a moment..", {
ggplot2::ggsave( ggplot2::ggsave(
@ -63,8 +65,7 @@ plot_download_server <- function(id,
width = input$plot_width, width = input$plot_width,
height = input$plot_height, height = input$plot_height,
dpi = 300, dpi = 300,
units = "mm", units = "mm", scale = 2
scale = 2
) )
}) })
} }
@ -72,57 +73,3 @@ 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()

View file

@ -1,125 +0,0 @@
plot_bar <- function(data, pri, sec, ter = NULL, style = c("stack", "dodge", "fill"), max_level = 30, ...) {
style <- match.arg(style)
if (!is.null(ter)) {
ds <- split(data, data[ter])
} else {
ds <- list(data)
}
out <- lapply(ds, \(.ds){
plot_bar_single(
data = .ds,
pri = pri,
sec = sec,
style = style,
max_level = max_level
)
})
wrap_plot_list(out, title = glue::glue(i18n$t("Grouped by {get_label(data,ter)}")), ...)
}
#' Single vertical barplot
#'
#' @param style barplot style passed to geom_bar position argument.
#' One of c("stack", "dodge", "fill")
#'
#' @name data-plots
#'
#' @returns ggplot object
#' @export
#'
#' @examples
#' mtcars |>
#' dplyr::mutate(cyl = factor(cyl), am = factor(am)) |>
#' plot_bar_single(pri = "cyl", sec = "am", style = "fill")
#'
#' mtcars |>
#' dplyr::mutate(cyl = factor(cyl), am = factor(am)) |>
#' plot_bar_single(pri = "cyl", style = "stack")
plot_bar_single <- function(data, pri, sec = NULL, style = c("stack", "dodge", "fill"), max_level = 30) {
style <- match.arg(style)
if (identical(sec, "none")) {
sec <- NULL
}
p_data <- as.data.frame(table(data[c(pri, sec)])) |>
dplyr::mutate(dplyr::across(tidyselect::any_of(c(pri, sec)), forcats::as_factor),
p = Freq / NROW(data)
)
if (nrow(p_data) > max_level) {
# browser()
p_data <- sort_by(
p_data,
p_data[["Freq"]],
decreasing = TRUE
) |>
head(max_level)
# if (is.null(sec)){
# p_data <- sort_by(
# p_data,
# p_data[["Freq"]],
# decreasing=TRUE) |>
# head(max_level)
# } else {
# split(p_data,p_data[[sec]]) |>
# lapply(\(.x){
# # browser()
# sort_by(
# .x,
# .x[["Freq"]],
# decreasing=TRUE) |>
# head(max_level)
# }) |> dplyr::bind_rows()
# }
}
## Shortens long level names
p_data[[pri]] <- forcats::as_factor(unique_short(as.character(p_data[[pri]]), max = 20))
if (!is.null(sec)) {
fill <- sec
} else {
fill <- pri
}
p <- ggplot2::ggplot(
p_data,
ggplot2::aes(
x = .data[[pri]],
y = p,
fill = .data[[fill]]
)
) +
ggplot2::geom_bar(position = style, stat = "identity") +
ggplot2::scale_y_continuous(labels = scales::percent) +
ggplot2::ylab("Percentage") +
ggplot2::xlab(get_label(data,pri))+
ggplot2::guides(fill = ggplot2::guide_legend(title = get_label(data,fill)))
## To handle large number of levels and long level names
if (nrow(p_data) > 10 | any(nchar(as.character(p_data[[pri]])) > 6)) {
p <- p +
# ggplot2::guides(fill = "none") +
ggplot2::theme(
axis.text.x = ggplot2::element_text(
angle = 90,
vjust = 1, hjust = 1
))+
ggplot2::theme(
axis.text.x = ggplot2::element_text(vjust = 0.5)
)
if (is.null(sec)){
p <- p +
ggplot2::guides(fill = "none")
}
}
p
}

View file

@ -39,6 +39,8 @@ plot_box <- function(data, pri, sec, ter = NULL,...) {
} }
#' Create nice box-plots #' Create nice box-plots
#' #'
#' @name data-plots #' @name data-plots

View file

@ -1,450 +0,0 @@
#' String split module based on tidyr::separate_
#'
#' @param id id
#'
#' @returns A shiny ui module
#' @export
#'
#' @name split-string
#'
string_split_ui <- function(id) {
ns <- NS(id)
tagList(
shiny::fluidRow(
# shiny::textOutput(outputId = ns("no_splits")),
column(
width = 4,
shiny::uiOutput(outputId = ns("variable"))
),
column(
width = 4,
shiny::uiOutput(outputId = ns("delim"))
),
column(
width = 4,
shiny::uiOutput(outputId = ns("direction"))
) # ,
# column(
# width = 3,
# actionButton(
# inputId = ns("split"),
# label = tagList(phosphoricons::ph("scissors"), i18n$t("Split the variable")),
# class = "btn-outline-primary float-end"
# )
# )
),
shiny::fluidRow(
column(
width = 4,
shiny::h4(i18n$t("Original data")),
toastui::datagridOutput2(outputId = ns("orig_data"))
# DT::DTOutput(outputId = ns("orig_data_3"))
# This doesn't render...
# toastui::datagridOutput2(outputId = ns("orig_data_2"))
),
column(
width = 8,
shiny::h4(i18n$t("Preview of result")),
toastui::datagridOutput2(outputId = ns("new_data"))
)
),
actionButton(
inputId = ns("create"),
label = tagList(phosphoricons::ph("pencil"), i18n$t("Apply split")),
class = "btn-outline-primary float-end"
),
tags$div(class = "clearfix")
)
}
#' @param data_r reactive data
#'
#' @returns shiny module server
#' @export
#'
#' @name split-string
#'
string_split_server <- function(id, data_r = reactive(NULL)) {
moduleServer(
id,
function(input, output, session) {
rv <- reactiveValues(data = NULL, target=NULL, temp = NULL, out=NULL)
ns <- session$ns
# output$no_splits <- shiny::renderText({
# req({
# data_r()
# })
#
# if (any(is_splittable(data_r()))) {
# i18n$t("No character variables with accepted delimiters detected.")
# }
# })
shiny::observe({
req(data_r())
# if (any(is_splittable(data_r()))) {
data <- data_r()
rv$data <- data
vars_num <- vapply(data, \(.x){
is_splittable(.x)
}, logical(1))
vars_num <- names(vars_num)[vars_num]
req(length(vars_num)>0)
output$variable <- shiny::renderUI(
columnSelectInput(
inputId = ns("variable"),
data = data,
label = i18n$t("Variable to split:"),
width = "100%",
col_subset = vars_num,
selected = if (isTruthy(input$variable)) input$variable else vars_num[1]
)
)
# }
# shinyWidgets::updateVirtualSelect(
# inputId = "variable",
# choices = vars_num,
# selected = if (isTruthy(input$variable)) input$variable else vars_num[1]
# )
})
output$delim <- shiny::renderUI({
req(rv$data)
req(input$variable)
# browser()
req(input$variable %in% names(rv$data))
# req({
# any(apply(data_r(),2,is_splittable))
# })
# if (any(is_splittable(data_r()))) {
data <- rv$data |>
dplyr::select(tidyselect::all_of(input$variable))
delimiters <- Reduce(c, unique(sapply(data[[1]], detect_delimiter)))
# shiny::textInput(inputId = ns("delim"), label = i18n$t("Text or character to split string by"))
shiny::selectInput(
inputId = ns("delim"), label = i18n$t("Select delimiter"),
choices = setNames(
delimiters,
glue::glue("'{delimiters}'")
), selected = 1
)
# }
})
output$direction <- shiny::renderUI({
# req({
# rv$data
# })
# if (any(is_splittable(data_r()))) {
vectorSelectInput(
inputId = ns("direction"),
label = i18n$t("Direction:"),
choices = setNames(
c(
"wide",
"long"
),
c(
i18n$t("Split string to multiple columns. Keep number of rows."),
i18n$t("Split string to multiple observations (rows) in the same column. Also ads id and instance columns")
)
),
selected = "wide",
width = "100%"
)
# }
})
observeEvent(
list(
input$variable,
input$delim,
input$direction
),
{
req(rv$data)
req(input$variable)
req(input$delim)
req(input$direction)
data <- rv$data |>
dplyr::select(tidyselect::all_of(input$variable))
# browser()
rv$temp <- separate_string(
data = data,
col = input$variable,
delim = input$delim,
direction = input$direction
)
}
)
# shiny::observeEvent(input$split, {
# show_data(rv$temp, title = i18n$t("Browse data preview"), type = "modal")
# })
## Toastui would not render the original data, so the solution was to go
## with native table rendering, which works, but doesn't please the eye
# output$orig_data <- shiny::renderTable({
# req(data_r())
# req(input$variable)
# data <- data_r() |>
# dplyr::select(tidyselect::all_of(input$variable))
# # browser()
# head(data, 10)
# })
output$orig_data <- toastui::renderDatagrid2({
req(data_r())
req(input$variable)
req(hasName(rv$data, input$variable))
data <- data_r() |>
dplyr::select(tidyselect::all_of(input$variable)) |>
head(30) |>
dplyr::mutate(row=dplyr::row_number()) |>
dplyr::select(row,tidyselect::everything())
# browser()
toastui::datagrid(
data = data,
rowHeight = 40,
colwidths = "guess",
theme = "default",
bodyHeight = "auto",
pagination = 10)
})
output$new_data <- toastui::renderDatagrid2({
shiny::req(rv$temp)
data <- rv$temp
toastui::datagrid(
data = head(data, 30),
rowHeight = 40,
colwidths = "guess",
theme = "default",
bodyHeight = "auto", pagination = 10
)
})
data_split_r <- reactive({
req(rv$temp)
data <- rv$data
parameters <- list(
col = input$variable,
delim = input$delim,
direction = input$direction
)
out <- tryCatch({
rlang::exec(separate_string, !!!modifyList(
parameters,
list(
data = data
)
))
})
# browser()
# separate_string(
# data = data,
#
# )
code <- rlang::call2(
"separate_string",
!!!parameters,
.ns = "FreesearchR"
)
attr(out, "code") <- code
out})
data_returned_r <- observeEvent(input$create, {
rv$out <- data_split_r()
})
return(reactive(rv$out))
}
)
}
#' @param title Modal title
#' @param easyClose easyClose
#' @param size size
#' @param footer footer
#'
#' @returns shiny modal
#' @export
#'
#' @name split-string
modal_string_split <- function(id,
title = i18n$t("Split character string"),
easyClose = TRUE,
size = "xl",
footer = NULL) {
ns <- NS(id)
showModal(modalDialog(
title = tagList(title, datamods:::button_close_modal()),
string_split_ui(id),
tags$div(
style = "display: none;",
textInput(inputId = ns("hidden"), label = NULL, value = datamods:::genId())
),
easyClose = easyClose,
size = size,
footer = footer
))
}
### Helpers
#' Separate string wide or long
#'
#' @param data data
#' @param col column
#' @param delim delimiter
#' @param direction target direction
#'
#' @returns data.frame
#' @export
#'
separate_string <- function(data, col, delim, direction = c("wide", "long")) {
direction <- match.arg(direction)
if (direction == "long") {
out <- data |>
dplyr::mutate(id_str_split = dplyr::row_number()) |>
dplyr::group_by_at("id_str_split") |>
tidyr::separate_longer_delim(cols = tidyselect::all_of(col), delim = delim) |>
dplyr::mutate(instance_str_split = dplyr::row_number()) |>
# add_instance(by="id")
dplyr::ungroup() |>
dplyr::mutate(dplyr::across(tidyselect::matches(col), trimws))
} else if (direction == "wide") {
## Experiment of wide to long
out <- data |>
tidyr::separate_wider_delim(
cols = tidyselect::all_of(col),
delim = delim,
names_sep = "_",
too_few = "align_start"
) |>
dplyr::mutate(dplyr::across(tidyselect::starts_with(col), trimws))
}
out
}
#' Detect delimiters in string based on allowed delimiters
#'
#' @description
#' Accepts any repeat of delimiters and includes surrounding whitespace
#'
#'
#' @param text character vector
#' @param delimiters allowed delimiters
#'
#' @returns character vector
#' @export
#'
#' @examples
#' sapply(c("Walk - run", "Sel__Re", "what;now"), detect_delimiter)
detect_delimiter <- function(data, delimiters = c("_", "-", ";", "\n", ",")) {
# Create patterns for each delimiter with potential surrounding whitespace
patterns <- paste0("\\s*\\", delimiters, "+\\s*")
# Check each pattern
out <- sapply(patterns, \(.x){
if (grepl(.x, data)) {
# Extract the actual matched delimiter with whitespace
regmatches(data, regexpr(.x, data))
}
})
Reduce(c, out)
}
#' Determine if any variable in data frame character and contains recognized delimiters
#'
#' @param data vector or data.frame
#'
#' @returns logical
#' @export
#'
#' @examples
#' any(apply(mtcars, 2, is_splittable))
#' is_splittable(mtcars)
is_splittable <- function(data) {
if (is.data.frame(data)) {
return(apply(data, 2, is_splittable))
}
if (is.character(data)) {
if (length(Reduce(c, unique(sapply(data, detect_delimiter)))) > 0) {
TRUE
} else {
FALSE
}
} else {
FALSE
}
}
# mtcars |> simple_dt()
simple_dt <- function(data,...){
headerCallbackRemoveHeaderFooter <- c(
"function(thead, data, start, end, display){",
" $('th', thead).css('display', 'none');",
"}"
)
DT::datatable(
data,
options = list(
dom = "t",
ordering = FALSE,
paging = FALSE,
searching = FALSE,
# headerCallback = DT::JS(headerCallbackRemoveHeaderFooter),
columnDefs = list(
list(
targets = 1,
render = DT::JS(
"function(data, type, row, meta) {",
"return type === 'display' && data.length > 10 ?",
"'<span title=\"' + data + '\">' + data.substr(0, 10) + '...</span>' : data;",
"}")))
),
selection = 'none',
callback = DT::JS(
"$('table.dataTable.no-footer').css('border-bottom', 'none');"
),
class = 'row-border',
escape = FALSE,
rownames = FALSE,
# width = 500,
filter = "none"
)
}

View file

@ -11,23 +11,13 @@ prismCodeBlock <- function(code) {
prismDependencies <- tags$head( prismDependencies <- tags$head(
tags$script(src = "https://cdnjs.cloudflare.com/ajax/libs/prism/1.8.4/prism.min.js"), tags$script(src = "https://cdnjs.cloudflare.com/ajax/libs/prism/1.8.4/prism.min.js"),
tags$link( tags$link(rel = "stylesheet", type = "text/css",
rel = "stylesheet", type = "text/css", href = "https://cdnjs.cloudflare.com/ajax/libs/prism/1.8.4/themes/prism.min.css")
href = "https://cdnjs.cloudflare.com/ajax/libs/prism/1.8.4/themes/prism.min.css"
),
tags$script(src = "https://cdnjs.cloudflare.com/ajax/libs/prism/1.8.4/components/prism-r.min.js"),
tags$link(
rel = "stylesheet",
href = "https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/toolbar/prism-toolbar.min.css"
),
tags$script(
src = "https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/toolbar/prism-toolbar.min.js"
),
tags$script(
src = "https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js"
)
) )
prismRDependency <- tags$head(
tags$script(src = "https://cdnjs.cloudflare.com/ajax/libs/prism/1.8.4/components/prism-r.min.js")
)
html_code_wrap <- function(string,lang="r"){ html_code_wrap <- function(string,lang="r"){
glue::glue("<pre><code class='language-{lang}'>{string} glue::glue("<pre><code class='language-{lang}'>{string}

Binary file not shown.

View file

@ -1,115 +0,0 @@
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()

View file

@ -99,7 +99,7 @@ ui_elements <- function(selection) {
import_globalenv_ui( import_globalenv_ui(
id = "env", id = "env",
title = NULL, title = NULL,
packages = c("NHANES", "stRoke", "datasets", "MASS") packages = c("NHANES", "stRoke", "datasets")
) )
), ),
# shiny::conditionalPanel( # shiny::conditionalPanel(
@ -268,7 +268,7 @@ ui_elements <- function(selection) {
shiny::tags$br(), shiny::tags$br(),
shiny::fluidRow( shiny::fluidRow(
shiny::column( shiny::column(
width = 3, width = 4,
shiny::actionButton( shiny::actionButton(
inputId = "modal_update", inputId = "modal_update",
label = i18n$t("Reorder factor levels"), label = i18n$t("Reorder factor levels"),
@ -280,7 +280,7 @@ ui_elements <- function(selection) {
shiny::tags$br() shiny::tags$br()
), ),
shiny::column( shiny::column(
width = 3, width = 4,
shiny::actionButton( shiny::actionButton(
inputId = "modal_cut", inputId = "modal_cut",
label = i18n$t("New factor"), label = i18n$t("New factor"),
@ -292,19 +292,7 @@ ui_elements <- function(selection) {
shiny::tags$br() shiny::tags$br()
), ),
shiny::column( shiny::column(
width = 3, width = 4,
shiny::actionButton(
inputId = "modal_string",
label = i18n$t("Split text"),
width = "100%"
),
shiny::tags$br(),
shiny::helpText(i18n$t("Split a text column by a recognised delimiter.")),
shiny::tags$br(),
shiny::tags$br()
),
shiny::column(
width = 3,
shiny::actionButton( shiny::actionButton(
inputId = "modal_column", inputId = "modal_column",
label = i18n$t("New variable"), label = i18n$t("New variable"),
@ -375,17 +363,6 @@ ui_elements <- function(selection) {
value = "acc_pan_chars", value = "acc_pan_chars",
title = "Settings", title = "Settings",
icon = bsicons::bs_icon("table"), icon = bsicons::bs_icon("table"),
# vectorSelectInput(
# inputId = "baseline_theme",
# selected = "none",
# label = i18n$t("Select table theme"),
# choices = c(
# "The Journal of the American Medical Association" = "jama",
# "The Lancet"="lancet",
# "The New England Journal of Medicine" = "nejm",
# "The Quarterly Journal of Economics" = "qjecon")
# ),
shiny::uiOutput("detail_level"),
shiny::uiOutput("strat_var"), shiny::uiOutput("strat_var"),
shiny::helpText(i18n$t("Only factor/categorical variables are available for stratification. Go back to the 'Prepare' tab to reclass a variable if it's not on the list.")), shiny::helpText(i18n$t("Only factor/categorical variables are available for stratification. Go back to the 'Prepare' tab to reclass a variable if it's not on the list.")),
shiny::conditionalPanel( shiny::conditionalPanel(
@ -400,20 +377,10 @@ ui_elements <- function(selection) {
"Yes" = "yes" "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::br(),
shiny::actionButton( shiny::actionButton(
inputId = "act_eval", inputId = "act_eval",
label = i18n$t("Evaluate"), label = i18n$t("Evaluate"),
@ -462,15 +429,26 @@ ui_elements <- function(selection) {
data_correlations_ui(id = "correlations", height = 600) data_correlations_ui(id = "correlations", height = 600)
) )
), ),
do.call( bslib::nav_panel(
bslib::nav_panel,
c(
list(
title = i18n$t("Missings"), title = i18n$t("Missings"),
icon = bsicons::bs_icon("x-circle") 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."))
)
)
), ),
data_missings_ui(id = "missingness", validation_ui("validation_mcar"),
validation_ui("validation_mcar")) data_missings_ui(id = "missingness")
) )
) )
), ),

View file

@ -1,3 +1,4 @@
## Works, but not implemented ## Works, but not implemented
## ##
## These edits mainly allows for ## These edits mainly allows for
@ -100,6 +101,7 @@ update_factor_server <- function(id, data_r = reactive(NULL)) {
moduleServer( moduleServer(
id, id,
function(input, output, session) { function(input, output, session) {
rv <- reactiveValues(data = NULL, data_grid = NULL) rv <- reactiveValues(data = NULL, data_grid = NULL)
bindEvent(observe({ bindEvent(observe({
@ -205,37 +207,19 @@ update_factor_server <- function(id, data_r = reactive(NULL)) {
data <- req(data_r()) data <- req(data_r())
variable <- req(input$variable) variable <- req(input$variable)
grid <- req(input$grid_data) grid <- req(input$grid_data)
name_var <- if (isTRUE(input$new_var)) {
parameters <- list( paste0(variable, "_updated")
variable = variable, } else {
new_variable = isTRUE(input$new_var) | any(grid[["Var1_toset"]] == "New label"), variable
new_levels = as.character(grid[["Var1"]]),
new_labels = as.character(grid[["Var1_toset"]]),
ignore = "New label"
)
data <- tryCatch(
{
rlang::exec(
factor_new_levels_labels,
!!!modifyList(parameters,
val = list(data = data)
)
)
},
error = function(err) {
showNotification(paste("We encountered the following error creating the new factor:", err), type = "err")
} }
data[[name_var]] <- factor(
as.character(data[[variable]]),
levels = grid[["Var1"]]
) )
data[[name_var]] <- factor(
# browser() data[[variable]],
code <- rlang::call2( labels = ifelse(grid[["Var1_toset"]]=="New label",grid[["Var1"]],grid[["Var1_toset"]])
"factor_new_levels_labels",
!!!parameters,
.ns = "FreesearchR"
) )
attr(data, "code") <- code
data data
}) })
@ -247,62 +231,6 @@ update_factor_server <- function(id, data_r = reactive(NULL)) {
) )
} }
#' Simple function to apply new levels and/or labels to factor
#'
#' @param variable factor variable
#' @param new_level new levels, same length as original
#' @param new_label new labels, same length as original
#' @param ignore character string to ignore in new labels
#'
#' @returns factor
#' @export
#'
#' @examples
#' data_n <- mtcars
#' data_n$cyl <- factor(data_n$cyl)
#' factor_new_levels_labels(data_n, "cyl", new_labels = c("four", "New label", "New label"))
factor_new_levels_labels <- function(
data,
variable,
new_variable = TRUE,
new_levels = NULL,
new_labels = NULL,
ignore = "New label") {
if (!is.factor(data[[variable]])) {
return(data)
}
if (is.null(new_levels)) {
new_levels <- levels(data[[variable]])
}
if (is.null(new_labels)) {
new_labels <- labels(data[[variable]])
}
with_level <- factor(
as.character(data[[variable]]),
levels = new_levels
)
with_label <- factor(
with_level,
labels = ifelse(new_labels == "New label", new_levels, new_labels)
)
# browser()
if (isTRUE(new_variable)) {
append_column(
data = data,
column = with_label,
name = unique_names(new = paste0(variable, "_updated"), existing = names(data))
)
} else {
data[[variable]] <- new_variable
data
}
}
#' @inheritParams shiny::modalDialog #' @inheritParams shiny::modalDialog
@ -361,22 +289,3 @@ winbox_update_factor <- function(id,
) )
} }
#' Make unique variable names
#'
#' Helper function to create new variable names that are unique
#' given a set of existing names (in a data set, for example).
#' If a variable name already exists, a number will be appended.
#'
#' @param new a vector of proposed new variable names
#' @param existing a vector of existing variable names
#' @return a vector of unique new variable names
#' @examples
#' unique_names(c("var_x", "var_y", "var_x"), c("var_x", "var_z"))
#'
#' @export
unique_names <- function(new, existing = character()) {
new_names <- make.unique(c(existing, new), sep = "_")
new_names[-seq_along(existing)]
}

View file

@ -688,7 +688,7 @@ convert_to <- function(data,
#' Get variable(s) to convert #' Get variable(s) to convert
#' #'
#' @param vars variables, output from summary_vars() function #' @param vars Output of [summary_vars()]
#' @param classes_input List of inputs containing new classes #' @param classes_input List of inputs containing new classes
#' #'
#' @return a `data.table`. #' @return a `data.table`.

View file

@ -109,9 +109,6 @@ validation_server <- function(id,
purrr::list_flatten() purrr::list_flatten()
} else if (length(to_validate) > 0) { } else if (length(to_validate) > 0) {
out <- make_validation_alerts(to_validate) out <- make_validation_alerts(to_validate)
} else {
## Defaulting to an emptu output vector
out <- character()
} }
valid_ui$x <- tagList(out) valid_ui$x <- tagList(out)
} }
@ -335,7 +332,7 @@ validation_lib <- function(name = NULL) {
"mcar" = function(x, y) { "mcar" = function(x, y) {
### Placeholder for missingness validation ### Placeholder for missingness validation
list( list(
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}."), string = i18n$t("There is a significant correlation between {n_nonmcar} variables and missing observations in the outcome variable {outcome}."),
summary.fun = mcar_validate, summary.fun = mcar_validate,
summary.fun.args = list( summary.fun.args = list(
data = x, data = x,

View file

@ -6,6 +6,7 @@
#' @returns Shiny ui module #' @returns Shiny ui module
#' @export #' @export
#' #'
#' @example examples/visual_summary_demo.R
visual_summary_ui <- function(id) { visual_summary_ui <- function(id) {
ns <- shiny::NS(id) ns <- shiny::NS(id)
@ -99,6 +100,14 @@ modal_visual_summary <- function(id,
#' @returns An [apexchart()] `htmlwidget` object. #' @returns An [apexchart()] `htmlwidget` object.
#' @export #' @export
#' #'
#' @examples
#' data_demo <- mtcars
#' data_demo[2:4, "cyl"] <- NA
#' rbind(data_demo, data_demo, data_demo, data_demo) |> missings_apex_plot()
#' data_demo |> missings_apex_plot()
#' mtcars |> missings_apex_plot(animation = TRUE)
#' # dplyr::storms |> missings_apex_plot()
#' visdat::vis_dat(dplyr::storms)
missings_apex_plot <- function(data, animation = FALSE, ...) { missings_apex_plot <- function(data, animation = FALSE, ...) {
l <- data_summary_gather(data, ...) l <- data_summary_gather(data, ...)
@ -149,6 +158,14 @@ missings_apex_plot <- function(data, animation = FALSE, ...) {
#' @returns ggplot2 object #' @returns ggplot2 object
#' @export #' @export
#' #'
#' @examples
#' data_demo <- mtcars
#' data_demo[sample(1:32, 10), "cyl"] <- NA
#' data_demo[sample(1:32, 8), "vs"] <- NA
#' visual_summary(data_demo)
#' visual_summary(data_demo, palette.fun = scales::hue_pal())
#' visual_summary(dplyr::storms, summary.fun = data_type)
#' visual_summary(dplyr::storms, summary.fun = data_type, na.label = "Missings", legend.title = "Class")
visual_summary <- function(data, legend.title = NULL, ylab = "Observations", ...) { visual_summary <- function(data, legend.title = NULL, ylab = "Observations", ...) {
l <- data_summary_gather(data, ...) l <- data_summary_gather(data, ...)
@ -200,7 +217,7 @@ visual_summary <- function(data, legend.title = NULL, ylab = "Observations", ...
#' @export #' @export
#' #'
#' @examples #' @examples
#' mtcars |> data_summary_gather() |> names() #' mtcars |> data_summary_gather()
data_summary_gather <- function(data, summary.fun = class, palette.fun = viridisLite::viridis, na.label = "NA", ...) { data_summary_gather <- function(data, summary.fun = class, palette.fun = viridisLite::viridis, na.label = "NA", ...) {
df_plot <- setNames(data, unique_short(names(data))) |> df_plot <- setNames(data, unique_short(names(data))) |>
purrr::map_df(\(x){ purrr::map_df(\(x){

View file

@ -76,7 +76,7 @@ Thank you very much to all translators having helped to translate and validate t
Like any other project, this project was never possible without the great work of others. These are some of the sources and packages I have used: Like any other project, this project was never possible without the great work of others. These are some of the sources and packages I have used:
- The ***FreesearchR*** app is built with [Shiny](https://shiny.posit.co/) and based on [*R*](https://www.r-project.org/). - The ***FreesearchR*** app is build with [Shiny](https://shiny.posit.co/) and based on [*R*](https://www.r-project.org/).
- [gtsummary](https://www.danieldsjoberg.com/gtsummary/): superb and flexible way to create publication-ready analytical and summary tables. - [gtsummary](https://www.danieldsjoberg.com/gtsummary/): superb and flexible way to create publication-ready analytical and summary tables.

View file

@ -2,20 +2,20 @@
-------------------------------- R environment --------------------------------- -------------------------------- R environment ---------------------------------
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
|setting |value | |setting |value |
|:-----------|:----------------------------------------------| |:-----------|:------------------------------------------|
|version |R version 4.4.1 (2024-06-14) | |version |R version 4.4.1 (2024-06-14) |
|os |macOS 26.1 | |os |macOS 15.7.1 |
|system |aarch64, darwin20 | |system |aarch64, darwin20 |
|ui |RStudio | |ui |RStudio |
|language |(EN) | |language |(EN) |
|collate |en_US.UTF-8 | |collate |en_US.UTF-8 |
|ctype |en_US.UTF-8 | |ctype |en_US.UTF-8 |
|tz |Europe/Copenhagen | |tz |Africa/Dar_es_Salaam |
|date |2025-12-12 | |date |2025-10-27 |
|rstudio |2025.09.2+418 Cucumberleaf Sunflower (desktop) | |rstudio |2025.05.0+496 Mariposa Orchid (desktop) |
|pandoc |3.6.4 @ /opt/homebrew/bin/ (via rmarkdown) | |pandoc |3.6.4 @ /opt/homebrew/bin/ (via rmarkdown) |
|quarto |1.7.30 @ /usr/local/bin/quarto | |quarto |1.7.30 @ /usr/local/bin/quarto |
|FreesearchR |25.12.6.251212 | |FreesearchR |25.10.4.251027 |
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
@ -26,94 +26,90 @@
|apexcharter |0.4.4 |2024-09-06 |CRAN (R 4.4.1) | |apexcharter |0.4.4 |2024-09-06 |CRAN (R 4.4.1) |
|askpass |1.2.1 |2024-10-04 |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) | |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) | |backports |1.5.0 |2024-05-23 |CRAN (R 4.4.1) |
|base64enc |0.1-3 |2015-07-28 |CRAN (R 4.4.1) | |base64enc |0.1-3 |2015-07-28 |CRAN (R 4.4.1) |
|bayestestR |0.17.0 |2025-08-29 |CRAN (R 4.4.1) | |bayestestR |0.16.1 |2025-07-01 |CRAN (R 4.4.1) |
|bit |4.6.0 |2025-03-06 |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) | |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) | |bitops |1.0-9 |2024-10-03 |CRAN (R 4.4.1) |
|boot |1.3-32 |2025-08-29 |CRAN (R 4.4.1) | |boot |1.3-31 |2024-08-28 |RSPM (R 4.4.0) |
|brio |1.1.5 |2024-04-24 |CRAN (R 4.4.1) | |brio |1.1.5 |2024-04-24 |CRAN (R 4.4.1) |
|broom |1.0.11 |2025-12-04 |CRAN (R 4.4.3) | |broom |1.0.9 |2025-07-28 |CRAN (R 4.4.1) |
|broom.helpers |1.22.0 |2025-09-17 |CRAN (R 4.4.1) | |broom.helpers |1.21.0 |2025-04-24 |CRAN (R 4.4.1) |
|bsicons |0.1.2 |2023-11-04 |CRAN (R 4.4.0) | |bsicons |0.1.2 |2023-11-04 |CRAN (R 4.4.0) |
|bslib |0.9.0 |2025-01-30 |CRAN (R 4.4.1) | |bslib |0.9.0 |2025-01-30 |CRAN (R 4.4.1) |
|cachem |1.1.0 |2024-05-16 |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) | |calendar |0.2.0 |2024-08-20 |CRAN (R 4.4.1) |
|cards |0.7.1 |2025-12-02 |CRAN (R 4.4.3) | |cards |0.6.1 |2025-07-03 |CRAN (R 4.4.1) |
|cardx |0.3.1 |2025-12-04 |CRAN (R 4.4.3) | |cardx |0.2.5 |2025-07-03 |CRAN (R 4.4.1) |
|caTools |1.18.3 |2024-09-04 |CRAN (R 4.4.1) | |caTools |1.18.3 |2024-09-04 |CRAN (R 4.4.1) |
|cellranger |1.1.0 |2016-07-27 |CRAN (R 4.4.0) | |cellranger |1.1.0 |2016-07-27 |CRAN (R 4.4.0) |
|cffr |1.2.0 |2025-01-25 |CRAN (R 4.4.1) | |cffr |1.2.0 |2025-01-25 |CRAN (R 4.4.1) |
|checkmate |2.3.3 |2025-08-18 |CRAN (R 4.4.1) | |checkmate |2.3.2 |2024-07-29 |RSPM (R 4.4.0) |
|class |7.3-23 |2025-01-01 |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) | |classInt |0.4-11 |2025-01-08 |CRAN (R 4.4.1) |
|cli |3.6.5 |2025-04-23 |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) | |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) | |codetools |0.2-20 |2024-03-31 |CRAN (R 4.4.1) |
|colorspace |2.1-2 |2025-09-22 |CRAN (R 4.4.1) | |colorspace |2.1-1 |2024-07-26 |CRAN (R 4.4.1) |
|commonmark |2.0.0 |2025-07-07 |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) | |crayon |1.5.3 |2024-06-20 |CRAN (R 4.4.1) |
|curl |7.0.0 |2025-08-19 |CRAN (R 4.4.1) | |curl |6.4.0 |2025-06-22 |RSPM (R 4.4.0) |
|data.table |1.17.8 |2025-07-10 |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) | |datamods |1.5.3 |2024-10-02 |CRAN (R 4.4.1) |
|datawizard |1.3.0 |2025-10-11 |CRAN (R 4.4.1) | |datawizard |1.2.0 |2025-07-17 |CRAN (R 4.4.1) |
|DEoptimR |1.1-4 |2025-07-27 |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) | |desc |1.4.3 |2023-12-10 |CRAN (R 4.4.1) |
|devtools |2.4.6 |2025-10-03 |CRAN (R 4.4.1) | |devtools |2.4.5 |2022-10-11 |CRAN (R 4.4.0) |
|DHARMa |0.4.7 |2024-10-18 |CRAN (R 4.4.1) | |DHARMa |0.4.7 |2024-10-18 |CRAN (R 4.4.1) |
|digest |0.6.39 |2025-11-19 |CRAN (R 4.4.3) | |digest |0.6.37 |2024-08-19 |CRAN (R 4.4.1) |
|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) | |doParallel |1.0.17 |2022-02-07 |CRAN (R 4.4.0) |
|dplyr |1.1.4 |2023-11-17 |CRAN (R 4.4.0) | |dplyr |1.1.4 |2023-11-17 |CRAN (R 4.4.0) |
|DT |0.34.0 |2025-09-02 |CRAN (R 4.4.1) | |DT |0.33 |2024-04-04 |CRAN (R 4.4.0) |
|e1071 |1.7-16 |2024-09-16 |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) | |easystats |0.7.5 |2025-07-11 |CRAN (R 4.4.1) |
|ellipsis |0.3.2 |2021-04-29 |CRAN (R 4.4.1) | |ellipsis |0.3.2 |2021-04-29 |CRAN (R 4.4.1) |
|emmeans |2.0.0 |2025-10-29 |CRAN (R 4.4.1) | |emmeans |1.11.2 |2025-07-11 |CRAN (R 4.4.1) |
|esquisse |2.1.0 |2025-02-21 |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) | |estimability |1.5.1 |2024-05-12 |CRAN (R 4.4.1) |
|eulerr |7.0.4 |2025-09-24 |CRAN (R 4.4.1) | |eulerr |7.0.2 |2024-03-28 |CRAN (R 4.4.0) |
|evaluate |1.0.5 |2025-08-27 |CRAN (R 4.4.1) | |evaluate |1.0.4 |2025-06-18 |RSPM (R 4.4.0) |
|farver |2.1.2 |2024-05-13 |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) | |fastmap |1.2.0 |2024-05-15 |CRAN (R 4.4.1) |
|flextable |0.9.10 |2025-08-24 |CRAN (R 4.4.1) | |flextable |0.9.9 |2025-05-31 |CRAN (R 4.4.1) |
|fontawesome |0.5.3 |2024-11-16 |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) | |fontBitstreamVera |0.1.1 |2017-02-01 |CRAN (R 4.4.1) |
|fontLiberation |0.1.0 |2016-10-15 |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) | |fontquiver |0.2.1 |2017-02-01 |CRAN (R 4.4.0) |
|forcats |1.0.1 |2025-09-25 |CRAN (R 4.4.1) | |forcats |1.0.0 |2023-01-29 |RSPM (R 4.4.0) |
|foreach |1.5.2 |2022-02-02 |CRAN (R 4.4.0) | |foreach |1.5.2 |2022-02-02 |CRAN (R 4.4.0) |
|foreign |0.8-90 |2025-03-31 |CRAN (R 4.4.1) | |foreign |0.8-90 |2025-03-31 |CRAN (R 4.4.1) |
|Formula |1.2-5 |2023-02-24 |CRAN (R 4.4.1) | |Formula |1.2-5 |2023-02-24 |CRAN (R 4.4.1) |
|FreesearchR |25.12.6 |NA |NA | |FreesearchR |25.10.4 |NA |NA |
|fs |1.6.6 |2025-04-12 |CRAN (R 4.4.1) | |fs |1.6.6 |2025-04-12 |CRAN (R 4.4.1) |
|gdtools |0.4.4 |2025-10-06 |CRAN (R 4.4.1) | |gdtools |0.4.2 |2025-03-27 |CRAN (R 4.4.1) |
|generics |0.1.4 |2025-05-09 |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) | |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) | |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) | |ggforce |0.5.0 |2025-06-18 |CRAN (R 4.4.1) |
|ggplot2 |4.0.1 |2025-11-14 |CRAN (R 4.4.1) | |ggplot2 |3.5.2 |2025-04-09 |CRAN (R 4.4.1) |
|ggridges |0.5.7 |2025-08-27 |CRAN (R 4.4.1) | |ggridges |0.5.6 |2024-01-23 |CRAN (R 4.4.0) |
|ggstats |0.11.0 |2025-09-15 |CRAN (R 4.4.1) | |ggstats |0.10.0 |2025-07-02 |CRAN (R 4.4.1) |
|glue |1.8.0 |2024-09-30 |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) | |gridExtra |2.3 |2017-09-09 |CRAN (R 4.4.1) |
|gt |1.1.0 |2025-09-23 |CRAN (R 4.4.1) | |gt |1.0.0 |2025-04-05 |CRAN (R 4.4.1) |
|gtable |0.3.6 |2024-10-25 |CRAN (R 4.4.1) | |gtable |0.3.6 |2024-10-25 |CRAN (R 4.4.1) |
|gtsummary |2.5.0 |2025-12-05 |CRAN (R 4.4.3) | |gtsummary |2.3.0 |2025-07-03 |CRAN (R 4.4.1) |
|haven |2.5.5 |2025-05-30 |CRAN (R 4.4.1) | |haven |2.5.5 |2025-05-30 |CRAN (R 4.4.1) |
|here |1.0.2 |2025-09-15 |CRAN (R 4.4.1) | |here |1.0.1 |2020-12-13 |CRAN (R 4.4.1) |
|Hmisc |5.2-4 |2025-10-05 |CRAN (R 4.4.1) | |Hmisc |5.2-3 |2025-03-16 |CRAN (R 4.4.1) |
|hms |1.1.4 |2025-10-17 |CRAN (R 4.4.1) | |hms |1.1.3 |2023-03-21 |CRAN (R 4.4.0) |
|htmlTable |2.4.3 |2024-07-21 |CRAN (R 4.4.0) | |htmlTable |2.4.3 |2024-07-21 |CRAN (R 4.4.0) |
|htmltools |0.5.9 |2025-12-04 |CRAN (R 4.4.3) | |htmltools |0.5.8.1 |2024-04-04 |CRAN (R 4.4.1) |
|htmlwidgets |1.6.4 |2023-12-06 |CRAN (R 4.4.0) | |htmlwidgets |1.6.4 |2023-12-06 |CRAN (R 4.4.0) |
|httpuv |1.6.16 |2025-04-16 |CRAN (R 4.4.1) | |httpuv |1.6.16 |2025-04-16 |CRAN (R 4.4.1) |
|IDEAFilter |0.2.1 |2025-07-29 |CRAN (R 4.4.1) | |IDEAFilter |0.2.1 |2025-07-29 |CRAN (R 4.4.1) |
|insight |1.4.4 |2025-12-06 |CRAN (R 4.4.3) | |insight |1.4.0 |2025-08-18 |CRAN (R 4.4.1) |
|iterators |1.0.14 |2022-02-05 |CRAN (R 4.4.1) | |iterators |1.0.14 |2022-02-05 |CRAN (R 4.4.1) |
|jquerylib |0.1.4 |2021-04-26 |CRAN (R 4.4.0) | |jquerylib |0.1.4 |2021-04-26 |CRAN (R 4.4.0) |
|jsonlite |2.0.0 |2025-03-27 |CRAN (R 4.4.1) | |jsonlite |2.0.0 |2025-03-27 |CRAN (R 4.4.1) |
@ -122,109 +118,101 @@
|keyring |1.4.1 |2025-06-15 |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) | |knitr |1.50 |2025-03-16 |CRAN (R 4.4.1) |
|labeling |0.4.3 |2023-08-29 |CRAN (R 4.4.1) | |labeling |0.4.3 |2023-08-29 |CRAN (R 4.4.1) |
|later |1.4.4 |2025-08-27 |CRAN (R 4.4.1) | |later |1.4.2 |2025-04-08 |RSPM (R 4.4.0) |
|lattice |0.22-7 |2025-04-02 |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) | |lifecycle |1.0.4 |2023-11-07 |CRAN (R 4.4.1) |
|litedown |0.8 |2025-11-02 |CRAN (R 4.4.1) | |litedown |0.7 |2025-04-08 |CRAN (R 4.4.1) |
|lme4 |1.1-38 |2025-12-02 |CRAN (R 4.4.3) | |lme4 |1.1-37 |2025-03-26 |CRAN (R 4.4.1) |
|locatexec |0.1.1 |2021-05-19 |CRAN (R 4.4.0) |
|lubridate |1.9.4 |2024-12-08 |CRAN (R 4.4.1) | |lubridate |1.9.4 |2024-12-08 |CRAN (R 4.4.1) |
|magick |2.9.0 |2025-09-08 |CRAN (R 4.4.1) | |magrittr |2.0.3 |2022-03-30 |RSPM (R 4.4.0) |
|magrittr |2.0.4 |2025-09-12 |CRAN (R 4.4.1) |
|markdown |2.0 |2025-03-23 |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) | |MASS |7.3-65 |2025-02-28 |CRAN (R 4.4.1) |
|Matrix |1.7-4 |2025-08-28 |CRAN (R 4.4.1) | |Matrix |1.7-3 |2025-03-11 |RSPM (R 4.4.0) |
|memoise |2.0.1 |2021-11-26 |CRAN (R 4.4.0) | |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) | |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) | |minqa |1.2.8 |2024-08-17 |CRAN (R 4.4.1) |
|mvtnorm |1.3-3 |2025-01-10 |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) | |NHANES |2.1.0 |2015-07-02 |CRAN (R 4.4.0) |
|nlme |3.1-168 |2025-03-31 |CRAN (R 4.4.1) | |nlme |3.1-168 |2025-03-31 |CRAN (R 4.4.1) |
|nloptr |2.2.1 |2025-03-17 |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) | |nnet |7.3-20 |2025-01-01 |CRAN (R 4.4.1) |
|officer |0.7.2 |2025-12-04 |CRAN (R 4.4.3) | |officer |0.6.10 |2025-05-30 |CRAN (R 4.4.1) |
|opdisDownsampling |1.0.1 |2024-04-15 |CRAN (R 4.4.0) | |opdisDownsampling |1.0.1 |2024-04-15 |CRAN (R 4.4.0) |
|openssl |2.3.4 |2025-09-30 |CRAN (R 4.4.1) | |openssl |2.3.3 |2025-05-26 |CRAN (R 4.4.1) |
|openxlsx2 |1.22 |2025-12-07 |CRAN (R 4.4.3) | |openxlsx2 |1.18 |2025-07-29 |CRAN (R 4.4.1) |
|otel |0.2.0 |2025-08-29 |CRAN (R 4.4.1) | |parameters |0.27.0 |2025-07-09 |CRAN (R 4.4.1) |
|pak |0.9.1 |2025-12-01 |CRAN (R 4.4.3) | |patchwork |1.3.1 |2025-06-21 |RSPM (R 4.4.0) |
|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) | |pbmcapply |1.5.1 |2022-04-28 |CRAN (R 4.4.1) |
|pdftools |3.6.0 |2025-09-10 |CRAN (R 4.4.1) | |performance |0.15.0 |2025-07-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) | |phosphoricons |0.2.1 |2024-04-08 |CRAN (R 4.4.0) |
|pillar |1.11.1 |2025-09-17 |CRAN (R 4.4.1) | |pillar |1.11.0 |2025-07-04 |RSPM (R 4.4.0) |
|pkgbuild |1.4.8 |2025-05-26 |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) | |pkgconfig |2.0.3 |2019-09-22 |CRAN (R 4.4.1) |
|pkgload |1.4.1 |2025-09-23 |CRAN (R 4.4.1) | |pkgload |1.4.0 |2024-06-28 |RSPM (R 4.4.0) |
|plyr |1.8.9 |2023-10-02 |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) | |polyclip |1.10-7 |2024-07-23 |CRAN (R 4.4.1) |
|pracma |2.4.6 |2025-10-22 |CRAN (R 4.4.1) | |pracma |2.4.4 |2023-11-10 |CRAN (R 4.4.1) |
|processx |3.8.6 |2025-02-21 |CRAN (R 4.4.1) | |processx |3.8.6 |2025-02-21 |CRAN (R 4.4.1) |
|promises |1.5.0 |2025-11-01 |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) |
|proxy |0.4-27 |2022-06-09 |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) | |ps |1.9.1 |2025-04-12 |CRAN (R 4.4.1) |
|purrr |1.2.0 |2025-11-04 |CRAN (R 4.4.1) | |purrr |1.1.0 |2025-07-10 |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) | |qqconf |1.3.2 |2023-04-14 |CRAN (R 4.4.0) |
|qqplotr |0.0.7 |2025-09-05 |CRAN (R 4.4.1) | |qqplotr |0.0.6 |2023-01-25 |CRAN (R 4.4.0) |
|quarto |1.5.1 |2025-09-04 |CRAN (R 4.4.1) | |quarto |1.5.0 |2025-07-28 |RSPM (R 4.4.0) |
|R.cache |0.17.0 |2025-05-02 |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.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.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) | |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) | |R6 |2.6.1 |2025-02-15 |CRAN (R 4.4.1) |
|ragg |1.5.0 |2025-09-02 |CRAN (R 4.4.1) | |ragg |1.4.0 |2025-04-10 |RSPM (R 4.4.0) |
|rankinPlot |1.1.0 |2023-01-30 |CRAN (R 4.4.0) | |rankinPlot |1.1.0 |2023-01-30 |CRAN (R 4.4.0) |
|rappdirs |0.3.3 |2021-01-31 |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) | |rbibutils |2.3 |2024-10-04 |CRAN (R 4.4.1) |
|RColorBrewer |1.1-3 |2022-04-03 |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) | |Rcpp |1.1.0 |2025-07-02 |CRAN (R 4.4.1) |
|RcppArmadillo |15.2.2-1 |2025-11-22 |CRAN (R 4.4.3) | |RcppArmadillo |14.6.0-1 |2025-07-02 |CRAN (R 4.4.1) |
|Rdpack |2.6.4 |2025-04-09 |CRAN (R 4.4.1) | |Rdpack |2.6.4 |2025-04-09 |CRAN (R 4.4.1) |
|reactable |0.4.5 |2025-12-01 |CRAN (R 4.4.3) | |reactable |0.4.4 |2023-03-12 |CRAN (R 4.4.0) |
|readODS |2.3.2 |2025-01-13 |CRAN (R 4.4.1) | |readODS |2.3.2 |2025-01-13 |CRAN (R 4.4.1) |
|readr |2.1.6 |2025-11-14 |CRAN (R 4.4.3) | |readr |2.1.5 |2024-01-10 |CRAN (R 4.4.0) |
|readxl |1.4.5 |2025-03-07 |CRAN (R 4.4.1) | |readxl |1.4.5 |2025-03-07 |CRAN (R 4.4.1) |
|REDCapCAST |25.3.2 |2025-03-10 |CRAN (R 4.4.1) | |REDCapCAST |25.3.2 |2025-03-10 |CRAN (R 4.4.1) |
|REDCapR |1.6.0 |2025-10-08 |CRAN (R 4.4.1) | |REDCapR |1.5.0 |2025-07-28 |CRAN (R 4.4.1) |
|reformulas |0.4.2 |2025-10-28 |CRAN (R 4.4.1) | |reformulas |0.4.1 |2025-04-30 |CRAN (R 4.4.1) |
|remotes |2.5.0 |2024-03-17 |CRAN (R 4.4.1) | |remotes |2.5.0 |2024-03-17 |CRAN (R 4.4.1) |
|rempsyc |0.2.0 |2025-09-15 |CRAN (R 4.4.1) | |rempsyc |0.1.9 |2025-02-01 |CRAN (R 4.4.1) |
|renv |1.1.5 |2025-07-24 |CRAN (R 4.4.1) | |renv |1.1.5 |2025-07-24 |CRAN (R 4.4.1) |
|reshape2 |1.4.5 |2025-11-12 |CRAN (R 4.4.1) | |reshape2 |1.4.4 |2020-04-09 |CRAN (R 4.4.0) |
|rio |1.2.4 |2025-09-26 |CRAN (R 4.4.1) | |rio |1.2.3 |2024-09-25 |CRAN (R 4.4.1) |
|rlang |1.1.6 |2025-04-11 |CRAN (R 4.4.1) | |rlang |1.1.6 |2025-04-11 |CRAN (R 4.4.1) |
|rmarkdown |2.30 |2025-09-28 |CRAN (R 4.4.1) | |rmarkdown |2.29 |2024-11-04 |CRAN (R 4.4.1) |
|robustbase |0.99-6 |2025-09-04 |CRAN (R 4.4.1) | |robustbase |0.99-4-1 |2024-09-27 |CRAN (R 4.4.1) |
|roxygen2 |7.3.3 |2025-09-03 |CRAN (R 4.4.1) | |roxygen2 |7.3.2 |2024-06-28 |RSPM (R 4.4.0) |
|rpart |4.1.24 |2025-01-07 |CRAN (R 4.4.1) | |rpart |4.1.24 |2025-01-07 |CRAN (R 4.4.1) |
|rprojroot |2.1.1 |2025-08-26 |CRAN (R 4.4.1) | |rprojroot |2.1.0 |2025-07-12 |RSPM (R 4.4.0) |
|rsconnect |1.7.0 |2025-12-06 |CRAN (R 4.4.3) | |rsconnect |1.5.0 |2025-06-26 |CRAN (R 4.4.1) |
|rstudioapi |0.17.1 |2024-10-22 |CRAN (R 4.4.1) | |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) | |sass |0.4.10 |2025-04-11 |CRAN (R 4.4.1) |
|scales |1.4.0 |2025-04-24 |CRAN (R 4.4.1) | |scales |1.4.0 |2025-04-24 |CRAN (R 4.4.1) |
|see |0.12.0 |2025-09-14 |CRAN (R 4.4.1) | |see |0.11.0 |2025-03-11 |CRAN (R 4.4.1) |
|sessioninfo |1.2.3 |2025-02-05 |CRAN (R 4.4.1) | |sessioninfo |1.2.3 |2025-02-05 |CRAN (R 4.4.1) |
|shiny |1.12.1 |2025-12-09 |CRAN (R 4.4.1) | |shiny |1.11.1 |2025-07-03 |CRAN (R 4.4.1) |
|shiny.i18n |0.3.0 |2023-01-16 |CRAN (R 4.4.0) | |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) | |shinybusy |0.3.3 |2024-03-09 |CRAN (R 4.4.0) |
|shinyjs |2.1.0 |2021-12-23 |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) | |shinyTime |1.0.3 |2022-08-19 |CRAN (R 4.4.0) |
|shinyWidgets |0.9.0 |2025-02-21 |CRAN (R 4.4.1) | |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) | |stringi |1.8.7 |2025-03-27 |CRAN (R 4.4.1) |
|stringr |1.6.0 |2025-11-04 |CRAN (R 4.4.1) | |stringr |1.5.1 |2023-11-14 |RSPM (R 4.4.0) |
|stRoke |25.9.2 |2025-09-30 |CRAN (R 4.4.1) | |stRoke |25.9.2 |2025-09-30 |CRAN (R 4.4.1) |
|styler |1.11.0 |2025-10-13 |CRAN (R 4.4.1) | |styler |1.10.3 |2024-04-07 |CRAN (R 4.4.0) |
|systemfonts |1.3.1 |2025-10-01 |CRAN (R 4.4.1) | |systemfonts |1.2.3 |2025-04-30 |CRAN (R 4.4.1) |
|testthat |3.3.1 |2025-11-25 |CRAN (R 4.4.3) | |testthat |3.2.3 |2025-01-13 |CRAN (R 4.4.1) |
|textshaping |1.0.4 |2025-10-10 |CRAN (R 4.4.1) | |textshaping |1.0.1 |2025-05-01 |RSPM (R 4.4.0) |
|thematic |0.1.8 |2025-09-29 |CRAN (R 4.4.1) | |thematic |0.1.7 |2025-06-19 |CRAN (R 4.4.1) |
|tibble |3.3.0 |2025-06-08 |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) | |tidyr |1.3.1 |2024-01-24 |CRAN (R 4.4.1) |
|tidyselect |1.2.1 |2024-03-11 |CRAN (R 4.4.0) | |tidyselect |1.2.1 |2024-03-11 |CRAN (R 4.4.0) |
@ -233,18 +221,17 @@
|tweenr |2.0.3 |2024-02-26 |CRAN (R 4.4.0) | |tweenr |2.0.3 |2024-02-26 |CRAN (R 4.4.0) |
|twosamples |2.0.1 |2023-06-23 |CRAN (R 4.4.1) | |twosamples |2.0.1 |2023-06-23 |CRAN (R 4.4.1) |
|tzdb |0.5.0 |2025-03-15 |CRAN (R 4.4.1) | |tzdb |0.5.0 |2025-03-15 |CRAN (R 4.4.1) |
|usethis |3.2.1 |2025-09-06 |CRAN (R 4.4.1) | |urlchecker |1.0.1 |2021-11-30 |CRAN (R 4.4.1) |
|usethis |3.1.0 |2024-11-26 |RSPM (R 4.4.0) |
|utf8 |1.2.6 |2025-06-08 |CRAN (R 4.4.1) |
|uuid |1.2-1 |2024-07-29 |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) | |V8 |6.0.6 |2025-08-18 |CRAN (R 4.4.1) |
|vctrs |0.6.5 |2023-12-01 |CRAN (R 4.4.0) | |vctrs |0.6.5 |2023-12-01 |CRAN (R 4.4.0) |
|viridis |0.6.5 |2024-01-29 |CRAN (R 4.4.0) | |vroom |1.6.5 |2023-12-05 |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) | |withr |3.0.2 |2024-10-28 |CRAN (R 4.4.1) |
|writexl |1.5.4 |2025-04-15 |CRAN (R 4.4.1) | |writexl |1.5.4 |2025-04-15 |CRAN (R 4.4.1) |
|xfun |0.54 |2025-10-30 |CRAN (R 4.4.1) | |xfun |0.52 |2025-04-02 |RSPM (R 4.4.0) |
|xml2 |1.5.1 |2025-12-01 |CRAN (R 4.4.3) | |xml2 |1.3.8 |2025-03-14 |RSPM (R 4.4.0) |
|xtable |1.8-4 |2019-04-21 |CRAN (R 4.4.1) | |xtable |1.8-4 |2019-04-21 |CRAN (R 4.4.1) |
|yaml |2.3.11 |2025-11-28 |CRAN (R 4.4.3) | |yaml |2.3.10 |2024-07-26 |CRAN (R 4.4.1) |
|yesno |0.1.3 |2024-07-26 |CRAN (R 4.4.1) |
|zip |2.3.3 |2025-05-13 |CRAN (R 4.4.1) | |zip |2.3.3 |2025-05-13 |CRAN (R 4.4.1) |

View file

@ -1,5 +1,5 @@
FROM rocker/geospatial:4.4.1 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 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 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 mkdir -p /usr/local/lib/R/etc/ /usr/lib/R/etc/ 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 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")' RUN R -e 'install.packages("remotes")'

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -49,6 +49,7 @@
"Column added!","Variabel oprettet!" "Column added!","Variabel oprettet!"
"Unique values:","Unikke værdier:" "Unique values:","Unikke værdier:"
"Variable to cut:","Variabel, der skal deles:" "Variable to cut:","Variabel, der skal deles:"
"Number of breaks:","Antal niveauer:"
"Close intervals on the right","Luk intervaller til højre" "Close intervals on the right","Luk intervaller til højre"
"Include lowest value","Inkluderer den laveste værdi" "Include lowest value","Inkluderer den laveste værdi"
"Create factor variable","Opret kategorisk variabel" "Create factor variable","Opret kategorisk variabel"
@ -150,7 +151,10 @@
"Settings","Indstillinger" "Settings","Indstillinger"
"The following error occured on determining correlations:","Følgende fejl opstod i forbindelse med korrelationsanalysen:" "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:" "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" "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." "There is a total of {p_miss} % missing observations.","Der er i alt {p_miss} % manglende observationer."
"Median:","Median:" "Median:","Median:"
"Restore original data","Gendan originale data" "Restore original data","Gendan originale data"
@ -243,69 +247,28 @@
"Data characteristics table","Oversigtstabel" "Data characteristics table","Oversigtstabel"
"The dataset without text variables","Datasættet uden variabler formateret som tekst" "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.." "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.." "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 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:" "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." "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'." "Please fill in web address and API token, then press 'Connect'.","Udfyld serveradresse og API-nøgle, og tryk så 'Fobind'."
"Other","Other" "Other","Other"
"Hour of the day","Time på dagen" "Hour of the day","Hour of the day"
"Breaks","Grupper" "Breaks","Breaks"
"By day of the week","Efter ugedag" "By day of the week","By day of the week"
"By weekday","Efter ugedag" "By weekday","By weekday"
"By week number and year","Efter ugenummer og årstal" "By week number and year","By week number and year"
"By month and year","Efter måned og årstal" "By month and year","By month and year"
"By month only","Efter måned alene" "By month only","By month only"
"By quarter of the year","Efter kvartal" "By quarter of the year","By quarter of the year"
"By year","Efter år" "By year","By year"
"Keep only most common","Behold kun de hyppigste" "Keep only most common","Keep only most common"
"Number","Antal" "Number","Number"
"Combine below percentage","Kombiner under procentsats" "Combine below percentage","Combine below percentage"
"Percentage","Procentsats" "Percentage","Percentage"
"By specified numbers","Efter specifikke værdier" "By specified numbers","By specified numbers"
"By quantiles (groups of equal size)","I grupper af samme størrelse" "By quantiles (groups of equal size)","By quantiles (groups of equal size)"
"By week number","Efter ugenummer alene" "By week number","By week number"
"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.","Der er mere avancerede muligheder for at ændre kategoriske variable, oprette nye kategoriske variabler fra eksisterende data eller nye variable baseret på R-kode. Nederst kan du gendanne originale 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.","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."
"Split the variable","Split the variable"
"Original data","Original data"
"Preview of result","Preview of result"
"No character variables with accepted delimiters detected.","No character variables with accepted delimiters detected."
"Variable to split:","Variable to split:"
"Text or character to split string by","Text or character to split string by"
"Select delimiter","Select delimiter"
"Direction:","Direction:"
"Split string to multiple columns. Keep number of rows.","Split string to multiple columns. Keep number of rows."
"Split string to multiple observations (rows) in the same column. Also ads id and instance columns","Split string to multiple observations (rows) in the same column. Also ads id and instance columns"
"Browse data preview","Browse data preview"
"Split character string","Split character string"
"Split text","Split text"
"Split a text column by a recognised delimiter.","Split a text column by a recognised delimiter."
"Split a character string by a common delimiter","Split a character string by a common delimiter"
"Apply split","Apply split"
"Stacked relative barplot","Stacked relative barplot"
"Create relative stacked barplots to show the distribution of categorical levels","Create relative stacked barplots to show the distribution of categorical levels"
"Side-by-side barplot","Side-by-side barplot"
"Create side-by-side barplot to show the distribution of categorical levels","Create side-by-side barplot to show the distribution of categorical levels"
"Select table theme","Select table theme"
"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"

1 en da
49 Column added! Variabel oprettet!
50 Unique values: Unikke værdier:
51 Variable to cut: Variabel, der skal deles:
52 Number of breaks: Antal niveauer:
53 Close intervals on the right Luk intervaller til højre
54 Include lowest value Inkluderer den laveste værdi
55 Create factor variable Opret kategorisk variabel
151 Settings Indstillinger
152 The following error occured on determining correlations: Følgende fejl opstod i forbindelse med korrelationsanalysen:
153 We encountered the following error creating your report: Følgende fejl opstod, da rapporten blev dannet:
154 No variable chosen for analysis Ingen variabel er valgt til analysen
155 No missing observations Ingen manglende observationer
156 Missing vs non-missing observations in the variable **'{variabler()}'** Manglende vs ikke-manglende observationer i variablen **'{variabler()}'**
157 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}.
158 There is a total of {p_miss} % missing observations. Der er i alt {p_miss} % manglende observationer.
159 Median: Median:
160 Restore original data Gendan originale data
247 Data characteristics table Oversigtstabel
248 The dataset without text variables Datasættet uden variabler formateret som tekst
249 Creating the table. Hold on for a moment.. Opretter tabellen. Vent et øjeblik..
250 Select variable to stratify analysis Vælg variabler til at stratificere analysen
251 Generating the report. Hold on for a moment.. Opretter rapporten. Vent et øjeblik..
252 We encountered the following error showing missingness: Under analysen af manglende observationer opstod følgende fejl:
253 We encountered the following error browsing your data: I forsøget på at vise en dataoversigt opstod følgende fejl:
254 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.
255 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.
256 Please fill in web address and API token, then press 'Connect'. Udfyld serveradresse og API-nøgle, og tryk så 'Fobind'.
257 Other Other
258 Hour of the day Time på dagen Hour of the day
259 Breaks Grupper Breaks
260 By day of the week Efter ugedag By day of the week
261 By weekday Efter ugedag By weekday
262 By week number and year Efter ugenummer og årstal By week number and year
263 By month and year Efter måned og årstal By month and year
264 By month only Efter måned alene By month only
265 By quarter of the year Efter kvartal By quarter of the year
266 By year Efter år By year
267 Keep only most common Behold kun de hyppigste Keep only most common
268 Number Antal Number
269 Combine below percentage Kombiner under procentsats Combine below percentage
270 Percentage Procentsats Percentage
271 By specified numbers Efter specifikke værdier By specified numbers
272 By quantiles (groups of equal size) I grupper af samme størrelse By quantiles (groups of equal size)
273 By week number Efter ugenummer alene By week number
274 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. Der er mere avancerede muligheder for at ændre kategoriske variable, oprette nye kategoriske variabler fra eksisterende data eller nye variable baseret på R-kode. Nederst kan du gendanne originale 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.
Split the variable Split the variable
Original data Original data
Preview of result Preview of result
No character variables with accepted delimiters detected. No character variables with accepted delimiters detected.
Variable to split: Variable to split:
Text or character to split string by Text or character to split string by
Select delimiter Select delimiter
Direction: Direction:
Split string to multiple columns. Keep number of rows. Split string to multiple columns. Keep number of rows.
Split string to multiple observations (rows) in the same column. Also ads id and instance columns Split string to multiple observations (rows) in the same column. Also ads id and instance columns
Browse data preview Browse data preview
Split character string Split character string
Split text Split text
Split a text column by a recognised delimiter. Split a text column by a recognised delimiter.
Split a character string by a common delimiter Split a character string by a common delimiter
Apply split Apply split
Stacked relative barplot Stacked relative barplot
Create relative stacked barplots to show the distribution of categorical levels Create relative stacked barplots to show the distribution of categorical levels
Side-by-side barplot Side-by-side barplot
Create side-by-side barplot to show the distribution of categorical levels Create side-by-side barplot to show the distribution of categorical levels
Select table theme Select table theme
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

View file

@ -18,6 +18,7 @@
"Column added!","Column added!" "Column added!","Column added!"
"Unique values:","Unique values:" "Unique values:","Unique values:"
"Variable to cut:","Variable to cut:" "Variable to cut:","Variable to cut:"
"Number of breaks:","Number of breaks:"
"Close intervals on the right","Close intervals on the right" "Close intervals on the right","Close intervals on the right"
"Include lowest value","Include lowest value" "Include lowest value","Include lowest value"
"Create factor variable","Create factor variable" "Create factor variable","Create factor variable"
@ -103,7 +104,9 @@
"You can choose between these file types:","You can choose between these file types:" "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" "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:" "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" "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)}" "Grouped by {get_label(data,ter)}","Grouped by {get_label(data,ter)}"
"Import data from REDCap","Import data from REDCap" "Import data from REDCap","Import data from REDCap"
"REDCap server","REDCap server" "REDCap server","REDCap server"
@ -205,6 +208,7 @@
"Correlation cut-off","Correlation cut-off" "Correlation cut-off","Correlation cut-off"
"Set the cut-off for considered 'highly correlated'.","Set the cut-off for considered 'highly correlated'." "Set the cut-off for considered 'highly correlated'.","Set the cut-off for considered 'highly correlated'."
"Missings","Missings" "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" "Visuals","Visuals"
"Analysis validation","Analysis validation" "Analysis validation","Analysis validation"
"Report","Report" "Report","Report"
@ -227,6 +231,7 @@
"You removed {p_out} % of observations.","You removed {p_out} % of observations." "You removed {p_out} % of observations.","You removed {p_out} % of observations."
"You removed {p_out} % of variables.","You removed {p_out} % of variables." "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 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." "Data includes {n_pairs} pairs of highly correlated variables.","Data includes {n_pairs} pairs of highly correlated variables."
"Class","Class" "Class","Class"
"Observations","Observations" "Observations","Observations"
@ -263,49 +268,7 @@
"The dataset without text variables","The dataset without text variables" "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." "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.." "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.." "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:" "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." "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."
"Text or character to split string by","Text or character to split string by"
"Split the variable","Split the variable"
"Variable to split:","Variable to split:"
"Direction:","Direction:"
"Split string to multiple columns. Keep number of rows.","Split string to multiple columns. Keep number of rows."
"Split string to multiple observations (rows) in the same column. Also ads id and instance columns","Split string to multiple observations (rows) in the same column. Also ads id and instance columns"
"Split character string","Split character string"
"Split text","Split text"
"Split a character string by a common delimiter","Split a character string by a common delimiter"
"Select delimiter","Select delimiter"
"Browse data preview","Browse data preview"
"Original data","Original data"
"Preview of result","Preview of result"
"No character variables with accepted delimiters detected.","No character variables with accepted delimiters detected."
"Split a text column by a recognised delimiter.","Split a text column by a recognised delimiter."
"Apply split","Apply split"
"Stacked relative barplot","Stacked relative barplot"
"Create relative stacked barplots to show the distribution of categorical levels","Create relative stacked barplots to show the distribution of categorical levels"
"Side-by-side barplot","Side-by-side barplot"
"Create side-by-side barplot to show the distribution of categorical levels","Create side-by-side barplot to show the distribution of categorical levels"
"Select table theme","Select table theme"
"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"

1 en de
18 Column added! Column added!
19 Unique values: Unique values:
20 Variable to cut: Variable to cut:
21 Number of breaks: Number of breaks:
22 Close intervals on the right Close intervals on the right
23 Include lowest value Include lowest value
24 Create factor variable Create factor variable
104 You can choose between these file types: You can choose between these file types:
105 You can import {file_extensions_text} files You can import {file_extensions_text} files
106 First five rows are shown below: First five rows are shown below:
107 No variable chosen for analysis No variable chosen for analysis
108 No missing observations No missing observations
109 Missing vs non-missing observations in the variable **'{variabler()}'** Missing vs non-missing observations in the variable **'{variabler()}'**
110 Grouped by {get_label(data,ter)} Grouped by {get_label(data,ter)}
111 Import data from REDCap Import data from REDCap
112 REDCap server REDCap server
208 Correlation cut-off Correlation cut-off
209 Set the cut-off for considered 'highly correlated'. Set the cut-off for considered 'highly correlated'.
210 Missings Missings
211 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.
212 Visuals Visuals
213 Analysis validation Analysis validation
214 Report Report
231 You removed {p_out} % of observations. You removed {p_out} % of observations.
232 You removed {p_out} % of variables. You removed {p_out} % of variables.
233 There is a total of {p_miss} % missing observations. There is a total of {p_miss} % missing observations.
234 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}.
235 Data includes {n_pairs} pairs of highly correlated variables. Data includes {n_pairs} pairs of highly correlated variables.
236 Class Class
237 Observations Observations
268 The dataset without text variables The dataset without text variables
269 The data includes {n_col} variables. Please limit to 100. The data includes {n_col} variables. Please limit to 100.
270 Creating the table. Hold on for a moment.. Creating the table. Hold on for a moment..
271 Select variable to stratify analysis Select variable to stratify analysis
272 Generating the report. Hold on for a moment.. Generating the report. Hold on for a moment..
273 We encountered the following error creating your report: We encountered the following error creating your report:
274 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.
Text or character to split string by Text or character to split string by
Split the variable Split the variable
Variable to split: Variable to split:
Direction: Direction:
Split string to multiple columns. Keep number of rows. Split string to multiple columns. Keep number of rows.
Split string to multiple observations (rows) in the same column. Also ads id and instance columns Split string to multiple observations (rows) in the same column. Also ads id and instance columns
Split character string Split character string
Split text Split text
Split a character string by a common delimiter Split a character string by a common delimiter
Select delimiter Select delimiter
Browse data preview Browse data preview
Original data Original data
Preview of result Preview of result
No character variables with accepted delimiters detected. No character variables with accepted delimiters detected.
Split a text column by a recognised delimiter. Split a text column by a recognised delimiter.
Apply split Apply split
Stacked relative barplot Stacked relative barplot
Create relative stacked barplots to show the distribution of categorical levels Create relative stacked barplots to show the distribution of categorical levels
Side-by-side barplot Side-by-side barplot
Create side-by-side barplot to show the distribution of categorical levels Create side-by-side barplot to show the distribution of categorical levels
Select table theme Select table theme
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

View file

@ -1,311 +0,0 @@
"en","sv"
"Hello","Hei"
"The following variable pairs are highly correlated: {sentence_paste(.x,and_str)}.\nConsider excluding one {more}from the dataset to ensure variables are independent.","The following variable pairs are highly correlated: {sentence_paste(.x,and_str)}.\nConsider excluding one {more}from the dataset to ensure variables are independent."
"No variables have a correlation measure above the threshold.","No variables have a correlation measure above the threshold."
"and","and"
"The following error occured on determining correlations:","The following error occured on determining correlations:"
"from each pair","from each pair"
"New column name:","New column name:"
"Group calculation by:","Group calculation by:"
"Enter an expression to define new column:","Enter an expression to define new column:"
"Click on a column name to add it to the expression:","Click on a column name to add it to the expression:"
"Create column","Create column"
"Cancel","Cancel"
"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."
"New column name cannot be empty","New column name cannot be empty"
"Create a new column","Create a new column"
"Some operations are not allowed","Some operations are not allowed"
"Column added!","Column added!"
"Unique values:","Unique values:"
"Variable to cut:","Variable to cut:"
"Close intervals on the right","Close intervals on the right"
"Include lowest value","Include lowest value"
"Create factor variable","Create factor variable"
"Fixed breaks:","Fixed breaks:"
"Method:","Method:"
"Other","Other"
"Convert Numeric to Factor","Convert Numeric to Factor"
"Hour of the day","Hour of the day"
"Breaks","Breaks"
"By day of the week","By day of the week"
"By weekday","By weekday"
"By week number and year","By week number and year"
"By week number","By week number"
"By month and year","By month and year"
"By month only","By month only"
"By quarter of the year","By quarter of the year"
"By year","By year"
"Keep only most common","Keep only most common"
"Number","Number"
"Combine below percentage","Combine below percentage"
"Percentage","Percentage"
"By specified numbers","By specified numbers"
"By quantiles (groups of equal size)","By quantiles (groups of equal size)"
"Only non-text variables are available for plotting. Go the ""Data"" to reclass data to plot.","Only non-text variables are available for plotting. Go the ""Data"" to reclass data to plot."
"Plot","Plot"
"Adjust settings, then press ""Plot"".","Adjust settings, then press ""Plot""."
"Plot height (mm)","Plot height (mm)"
"Plot width (mm)","Plot width (mm)"
"File format","File format"
"Download plot","Download plot"
"Create plot","Create plot"
"Download","Download"
"Select variable","Select variable"
"Response variable","Response variable"
"Plot type","Plot type"
"Please select","Please select"
"Additional variables","Additional variables"
"Secondary variable","Secondary variable"
"No variable","No variable"
"Grouping variable","Grouping variable"
"No stratification","No stratification"
"Drawing the plot. Hold tight for a moment..","Drawing the plot. Hold tight for a moment.."
"#Plotting\n","#Plotting\n"
"Stacked horizontal bars","Stacked horizontal bars"
"A classical way of visualising the distribution of an ordinal scale like the modified Ranking Scale and known as Grotta bars","A classical way of visualising the distribution of an ordinal scale like the modified Ranking Scale and known as Grotta bars"
"Violin plot","Violin plot"
"A modern alternative to the classic boxplot to visualise data distribution","A modern alternative to the classic boxplot to visualise data distribution"
"Sankey plot","Sankey plot"
"A way of visualising change between groups","A way of visualising change between groups"
"Scatter plot","Scatter plot"
"A classic way of showing the association between to variables","A classic way of showing the association between to variables"
"Box plot","Box plot"
"A classic way to plot data distribution by groups","A classic way to plot data distribution by groups"
"Euler diagram","Euler diagram"
"Generate area-proportional Euler diagrams to display set relationships","Generate area-proportional Euler diagrams to display set relationships"
"Unique:","Unique:"
"Missing:","Missing:"
"Most Common:","Most Common:"
"Min:","Min:"
"Mean:","Mean:"
"Median:","Median:"
"Max:","Max:"
"{data_text} has {n} observations and {n_var} variables, with {n_complete} ({p_complete} %) complete cases.","{data_text} has {n} observations and {n_var} variables, with {n_complete} ({p_complete} %) complete cases."
"Import a dataset from an environment","Import a dataset from an environment"
"Select a data source:","Select a data source:"
"Select source","Select source"
"Select a dataset:","Select a dataset:"
"List of datasets...","List of datasets..."
"No data selected!","No data selected!"
"Use a dataset from your environment or from the environment of a package.","Use a dataset from your environment or from the environment of a package."
"No dataset here...","No dataset here..."
"Imported data","Imported data"
"Not a data.frame","Not a data.frame"
"Rows to skip before reading data:","Rows to skip before reading data:"
"Missing values character(s):","Missing values character(s):"
"if several use a comma (',') to separate them","if several use a comma (',') to separate them"
"Decimal separator:","Decimal separator:"
"Encoding:","Encoding:"
"Upload a file:","Upload a file:"
"Browse...","Browse..."
"Select sheet to import:","Select sheet to import:"
"No file selected.","No file selected."
"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 missing observations","No missing observations"
"Grouped by {get_label(data,ter)}","Grouped by {get_label(data,ter)}"
"Import data from REDCap","Import data from REDCap"
"REDCap server","REDCap server"
"Web address","Web address"
"Format should be either 'https://redcap.your.institution/' or 'https://your.institution/redcap/'","Format should be either 'https://redcap.your.institution/' or 'https://your.institution/redcap/'"
"API token","API token"
"The token is a string of 32 numbers and letters.","The token is a string of 32 numbers and letters."
"Connect","Connect"
"Please fill in web address and API token, then press 'Connect'.","Please fill in web address and API token, then press 'Connect'."
"Data import parameters","Data import parameters"
"Select fields/variables to import and click the funnel to apply optional filters","Select fields/variables to import and click the funnel to apply optional filters"
"Import","Import"
"Click to see data dictionary","Click to see data dictionary"
"Connected to server!","Connected to server!"
"The {data_rv$info$project_title} project is loaded.","The {data_rv$info$project_title} project is loaded."
"Data dictionary","Data dictionary"
"Preview:","Preview:"
"Imported data set","Imported data set"
"Select fields/variables to import:","Select fields/variables to import:"
"Specify the data format","Specify the data format"
"Fill missing values?","Fill missing values?"
"Requested data was retrieved!","Requested data was retrieved!"
"Data retrieved, but it looks like only the ID was retrieved from the server. Please check with your REDCap administrator that you have required permissions for data access.","Data retrieved, but it looks like only the ID was retrieved from the server. Please check with your REDCap administrator that you have required permissions for data access."
"Data retrieved, but it looks like not all requested fields were retrieved from the server. Please check with your REDCap administrator that you have required permissions for data access.","Data retrieved, but it looks like not all requested fields were retrieved from the server. Please check with your REDCap administrator that you have required permissions for data access."
"Click to see the imported data","Click to see the imported data"
"Regression table","Regression table"
"Regression","Regression"
"Specify covariables","Specify covariables"
"If none are selected, all are included.","If none are selected, all are included."
"Analyse","Analyse"
"Working...","Working..."
"Press 'Analyse' to create the regression model and after changing parameters.","Press 'Analyse' to create the regression model and after changing parameters."
"Coefficient plot","Coefficient plot"
"Model checks","Model checks"
"Coefficients plot","Coefficients plot"
"Checks","Checks"
"Yes","Yes"
"No","No"
"Show p-value","Show p-value"
"Select outcome variable","Select outcome variable"
"Choose regression analysis","Choose regression analysis"
"Covariables to format as categorical","Covariables to format as categorical"
"Select variable to stratify baseline","Select variable to stratify baseline"
"Select models to plot","Select models to plot"
"Creating regression models failed with the following error:","Creating regression models failed with the following error:"
"Creating a regression table failed with the following error:","Creating a regression table failed with the following error:"
"Saving the plot. Hold on for a moment..","Saving the plot. Hold on for a moment.."
"Running model assumptions checks failed with the following error:","Running model assumptions checks failed with the following error:"
"Select checks to plot","Select checks to plot"
"Multivariable regression model checks","Multivariable regression model checks"
"www/intro.html","www/intro.html"
"www/intro.md","www/intro.md"
"Get started","Get started"
"Choose your data","Choose your data"
"Upload a file, get data directly from REDCap or use local or sample data.","Upload a file, get data directly from REDCap or use local or sample data."
"Please be mindfull handling sensitive data","Please be mindfull handling sensitive data"
"<p>The <em><strong>FreesearchR</strong></em> app only stores data for analyses, but please only use with sensitive data when running locally. <a href='https://agdamsbo.github.io/FreesearchR/#run-locally-on-your-own-machine'>Read more here</a></p>","<p>The <em><strong>FreesearchR</strong></em> app only stores data for analyses, but please only use with sensitive data when running locally. <a href='https://agdamsbo.github.io/FreesearchR/#run-locally-on-your-own-machine'>Read more here</a></p>"
"Quick overview","Quick overview"
"Select variables for final import","Select variables for final import"
"Exclude incomplete variables:","Exclude incomplete variables:"
"At 0, only complete variables are included; at 100, all variables are included.","At 0, only complete variables are included; at 100, all variables are included."
"Manual selection:","Manual selection:"
"Let's begin!","Let's begin!"
"Prepare","Prepare"
"Overview and filter","Overview and filter"
"Overview and filtering","Overview and filtering"
"Below you find a summary table for quick insigths, and on the right you can visualise data classes, browse observations and apply different data filters.","Below you find a summary table for quick insigths, and on the right you can visualise data classes, browse observations and apply different data filters."
"Visual overview","Visual overview"
"Browse observations","Browse observations"
"Filter data types","Filter data types"
"Filter observations","Filter observations"
"Apply filter on observation","Apply filter on observation"
"Edit and create data","Edit and create data"
"Subset, rename and convert variables","Subset, rename and convert variables"
"Below, are several options for simple data manipulation like update variables by renaming, creating new labels (for nicer tables in the report) and changing variable classes (numeric, factor/categorical etc.).","Below, are several options for simple data manipulation like update variables by renaming, creating new labels (for nicer tables in the report) and changing variable classes (numeric, factor/categorical etc.)."
"Please note that data modifications are applied before any filtering.","Please note that data modifications are applied before any filtering."
"Advanced data manipulation","Advanced data manipulation"
"Below options allow more advanced varaible manipulations.","Below options allow more advanced varaible manipulations."
"Reorder factor levels","Reorder factor levels"
"Reorder the levels of factor/categorical variables.","Reorder the levels of factor/categorical variables."
"New factor","New factor"
"Create factor/categorical variable from a continous variable (number/date/time).","Create factor/categorical variable from a continous variable (number/date/time)."
"New variable","New variable"
"Create a new variable based on an R-expression.","Create a new variable based on an R-expression."
"Compare modified data to original","Compare modified data to original"
"Raw print of the original vs the modified data.","Raw print of the original vs the modified data."
"Original data:","Original data:"
"Modified data:","Modified data:"
"Restore original data","Restore original data"
"Reset to original imported dataset. Careful! There is no un-doing.","Reset to original imported dataset. Careful! There is no un-doing."
"Evaluate","Evaluate"
"Characteristics","Characteristics"
"Only factor/categorical variables are available for stratification. Go back to the 'Prepare' tab to reclass a variable if it's not on the list.","Only factor/categorical variables are available for stratification. Go back to the 'Prepare' tab to reclass a variable if it's not on the list."
"Compare strata?","Compare strata?"
"Option to perform statistical comparisons between strata in baseline table.","Option to perform statistical comparisons between strata in baseline table."
"Press 'Evaluate' to create the comparison table.","Press 'Evaluate' to create the comparison table."
"Correlations","Correlations"
"To avoid evaluating the correlation of the outcome variable, this can be excluded from the plot or select 'none'.","To avoid evaluating the correlation of the outcome variable, this can be excluded from the plot or select 'none'."
"Correlation cut-off","Correlation cut-off"
"Set the cut-off for considered 'highly correlated'.","Set the cut-off for considered 'highly correlated'."
"Missings","Missings"
"Visuals","Visuals"
"Analysis validation","Analysis validation"
"Report","Report"
"Choose your favourite output file format for further work, and download, when the analyses are done.","Choose your favourite output file format for further work, and download, when the analyses are done."
"Factor variable to reorder:","Factor variable to reorder:"
"Sort by levels","Sort by levels"
"Sort by count","Sort by count"
"Create a new variable (otherwise replaces the one selected)","Create a new variable (otherwise replaces the one selected)"
"Update factor variable","Update factor variable"
"Sort count","Sort count"
"Levels","Levels"
"Count","Count"
"Update levels of a factor","Update levels of a factor"
"Update & select variables","Update & select variables"
"Date format:","Date format:"
"Date to use as origin to convert date/datetime:","Date to use as origin to convert date/datetime:"
"Apply changes","Apply changes"
"No data to display.","No data to display."
"Data successfully updated!","Data successfully updated!"
"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."
"Data includes {n_pairs} pairs of highly correlated variables.","Data includes {n_pairs} pairs of highly correlated variables."
"Class","Class"
"Observations","Observations"
"File upload","File upload"
"REDCap server export","REDCap server export"
"Local or sample data","Local or sample data"
"Data is only stored for analyses and deleted when the app is closed.","Data is only stored for analyses and deleted when the app is closed."
"Consider [running ***FreesearchR*** locally](https://agdamsbo.github.io/FreesearchR/#run-locally-on-your-own-machine) if working with sensitive data.","Consider [running ***FreesearchR*** locally](https://agdamsbo.github.io/FreesearchR/#run-locally-on-your-own-machine) if working with sensitive data."
"Documentation","Documentation"
"Feedback","Feedback"
"License: AGPLv3","License: AGPLv3"
"Source","Source"
"Settings","Settings"
"The ***FreesearchR*** app only stores data for analyses, but please only use with sensitive data when running locally. [Read more here](https://agdamsbo.github.io/FreesearchR/#run-locally-on-your-own-machine).","The ***FreesearchR*** app only stores data for analyses, but please only use with sensitive data when running locally. [Read more here](https://agdamsbo.github.io/FreesearchR/#run-locally-on-your-own-machine)."
"Data classes and missing observations","Data classes and missing observations"
"We encountered the following error showing missingness:","We encountered the following error showing missingness:"
"Please confirm data reset!","Please confirm data reset!"
"Sure you want to reset data? This cannot be undone.","Sure you want to reset data? This cannot be undone."
"Confirm","Confirm"
"The filtered data","The filtered data"
"Create new factor","Create new factor"
"This window is aimed at advanced users and require some *R*-experience!","This window is aimed at advanced users and require some *R*-experience!"
"Create new variables","Create new variables"
"Select data types to include","Select data types to include"
"Uploaded data overview","Uploaded data overview"
"We encountered the following error browsing your data:","We encountered the following error browsing your data:"
"Here is an overview of how your data is interpreted, and where data is missing. Use this information to consider if data is missing at random or if some observations are missing systematically wich may be caused by an observation bias.","Here is an overview of how your data is interpreted, and where data is missing. Use this information to consider if data is missing at random or if some observations are missing systematically wich may be caused by an observation bias."
"Data import","Data import"
"Data import formatting","Data import formatting"
"Data modifications","Data modifications"
"Variables filter","Variables filter"
"Data filter","Data filter"
"Data characteristics table","Data characteristics table"
"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.."
"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."
"Text or character to split string by","Text or character to split string by"
"Split the variable","Split the variable"
"Variable to split:","Variable to split:"
"Direction:","Direction:"
"Split string to multiple columns. Keep number of rows.","Split string to multiple columns. Keep number of rows."
"Split string to multiple observations (rows) in the same column. Also ads id and instance columns","Split string to multiple observations (rows) in the same column. Also ads id and instance columns"
"Split character string","Split character string"
"Split text","Split text"
"Split a character string by a common delimiter","Split a character string by a common delimiter"
"Select delimiter","Select delimiter"
"Browse data preview","Browse data preview"
"Original data","Original data"
"Preview of result","Preview of result"
"No character variables with accepted delimiters detected.","No character variables with accepted delimiters detected."
"Split a text column by a recognised delimiter.","Split a text column by a recognised delimiter."
"Apply split","Apply split"
"Stacked relative barplot","Stacked relative barplot"
"Create relative stacked barplots to show the distribution of categorical levels","Create relative stacked barplots to show the distribution of categorical levels"
"Side-by-side barplot","Side-by-side barplot"
"Create side-by-side barplot to show the distribution of categorical levels","Create side-by-side barplot to show the distribution of categorical levels"
"Select table theme","Select table theme"
"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"
1 en sv
2 Hello Hei
3 The following variable pairs are highly correlated: {sentence_paste(.x,and_str)}.\nConsider excluding one {more}from the dataset to ensure variables are independent. The following variable pairs are highly correlated: {sentence_paste(.x,and_str)}.\nConsider excluding one {more}from the dataset to ensure variables are independent.
4 No variables have a correlation measure above the threshold. No variables have a correlation measure above the threshold.
5 and and
6 The following error occured on determining correlations: The following error occured on determining correlations:
7 from each pair from each pair
8 New column name: New column name:
9 Group calculation by: Group calculation by:
10 Enter an expression to define new column: Enter an expression to define new column:
11 Click on a column name to add it to the expression: Click on a column name to add it to the expression:
12 Create column Create column
13 Cancel Cancel
14 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.
15 New column name cannot be empty New column name cannot be empty
16 Create a new column Create a new column
17 Some operations are not allowed Some operations are not allowed
18 Column added! Column added!
19 Unique values: Unique values:
20 Variable to cut: Variable to cut:
21 Close intervals on the right Close intervals on the right
22 Include lowest value Include lowest value
23 Create factor variable Create factor variable
24 Fixed breaks: Fixed breaks:
25 Method: Method:
26 Other Other
27 Convert Numeric to Factor Convert Numeric to Factor
28 Hour of the day Hour of the day
29 Breaks Breaks
30 By day of the week By day of the week
31 By weekday By weekday
32 By week number and year By week number and year
33 By week number By week number
34 By month and year By month and year
35 By month only By month only
36 By quarter of the year By quarter of the year
37 By year By year
38 Keep only most common Keep only most common
39 Number Number
40 Combine below percentage Combine below percentage
41 Percentage Percentage
42 By specified numbers By specified numbers
43 By quantiles (groups of equal size) By quantiles (groups of equal size)
44 Only non-text variables are available for plotting. Go the "Data" to reclass data to plot. Only non-text variables are available for plotting. Go the "Data" to reclass data to plot.
45 Plot Plot
46 Adjust settings, then press "Plot". Adjust settings, then press "Plot".
47 Plot height (mm) Plot height (mm)
48 Plot width (mm) Plot width (mm)
49 File format File format
50 Download plot Download plot
51 Create plot Create plot
52 Download Download
53 Select variable Select variable
54 Response variable Response variable
55 Plot type Plot type
56 Please select Please select
57 Additional variables Additional variables
58 Secondary variable Secondary variable
59 No variable No variable
60 Grouping variable Grouping variable
61 No stratification No stratification
62 Drawing the plot. Hold tight for a moment.. Drawing the plot. Hold tight for a moment..
63 #Plotting\n #Plotting\n
64 Stacked horizontal bars Stacked horizontal bars
65 A classical way of visualising the distribution of an ordinal scale like the modified Ranking Scale and known as Grotta bars A classical way of visualising the distribution of an ordinal scale like the modified Ranking Scale and known as Grotta bars
66 Violin plot Violin plot
67 A modern alternative to the classic boxplot to visualise data distribution A modern alternative to the classic boxplot to visualise data distribution
68 Sankey plot Sankey plot
69 A way of visualising change between groups A way of visualising change between groups
70 Scatter plot Scatter plot
71 A classic way of showing the association between to variables A classic way of showing the association between to variables
72 Box plot Box plot
73 A classic way to plot data distribution by groups A classic way to plot data distribution by groups
74 Euler diagram Euler diagram
75 Generate area-proportional Euler diagrams to display set relationships Generate area-proportional Euler diagrams to display set relationships
76 Unique: Unique:
77 Missing: Missing:
78 Most Common: Most Common:
79 Min: Min:
80 Mean: Mean:
81 Median: Median:
82 Max: Max:
83 {data_text} has {n} observations and {n_var} variables, with {n_complete} ({p_complete} %) complete cases. {data_text} has {n} observations and {n_var} variables, with {n_complete} ({p_complete} %) complete cases.
84 Import a dataset from an environment Import a dataset from an environment
85 Select a data source: Select a data source:
86 Select source Select source
87 Select a dataset: Select a dataset:
88 List of datasets... List of datasets...
89 No data selected! No data selected!
90 Use a dataset from your environment or from the environment of a package. Use a dataset from your environment or from the environment of a package.
91 No dataset here... No dataset here...
92 Imported data Imported data
93 Not a data.frame Not a data.frame
94 Rows to skip before reading data: Rows to skip before reading data:
95 Missing values character(s): Missing values character(s):
96 if several use a comma (',') to separate them if several use a comma (',') to separate them
97 Decimal separator: Decimal separator:
98 Encoding: Encoding:
99 Upload a file: Upload a file:
100 Browse... Browse...
101 Select sheet to import: Select sheet to import:
102 No file selected. No file selected.
103 You can choose between these file types: You can choose between these file types:
104 You can import {file_extensions_text} files You can import {file_extensions_text} files
105 First five rows are shown below: First five rows are shown below:
106 No missing observations No missing observations
107 Grouped by {get_label(data,ter)} Grouped by {get_label(data,ter)}
108 Import data from REDCap Import data from REDCap
109 REDCap server REDCap server
110 Web address Web address
111 Format should be either 'https://redcap.your.institution/' or 'https://your.institution/redcap/' Format should be either 'https://redcap.your.institution/' or 'https://your.institution/redcap/'
112 API token API token
113 The token is a string of 32 numbers and letters. The token is a string of 32 numbers and letters.
114 Connect Connect
115 Please fill in web address and API token, then press 'Connect'. Please fill in web address and API token, then press 'Connect'.
116 Data import parameters Data import parameters
117 Select fields/variables to import and click the funnel to apply optional filters Select fields/variables to import and click the funnel to apply optional filters
118 Import Import
119 Click to see data dictionary Click to see data dictionary
120 Connected to server! Connected to server!
121 The {data_rv$info$project_title} project is loaded. The {data_rv$info$project_title} project is loaded.
122 Data dictionary Data dictionary
123 Preview: Preview:
124 Imported data set Imported data set
125 Select fields/variables to import: Select fields/variables to import:
126 Specify the data format Specify the data format
127 Fill missing values? Fill missing values?
128 Requested data was retrieved! Requested data was retrieved!
129 Data retrieved, but it looks like only the ID was retrieved from the server. Please check with your REDCap administrator that you have required permissions for data access. Data retrieved, but it looks like only the ID was retrieved from the server. Please check with your REDCap administrator that you have required permissions for data access.
130 Data retrieved, but it looks like not all requested fields were retrieved from the server. Please check with your REDCap administrator that you have required permissions for data access. Data retrieved, but it looks like not all requested fields were retrieved from the server. Please check with your REDCap administrator that you have required permissions for data access.
131 Click to see the imported data Click to see the imported data
132 Regression table Regression table
133 Regression Regression
134 Specify covariables Specify covariables
135 If none are selected, all are included. If none are selected, all are included.
136 Analyse Analyse
137 Working... Working...
138 Press 'Analyse' to create the regression model and after changing parameters. Press 'Analyse' to create the regression model and after changing parameters.
139 Coefficient plot Coefficient plot
140 Model checks Model checks
141 Coefficients plot Coefficients plot
142 Checks Checks
143 Yes Yes
144 No No
145 Show p-value Show p-value
146 Select outcome variable Select outcome variable
147 Choose regression analysis Choose regression analysis
148 Covariables to format as categorical Covariables to format as categorical
149 Select variable to stratify baseline Select variable to stratify baseline
150 Select models to plot Select models to plot
151 Creating regression models failed with the following error: Creating regression models failed with the following error:
152 Creating a regression table failed with the following error: Creating a regression table failed with the following error:
153 Saving the plot. Hold on for a moment.. Saving the plot. Hold on for a moment..
154 Running model assumptions checks failed with the following error: Running model assumptions checks failed with the following error:
155 Select checks to plot Select checks to plot
156 Multivariable regression model checks Multivariable regression model checks
157 www/intro.html www/intro.html
158 www/intro.md www/intro.md
159 Get started Get started
160 Choose your data Choose your data
161 Upload a file, get data directly from REDCap or use local or sample data. Upload a file, get data directly from REDCap or use local or sample data.
162 Please be mindfull handling sensitive data Please be mindfull handling sensitive data
163 <p>The <em><strong>FreesearchR</strong></em> app only stores data for analyses, but please only use with sensitive data when running locally. <a href='https://agdamsbo.github.io/FreesearchR/#run-locally-on-your-own-machine'>Read more here</a></p> <p>The <em><strong>FreesearchR</strong></em> app only stores data for analyses, but please only use with sensitive data when running locally. <a href='https://agdamsbo.github.io/FreesearchR/#run-locally-on-your-own-machine'>Read more here</a></p>
164 Quick overview Quick overview
165 Select variables for final import Select variables for final import
166 Exclude incomplete variables: Exclude incomplete variables:
167 At 0, only complete variables are included; at 100, all variables are included. At 0, only complete variables are included; at 100, all variables are included.
168 Manual selection: Manual selection:
169 Let's begin! Let's begin!
170 Prepare Prepare
171 Overview and filter Overview and filter
172 Overview and filtering Overview and filtering
173 Below you find a summary table for quick insigths, and on the right you can visualise data classes, browse observations and apply different data filters. Below you find a summary table for quick insigths, and on the right you can visualise data classes, browse observations and apply different data filters.
174 Visual overview Visual overview
175 Browse observations Browse observations
176 Filter data types Filter data types
177 Filter observations Filter observations
178 Apply filter on observation Apply filter on observation
179 Edit and create data Edit and create data
180 Subset, rename and convert variables Subset, rename and convert variables
181 Below, are several options for simple data manipulation like update variables by renaming, creating new labels (for nicer tables in the report) and changing variable classes (numeric, factor/categorical etc.). Below, are several options for simple data manipulation like update variables by renaming, creating new labels (for nicer tables in the report) and changing variable classes (numeric, factor/categorical etc.).
182 Please note that data modifications are applied before any filtering. Please note that data modifications are applied before any filtering.
183 Advanced data manipulation Advanced data manipulation
184 Below options allow more advanced varaible manipulations. Below options allow more advanced varaible manipulations.
185 Reorder factor levels Reorder factor levels
186 Reorder the levels of factor/categorical variables. Reorder the levels of factor/categorical variables.
187 New factor New factor
188 Create factor/categorical variable from a continous variable (number/date/time). Create factor/categorical variable from a continous variable (number/date/time).
189 New variable New variable
190 Create a new variable based on an R-expression. Create a new variable based on an R-expression.
191 Compare modified data to original Compare modified data to original
192 Raw print of the original vs the modified data. Raw print of the original vs the modified data.
193 Original data: Original data:
194 Modified data: Modified data:
195 Restore original data Restore original data
196 Reset to original imported dataset. Careful! There is no un-doing. Reset to original imported dataset. Careful! There is no un-doing.
197 Evaluate Evaluate
198 Characteristics Characteristics
199 Only factor/categorical variables are available for stratification. Go back to the 'Prepare' tab to reclass a variable if it's not on the list. Only factor/categorical variables are available for stratification. Go back to the 'Prepare' tab to reclass a variable if it's not on the list.
200 Compare strata? Compare strata?
201 Option to perform statistical comparisons between strata in baseline table. Option to perform statistical comparisons between strata in baseline table.
202 Press 'Evaluate' to create the comparison table. Press 'Evaluate' to create the comparison table.
203 Correlations Correlations
204 To avoid evaluating the correlation of the outcome variable, this can be excluded from the plot or select 'none'. To avoid evaluating the correlation of the outcome variable, this can be excluded from the plot or select 'none'.
205 Correlation cut-off Correlation cut-off
206 Set the cut-off for considered 'highly correlated'. Set the cut-off for considered 'highly correlated'.
207 Missings Missings
208 Visuals Visuals
209 Analysis validation Analysis validation
210 Report Report
211 Choose your favourite output file format for further work, and download, when the analyses are done. Choose your favourite output file format for further work, and download, when the analyses are done.
212 Factor variable to reorder: Factor variable to reorder:
213 Sort by levels Sort by levels
214 Sort by count Sort by count
215 Create a new variable (otherwise replaces the one selected) Create a new variable (otherwise replaces the one selected)
216 Update factor variable Update factor variable
217 Sort count Sort count
218 Levels Levels
219 Count Count
220 Update levels of a factor Update levels of a factor
221 Update & select variables Update & select variables
222 Date format: Date format:
223 Date to use as origin to convert date/datetime: Date to use as origin to convert date/datetime:
224 Apply changes Apply changes
225 No data to display. No data to display.
226 Data successfully updated! Data successfully updated!
227 You removed {p_out} % of observations. You removed {p_out} % of observations.
228 You removed {p_out} % of variables. You removed {p_out} % of variables.
229 There is a total of {p_miss} % missing observations. There is a total of {p_miss} % missing observations.
230 Data includes {n_pairs} pairs of highly correlated variables. Data includes {n_pairs} pairs of highly correlated variables.
231 Class Class
232 Observations Observations
233 File upload File upload
234 REDCap server export REDCap server export
235 Local or sample data Local or sample data
236 Data is only stored for analyses and deleted when the app is closed. Data is only stored for analyses and deleted when the app is closed.
237 Consider [running ***FreesearchR*** locally](https://agdamsbo.github.io/FreesearchR/#run-locally-on-your-own-machine) if working with sensitive data. Consider [running ***FreesearchR*** locally](https://agdamsbo.github.io/FreesearchR/#run-locally-on-your-own-machine) if working with sensitive data.
238 Documentation Documentation
239 Feedback Feedback
240 License: AGPLv3 License: AGPLv3
241 Source Source
242 Settings Settings
243 The ***FreesearchR*** app only stores data for analyses, but please only use with sensitive data when running locally. [Read more here](https://agdamsbo.github.io/FreesearchR/#run-locally-on-your-own-machine). The ***FreesearchR*** app only stores data for analyses, but please only use with sensitive data when running locally. [Read more here](https://agdamsbo.github.io/FreesearchR/#run-locally-on-your-own-machine).
244 Data classes and missing observations Data classes and missing observations
245 We encountered the following error showing missingness: We encountered the following error showing missingness:
246 Please confirm data reset! Please confirm data reset!
247 Sure you want to reset data? This cannot be undone. Sure you want to reset data? This cannot be undone.
248 Confirm Confirm
249 The filtered data The filtered data
250 Create new factor Create new factor
251 This window is aimed at advanced users and require some *R*-experience! This window is aimed at advanced users and require some *R*-experience!
252 Create new variables Create new variables
253 Select data types to include Select data types to include
254 Uploaded data overview Uploaded data overview
255 We encountered the following error browsing your data: We encountered the following error browsing your data:
256 Here is an overview of how your data is interpreted, and where data is missing. Use this information to consider if data is missing at random or if some observations are missing systematically wich may be caused by an observation bias. Here is an overview of how your data is interpreted, and where data is missing. Use this information to consider if data is missing at random or if some observations are missing systematically wich may be caused by an observation bias.
257 Data import Data import
258 Data import formatting Data import formatting
259 Data modifications Data modifications
260 Variables filter Variables filter
261 Data filter Data filter
262 Data characteristics table Data characteristics table
263 The dataset without text variables The dataset without text variables
264 The data includes {n_col} variables. Please limit to 100. The data includes {n_col} variables. Please limit to 100.
265 Creating the table. Hold on for a moment.. Creating the table. Hold on for a moment..
266 Generating the report. Hold on for a moment.. Generating the report. Hold on for a moment..
267 We encountered the following error creating your report: We encountered the following error creating your report:
268 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.
269 Text or character to split string by Text or character to split string by
270 Split the variable Split the variable
271 Variable to split: Variable to split:
272 Direction: Direction:
273 Split string to multiple columns. Keep number of rows. Split string to multiple columns. Keep number of rows.
274 Split string to multiple observations (rows) in the same column. Also ads id and instance columns Split string to multiple observations (rows) in the same column. Also ads id and instance columns
275 Split character string Split character string
276 Split text Split text
277 Split a character string by a common delimiter Split a character string by a common delimiter
278 Select delimiter Select delimiter
279 Browse data preview Browse data preview
280 Original data Original data
281 Preview of result Preview of result
282 No character variables with accepted delimiters detected. No character variables with accepted delimiters detected.
283 Split a text column by a recognised delimiter. Split a text column by a recognised delimiter.
284 Apply split Apply split
285 Stacked relative barplot Stacked relative barplot
286 Create relative stacked barplots to show the distribution of categorical levels Create relative stacked barplots to show the distribution of categorical levels
287 Side-by-side barplot Side-by-side barplot
288 Create side-by-side barplot to show the distribution of categorical levels Create side-by-side barplot to show the distribution of categorical levels
289 Select table theme Select table theme
290 Level of detail Level of detail
291 Minimal Minimal
292 Extensive Extensive
293 Letters Letters
294 Words Words
295 Shorten to first letters Shorten to first letters
296 Shorten to first words Shorten to first words
297 Missings across variables by the variable **'{input$missings_var}'** Missings across variables by the variable **'{input$missings_var}'**
298 Missing vs non-missing observations in the variable **'{input$missings_var}'** Missing vs non-missing observations in the variable **'{input$missings_var}'**
299 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.
300 Calculating. Hold tight for a moment.. Calculating. Hold tight for a moment..
301 Overview of missing observations Overview of missing observations
302 Analysis method for missingness overview Analysis method for missingness overview
303 Overview of missings across variables Overview of missings across variables
304 Overview of difference in variables by missing status in outcome Overview of difference in variables by missing status in outcome
305 Select a variable for grouped overview Select a variable for grouped overview
306 Select outcome variable for overview Select outcome variable for overview
307 No outcome measure chosen No outcome measure chosen
308 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}.
309 Include group differences Include group differences
310 Error: Error:
311 Download table Download table

View file

@ -49,6 +49,7 @@
"Column added!","Column added!" "Column added!","Column added!"
"Unique values:","Unique values:" "Unique values:","Unique values:"
"Variable to cut:","Variable to cut:" "Variable to cut:","Variable to cut:"
"Number of breaks:","Number of breaks:"
"Close intervals on the right","Close intervals on the right" "Close intervals on the right","Close intervals on the right"
"Include lowest value","Include lowest value" "Include lowest value","Include lowest value"
"Create factor variable","Create factor variable" "Create factor variable","Create factor variable"
@ -150,7 +151,10 @@
"Settings","Settings" "Settings","Settings"
"The following error occured on determining correlations:","The following error occured on determining correlations:" "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:" "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" "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." "There is a total of {p_miss} % missing observations.","There is a total of {p_miss} % missing observations."
"Median:","Median:" "Median:","Median:"
"Restore original data","Restore original data" "Restore original data","Restore original data"
@ -243,9 +247,11 @@
"Data characteristics table","Data characteristics table" "Data characteristics table","Data characteristics table"
"The dataset without text variables","The dataset without text variables" "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.." "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.." "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 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:" "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." "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" "Other","Other"
"Hour of the day","Hour of the day" "Hour of the day","Hour of the day"
@ -266,46 +272,3 @@
"By quantiles (groups of equal size)","By quantiles (groups of equal size)" "By quantiles (groups of equal size)","By quantiles (groups of equal size)"
"Please fill in web address and API token, then press 'Connect'.","Please fill in web address and API token, then press 'Connect'." "Please fill in web address and API token, then press 'Connect'.","Please fill in web address and API token, then press 'Connect'."
"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." "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."
"Text or character to split string by","Text or character to split string by"
"Split the variable","Split the variable"
"Variable to split:","Variable to split:"
"Direction:","Direction:"
"Split string to multiple columns. Keep number of rows.","Split string to multiple columns. Keep number of rows."
"Split string to multiple observations (rows) in the same column. Also ads id and instance columns","Split string to multiple observations (rows) in the same column. Also ads id and instance columns"
"Split character string","Split character string"
"Split text","Split text"
"Split a character string by a common delimiter","Split a character string by a common delimiter"
"Select delimiter","Select delimiter"
"Browse data preview","Browse data preview"
"Original data","Original data"
"Preview of result","Preview of result"
"No character variables with accepted delimiters detected.","No character variables with accepted delimiters detected."
"Split a text column by a recognised delimiter.","Split a text column by a recognised delimiter."
"Apply split","Apply split"
"Stacked relative barplot","Stacked relative barplot"
"Create relative stacked barplots to show the distribution of categorical levels","Create relative stacked barplots to show the distribution of categorical levels"
"Side-by-side barplot","Side-by-side barplot"
"Create side-by-side barplot to show the distribution of categorical levels","Create side-by-side barplot to show the distribution of categorical levels"
"Select table theme","Select table theme"
"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"

1 en sw
49 Column added! Column added!
50 Unique values: Unique values:
51 Variable to cut: Variable to cut:
52 Number of breaks: Number of breaks:
53 Close intervals on the right Close intervals on the right
54 Include lowest value Include lowest value
55 Create factor variable Create factor variable
151 Settings Settings
152 The following error occured on determining correlations: The following error occured on determining correlations:
153 We encountered the following error creating your report: We encountered the following error creating your report:
154 No variable chosen for analysis No variable chosen for analysis
155 No missing observations No missing observations
156 Missing vs non-missing observations in the variable **'{variabler()}'** Missing vs non-missing observations in the variable **'{variabler()}'**
157 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}.
158 There is a total of {p_miss} % missing observations. There is a total of {p_miss} % missing observations.
159 Median: Median:
160 Restore original data Restore original data
247 Data characteristics table Data characteristics table
248 The dataset without text variables The dataset without text variables
249 Creating the table. Hold on for a moment.. Creating the table. Hold on for a moment..
250 Select variable to stratify analysis Select variable to stratify analysis
251 Generating the report. Hold on for a moment.. Generating the report. Hold on for a moment..
252 We encountered the following error showing missingness: We encountered the following error showing missingness:
253 We encountered the following error browsing your data: We encountered the following error browsing your data:
254 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.
255 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.
256 Other Other
257 Hour of the day Hour of the day
272 By quantiles (groups of equal size) By quantiles (groups of equal size)
273 Please fill in web address and API token, then press 'Connect'. Please fill in web address and API token, then press 'Connect'.
274 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.
Text or character to split string by Text or character to split string by
Split the variable Split the variable
Variable to split: Variable to split:
Direction: Direction:
Split string to multiple columns. Keep number of rows. Split string to multiple columns. Keep number of rows.
Split string to multiple observations (rows) in the same column. Also ads id and instance columns Split string to multiple observations (rows) in the same column. Also ads id and instance columns
Split character string Split character string
Split text Split text
Split a character string by a common delimiter Split a character string by a common delimiter
Select delimiter Select delimiter
Browse data preview Browse data preview
Original data Original data
Preview of result Preview of result
No character variables with accepted delimiters detected. No character variables with accepted delimiters detected.
Split a text column by a recognised delimiter. Split a text column by a recognised delimiter.
Apply split Apply split
Stacked relative barplot Stacked relative barplot
Create relative stacked barplots to show the distribution of categorical levels Create relative stacked barplots to show the distribution of categorical levels
Side-by-side barplot Side-by-side barplot
Create side-by-side barplot to show the distribution of categorical levels Create side-by-side barplot to show the distribution of categorical levels
Select table theme Select table theme
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

View file

@ -91,12 +91,3 @@ $(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.';
// });

View file

@ -1,54 +0,0 @@
library(shiny)
library(reactable)
ui <- fluidPage(
theme = bslib::bs_theme(version = 5L, preset = "bootstrap"),
shinyWidgets::html_dependency_winbox(),
tags$h2("Split string"),
fluidRow(
column(
width = 4,
actionButton("modal", "Or click here to open a modal to create a column")
),
column(
width = 8,
reactableOutput(outputId = "table"),
verbatimTextOutput("code")
)
)
)
server <- function(input, output, session) {
rv <- reactiveValues(
data = MASS::Cars93[, c(1, 3, 4, 5, 6, 10)],
out = NULL
)
# modal window mode
observeEvent(input$modal, modal_string_split("modal"))
rv$out <- create_column_server(
id = "modal",
data_r = reactive(rv$data)
)
# Show result
output$table <- renderReactable({
data <- req(rv$data)
reactable(
data = data,
bordered = TRUE,
compact = TRUE,
striped = TRUE
)
})
output$code <- renderPrint({
attr(rv$data, "code")
})
}
if (interactive()) {
shinyApp(ui, server)
}

File diff suppressed because it is too large Load diff

View file

@ -91,12 +91,3 @@ $(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.';
// });

View file

@ -91,12 +91,3 @@ $(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.';
// });

View file

@ -49,6 +49,7 @@
"Column added!","Variabel oprettet!" "Column added!","Variabel oprettet!"
"Unique values:","Unikke værdier:" "Unique values:","Unikke værdier:"
"Variable to cut:","Variabel, der skal deles:" "Variable to cut:","Variabel, der skal deles:"
"Number of breaks:","Antal niveauer:"
"Close intervals on the right","Luk intervaller til højre" "Close intervals on the right","Luk intervaller til højre"
"Include lowest value","Inkluderer den laveste værdi" "Include lowest value","Inkluderer den laveste værdi"
"Create factor variable","Opret kategorisk variabel" "Create factor variable","Opret kategorisk variabel"
@ -150,7 +151,10 @@
"Settings","Indstillinger" "Settings","Indstillinger"
"The following error occured on determining correlations:","Følgende fejl opstod i forbindelse med korrelationsanalysen:" "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:" "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" "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." "There is a total of {p_miss} % missing observations.","Der er i alt {p_miss} % manglende observationer."
"Median:","Median:" "Median:","Median:"
"Restore original data","Gendan originale data" "Restore original data","Gendan originale data"
@ -243,69 +247,28 @@
"Data characteristics table","Oversigtstabel" "Data characteristics table","Oversigtstabel"
"The dataset without text variables","Datasættet uden variabler formateret som tekst" "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.." "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.." "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 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:" "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." "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'." "Please fill in web address and API token, then press 'Connect'.","Udfyld serveradresse og API-nøgle, og tryk så 'Fobind'."
"Other","Other" "Other","Other"
"Hour of the day","Time på dagen" "Hour of the day","Hour of the day"
"Breaks","Grupper" "Breaks","Breaks"
"By day of the week","Efter ugedag" "By day of the week","By day of the week"
"By weekday","Efter ugedag" "By weekday","By weekday"
"By week number and year","Efter ugenummer og årstal" "By week number and year","By week number and year"
"By month and year","Efter måned og årstal" "By month and year","By month and year"
"By month only","Efter måned alene" "By month only","By month only"
"By quarter of the year","Efter kvartal" "By quarter of the year","By quarter of the year"
"By year","Efter år" "By year","By year"
"Keep only most common","Behold kun de hyppigste" "Keep only most common","Keep only most common"
"Number","Antal" "Number","Number"
"Combine below percentage","Kombiner under procentsats" "Combine below percentage","Combine below percentage"
"Percentage","Procentsats" "Percentage","Percentage"
"By specified numbers","Efter specifikke værdier" "By specified numbers","By specified numbers"
"By quantiles (groups of equal size)","I grupper af samme størrelse" "By quantiles (groups of equal size)","By quantiles (groups of equal size)"
"By week number","Efter ugenummer alene" "By week number","By week number"
"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.","Der er mere avancerede muligheder for at ændre kategoriske variable, oprette nye kategoriske variabler fra eksisterende data eller nye variable baseret på R-kode. Nederst kan du gendanne originale 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.","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."
"Split the variable","Split the variable"
"Original data","Original data"
"Preview of result","Preview of result"
"No character variables with accepted delimiters detected.","No character variables with accepted delimiters detected."
"Variable to split:","Variable to split:"
"Text or character to split string by","Text or character to split string by"
"Select delimiter","Select delimiter"
"Direction:","Direction:"
"Split string to multiple columns. Keep number of rows.","Split string to multiple columns. Keep number of rows."
"Split string to multiple observations (rows) in the same column. Also ads id and instance columns","Split string to multiple observations (rows) in the same column. Also ads id and instance columns"
"Browse data preview","Browse data preview"
"Split character string","Split character string"
"Split text","Split text"
"Split a text column by a recognised delimiter.","Split a text column by a recognised delimiter."
"Split a character string by a common delimiter","Split a character string by a common delimiter"
"Apply split","Apply split"
"Stacked relative barplot","Stacked relative barplot"
"Create relative stacked barplots to show the distribution of categorical levels","Create relative stacked barplots to show the distribution of categorical levels"
"Side-by-side barplot","Side-by-side barplot"
"Create side-by-side barplot to show the distribution of categorical levels","Create side-by-side barplot to show the distribution of categorical levels"
"Select table theme","Select table theme"
"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"

1 en da
49 Column added! Variabel oprettet!
50 Unique values: Unikke værdier:
51 Variable to cut: Variabel, der skal deles:
52 Number of breaks: Antal niveauer:
53 Close intervals on the right Luk intervaller til højre
54 Include lowest value Inkluderer den laveste værdi
55 Create factor variable Opret kategorisk variabel
151 Settings Indstillinger
152 The following error occured on determining correlations: Følgende fejl opstod i forbindelse med korrelationsanalysen:
153 We encountered the following error creating your report: Følgende fejl opstod, da rapporten blev dannet:
154 No variable chosen for analysis Ingen variabel er valgt til analysen
155 No missing observations Ingen manglende observationer
156 Missing vs non-missing observations in the variable **'{variabler()}'** Manglende vs ikke-manglende observationer i variablen **'{variabler()}'**
157 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}.
158 There is a total of {p_miss} % missing observations. Der er i alt {p_miss} % manglende observationer.
159 Median: Median:
160 Restore original data Gendan originale data
247 Data characteristics table Oversigtstabel
248 The dataset without text variables Datasættet uden variabler formateret som tekst
249 Creating the table. Hold on for a moment.. Opretter tabellen. Vent et øjeblik..
250 Select variable to stratify analysis Vælg variabler til at stratificere analysen
251 Generating the report. Hold on for a moment.. Opretter rapporten. Vent et øjeblik..
252 We encountered the following error showing missingness: Under analysen af manglende observationer opstod følgende fejl:
253 We encountered the following error browsing your data: I forsøget på at vise en dataoversigt opstod følgende fejl:
254 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.
255 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.
256 Please fill in web address and API token, then press 'Connect'. Udfyld serveradresse og API-nøgle, og tryk så 'Fobind'.
257 Other Other
258 Hour of the day Time på dagen Hour of the day
259 Breaks Grupper Breaks
260 By day of the week Efter ugedag By day of the week
261 By weekday Efter ugedag By weekday
262 By week number and year Efter ugenummer og årstal By week number and year
263 By month and year Efter måned og årstal By month and year
264 By month only Efter måned alene By month only
265 By quarter of the year Efter kvartal By quarter of the year
266 By year Efter år By year
267 Keep only most common Behold kun de hyppigste Keep only most common
268 Number Antal Number
269 Combine below percentage Kombiner under procentsats Combine below percentage
270 Percentage Procentsats Percentage
271 By specified numbers Efter specifikke værdier By specified numbers
272 By quantiles (groups of equal size) I grupper af samme størrelse By quantiles (groups of equal size)
273 By week number Efter ugenummer alene By week number
274 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. Der er mere avancerede muligheder for at ændre kategoriske variable, oprette nye kategoriske variabler fra eksisterende data eller nye variable baseret på R-kode. Nederst kan du gendanne originale 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.
Split the variable Split the variable
Original data Original data
Preview of result Preview of result
No character variables with accepted delimiters detected. No character variables with accepted delimiters detected.
Variable to split: Variable to split:
Text or character to split string by Text or character to split string by
Select delimiter Select delimiter
Direction: Direction:
Split string to multiple columns. Keep number of rows. Split string to multiple columns. Keep number of rows.
Split string to multiple observations (rows) in the same column. Also ads id and instance columns Split string to multiple observations (rows) in the same column. Also ads id and instance columns
Browse data preview Browse data preview
Split character string Split character string
Split text Split text
Split a text column by a recognised delimiter. Split a text column by a recognised delimiter.
Split a character string by a common delimiter Split a character string by a common delimiter
Apply split Apply split
Stacked relative barplot Stacked relative barplot
Create relative stacked barplots to show the distribution of categorical levels Create relative stacked barplots to show the distribution of categorical levels
Side-by-side barplot Side-by-side barplot
Create side-by-side barplot to show the distribution of categorical levels Create side-by-side barplot to show the distribution of categorical levels
Select table theme Select table theme
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

View file

@ -18,6 +18,7 @@
"Column added!","Column added!" "Column added!","Column added!"
"Unique values:","Unique values:" "Unique values:","Unique values:"
"Variable to cut:","Variable to cut:" "Variable to cut:","Variable to cut:"
"Number of breaks:","Number of breaks:"
"Close intervals on the right","Close intervals on the right" "Close intervals on the right","Close intervals on the right"
"Include lowest value","Include lowest value" "Include lowest value","Include lowest value"
"Create factor variable","Create factor variable" "Create factor variable","Create factor variable"
@ -103,7 +104,9 @@
"You can choose between these file types:","You can choose between these file types:" "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" "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:" "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" "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)}" "Grouped by {get_label(data,ter)}","Grouped by {get_label(data,ter)}"
"Import data from REDCap","Import data from REDCap" "Import data from REDCap","Import data from REDCap"
"REDCap server","REDCap server" "REDCap server","REDCap server"
@ -205,6 +208,7 @@
"Correlation cut-off","Correlation cut-off" "Correlation cut-off","Correlation cut-off"
"Set the cut-off for considered 'highly correlated'.","Set the cut-off for considered 'highly correlated'." "Set the cut-off for considered 'highly correlated'.","Set the cut-off for considered 'highly correlated'."
"Missings","Missings" "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" "Visuals","Visuals"
"Analysis validation","Analysis validation" "Analysis validation","Analysis validation"
"Report","Report" "Report","Report"
@ -227,6 +231,7 @@
"You removed {p_out} % of observations.","You removed {p_out} % of observations." "You removed {p_out} % of observations.","You removed {p_out} % of observations."
"You removed {p_out} % of variables.","You removed {p_out} % of variables." "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 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." "Data includes {n_pairs} pairs of highly correlated variables.","Data includes {n_pairs} pairs of highly correlated variables."
"Class","Class" "Class","Class"
"Observations","Observations" "Observations","Observations"
@ -263,49 +268,7 @@
"The dataset without text variables","The dataset without text variables" "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." "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.." "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.." "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:" "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." "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."
"Text or character to split string by","Text or character to split string by"
"Split the variable","Split the variable"
"Variable to split:","Variable to split:"
"Direction:","Direction:"
"Split string to multiple columns. Keep number of rows.","Split string to multiple columns. Keep number of rows."
"Split string to multiple observations (rows) in the same column. Also ads id and instance columns","Split string to multiple observations (rows) in the same column. Also ads id and instance columns"
"Split character string","Split character string"
"Split text","Split text"
"Split a character string by a common delimiter","Split a character string by a common delimiter"
"Select delimiter","Select delimiter"
"Browse data preview","Browse data preview"
"Original data","Original data"
"Preview of result","Preview of result"
"No character variables with accepted delimiters detected.","No character variables with accepted delimiters detected."
"Split a text column by a recognised delimiter.","Split a text column by a recognised delimiter."
"Apply split","Apply split"
"Stacked relative barplot","Stacked relative barplot"
"Create relative stacked barplots to show the distribution of categorical levels","Create relative stacked barplots to show the distribution of categorical levels"
"Side-by-side barplot","Side-by-side barplot"
"Create side-by-side barplot to show the distribution of categorical levels","Create side-by-side barplot to show the distribution of categorical levels"
"Select table theme","Select table theme"
"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"

1 en de
18 Column added! Column added!
19 Unique values: Unique values:
20 Variable to cut: Variable to cut:
21 Number of breaks: Number of breaks:
22 Close intervals on the right Close intervals on the right
23 Include lowest value Include lowest value
24 Create factor variable Create factor variable
104 You can choose between these file types: You can choose between these file types:
105 You can import {file_extensions_text} files You can import {file_extensions_text} files
106 First five rows are shown below: First five rows are shown below:
107 No variable chosen for analysis No variable chosen for analysis
108 No missing observations No missing observations
109 Missing vs non-missing observations in the variable **'{variabler()}'** Missing vs non-missing observations in the variable **'{variabler()}'**
110 Grouped by {get_label(data,ter)} Grouped by {get_label(data,ter)}
111 Import data from REDCap Import data from REDCap
112 REDCap server REDCap server
208 Correlation cut-off Correlation cut-off
209 Set the cut-off for considered 'highly correlated'. Set the cut-off for considered 'highly correlated'.
210 Missings Missings
211 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.
212 Visuals Visuals
213 Analysis validation Analysis validation
214 Report Report
231 You removed {p_out} % of observations. You removed {p_out} % of observations.
232 You removed {p_out} % of variables. You removed {p_out} % of variables.
233 There is a total of {p_miss} % missing observations. There is a total of {p_miss} % missing observations.
234 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}.
235 Data includes {n_pairs} pairs of highly correlated variables. Data includes {n_pairs} pairs of highly correlated variables.
236 Class Class
237 Observations Observations
268 The dataset without text variables The dataset without text variables
269 The data includes {n_col} variables. Please limit to 100. The data includes {n_col} variables. Please limit to 100.
270 Creating the table. Hold on for a moment.. Creating the table. Hold on for a moment..
271 Select variable to stratify analysis Select variable to stratify analysis
272 Generating the report. Hold on for a moment.. Generating the report. Hold on for a moment..
273 We encountered the following error creating your report: We encountered the following error creating your report:
274 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.
Text or character to split string by Text or character to split string by
Split the variable Split the variable
Variable to split: Variable to split:
Direction: Direction:
Split string to multiple columns. Keep number of rows. Split string to multiple columns. Keep number of rows.
Split string to multiple observations (rows) in the same column. Also ads id and instance columns Split string to multiple observations (rows) in the same column. Also ads id and instance columns
Split character string Split character string
Split text Split text
Split a character string by a common delimiter Split a character string by a common delimiter
Select delimiter Select delimiter
Browse data preview Browse data preview
Original data Original data
Preview of result Preview of result
No character variables with accepted delimiters detected. No character variables with accepted delimiters detected.
Split a text column by a recognised delimiter. Split a text column by a recognised delimiter.
Apply split Apply split
Stacked relative barplot Stacked relative barplot
Create relative stacked barplots to show the distribution of categorical levels Create relative stacked barplots to show the distribution of categorical levels
Side-by-side barplot Side-by-side barplot
Create side-by-side barplot to show the distribution of categorical levels Create side-by-side barplot to show the distribution of categorical levels
Select table theme Select table theme
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

View file

@ -1,4 +1,4 @@
"en","sv" "en","se"
"Hello","Hei" "Hello","Hei"
"The following variable pairs are highly correlated: {sentence_paste(.x,and_str)}.\nConsider excluding one {more}from the dataset to ensure variables are independent.","The following variable pairs are highly correlated: {sentence_paste(.x,and_str)}.\nConsider excluding one {more}from the dataset to ensure variables are independent." "The following variable pairs are highly correlated: {sentence_paste(.x,and_str)}.\nConsider excluding one {more}from the dataset to ensure variables are independent.","The following variable pairs are highly correlated: {sentence_paste(.x,and_str)}.\nConsider excluding one {more}from the dataset to ensure variables are independent."
"No variables have a correlation measure above the threshold.","No variables have a correlation measure above the threshold." "No variables have a correlation measure above the threshold.","No variables have a correlation measure above the threshold."
@ -18,6 +18,7 @@
"Column added!","Column added!" "Column added!","Column added!"
"Unique values:","Unique values:" "Unique values:","Unique values:"
"Variable to cut:","Variable to cut:" "Variable to cut:","Variable to cut:"
"Number of breaks:","Number of breaks:"
"Close intervals on the right","Close intervals on the right" "Close intervals on the right","Close intervals on the right"
"Include lowest value","Include lowest value" "Include lowest value","Include lowest value"
"Create factor variable","Create factor variable" "Create factor variable","Create factor variable"
@ -103,7 +104,9 @@
"You can choose between these file types:","You can choose between these file types:" "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" "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:" "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" "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)}" "Grouped by {get_label(data,ter)}","Grouped by {get_label(data,ter)}"
"Import data from REDCap","Import data from REDCap" "Import data from REDCap","Import data from REDCap"
"REDCap server","REDCap server" "REDCap server","REDCap server"
@ -205,6 +208,7 @@
"Correlation cut-off","Correlation cut-off" "Correlation cut-off","Correlation cut-off"
"Set the cut-off for considered 'highly correlated'.","Set the cut-off for considered 'highly correlated'." "Set the cut-off for considered 'highly correlated'.","Set the cut-off for considered 'highly correlated'."
"Missings","Missings" "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" "Visuals","Visuals"
"Analysis validation","Analysis validation" "Analysis validation","Analysis validation"
"Report","Report" "Report","Report"
@ -227,6 +231,7 @@
"You removed {p_out} % of observations.","You removed {p_out} % of observations." "You removed {p_out} % of observations.","You removed {p_out} % of observations."
"You removed {p_out} % of variables.","You removed {p_out} % of variables." "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 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." "Data includes {n_pairs} pairs of highly correlated variables.","Data includes {n_pairs} pairs of highly correlated variables."
"Class","Class" "Class","Class"
"Observations","Observations" "Observations","Observations"
@ -263,49 +268,7 @@
"The dataset without text variables","The dataset without text variables" "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." "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.." "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.." "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:" "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." "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."
"Text or character to split string by","Text or character to split string by"
"Split the variable","Split the variable"
"Variable to split:","Variable to split:"
"Direction:","Direction:"
"Split string to multiple columns. Keep number of rows.","Split string to multiple columns. Keep number of rows."
"Split string to multiple observations (rows) in the same column. Also ads id and instance columns","Split string to multiple observations (rows) in the same column. Also ads id and instance columns"
"Split character string","Split character string"
"Split text","Split text"
"Split a character string by a common delimiter","Split a character string by a common delimiter"
"Select delimiter","Select delimiter"
"Browse data preview","Browse data preview"
"Original data","Original data"
"Preview of result","Preview of result"
"No character variables with accepted delimiters detected.","No character variables with accepted delimiters detected."
"Split a text column by a recognised delimiter.","Split a text column by a recognised delimiter."
"Apply split","Apply split"
"Stacked relative barplot","Stacked relative barplot"
"Create relative stacked barplots to show the distribution of categorical levels","Create relative stacked barplots to show the distribution of categorical levels"
"Side-by-side barplot","Side-by-side barplot"
"Create side-by-side barplot to show the distribution of categorical levels","Create side-by-side barplot to show the distribution of categorical levels"
"Select table theme","Select table theme"
"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"
1 en sv se
2 Hello Hei
3 The following variable pairs are highly correlated: {sentence_paste(.x,and_str)}.\nConsider excluding one {more}from the dataset to ensure variables are independent. The following variable pairs are highly correlated: {sentence_paste(.x,and_str)}.\nConsider excluding one {more}from the dataset to ensure variables are independent.
4 No variables have a correlation measure above the threshold. No variables have a correlation measure above the threshold.
18 Column added! Column added!
19 Unique values: Unique values:
20 Variable to cut: Variable to cut:
21 Number of breaks: Number of breaks:
22 Close intervals on the right Close intervals on the right
23 Include lowest value Include lowest value
24 Create factor variable Create factor variable
104 You can choose between these file types: You can choose between these file types:
105 You can import {file_extensions_text} files You can import {file_extensions_text} files
106 First five rows are shown below: First five rows are shown below:
107 No variable chosen for analysis No variable chosen for analysis
108 No missing observations No missing observations
109 Missing vs non-missing observations in the variable **'{variabler()}'** Missing vs non-missing observations in the variable **'{variabler()}'**
110 Grouped by {get_label(data,ter)} Grouped by {get_label(data,ter)}
111 Import data from REDCap Import data from REDCap
112 REDCap server REDCap server
208 Correlation cut-off Correlation cut-off
209 Set the cut-off for considered 'highly correlated'. Set the cut-off for considered 'highly correlated'.
210 Missings Missings
211 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.
212 Visuals Visuals
213 Analysis validation Analysis validation
214 Report Report
231 You removed {p_out} % of observations. You removed {p_out} % of observations.
232 You removed {p_out} % of variables. You removed {p_out} % of variables.
233 There is a total of {p_miss} % missing observations. There is a total of {p_miss} % missing observations.
234 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}.
235 Data includes {n_pairs} pairs of highly correlated variables. Data includes {n_pairs} pairs of highly correlated variables.
236 Class Class
237 Observations Observations
268 The dataset without text variables The dataset without text variables
269 The data includes {n_col} variables. Please limit to 100. The data includes {n_col} variables. Please limit to 100.
270 Creating the table. Hold on for a moment.. Creating the table. Hold on for a moment..
271 Select variable to stratify analysis Select variable to stratify analysis
272 Generating the report. Hold on for a moment.. Generating the report. Hold on for a moment..
273 We encountered the following error creating your report: We encountered the following error creating your report:
274 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.
Text or character to split string by Text or character to split string by
Split the variable Split the variable
Variable to split: Variable to split:
Direction: Direction:
Split string to multiple columns. Keep number of rows. Split string to multiple columns. Keep number of rows.
Split string to multiple observations (rows) in the same column. Also ads id and instance columns Split string to multiple observations (rows) in the same column. Also ads id and instance columns
Split character string Split character string
Split text Split text
Split a character string by a common delimiter Split a character string by a common delimiter
Select delimiter Select delimiter
Browse data preview Browse data preview
Original data Original data
Preview of result Preview of result
No character variables with accepted delimiters detected. No character variables with accepted delimiters detected.
Split a text column by a recognised delimiter. Split a text column by a recognised delimiter.
Apply split Apply split
Stacked relative barplot Stacked relative barplot
Create relative stacked barplots to show the distribution of categorical levels Create relative stacked barplots to show the distribution of categorical levels
Side-by-side barplot Side-by-side barplot
Create side-by-side barplot to show the distribution of categorical levels Create side-by-side barplot to show the distribution of categorical levels
Select table theme Select table theme
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

View file

@ -49,6 +49,7 @@
"Column added!","Column added!" "Column added!","Column added!"
"Unique values:","Unique values:" "Unique values:","Unique values:"
"Variable to cut:","Variable to cut:" "Variable to cut:","Variable to cut:"
"Number of breaks:","Number of breaks:"
"Close intervals on the right","Close intervals on the right" "Close intervals on the right","Close intervals on the right"
"Include lowest value","Include lowest value" "Include lowest value","Include lowest value"
"Create factor variable","Create factor variable" "Create factor variable","Create factor variable"
@ -150,7 +151,10 @@
"Settings","Settings" "Settings","Settings"
"The following error occured on determining correlations:","The following error occured on determining correlations:" "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:" "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" "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." "There is a total of {p_miss} % missing observations.","There is a total of {p_miss} % missing observations."
"Median:","Median:" "Median:","Median:"
"Restore original data","Restore original data" "Restore original data","Restore original data"
@ -243,9 +247,11 @@
"Data characteristics table","Data characteristics table" "Data characteristics table","Data characteristics table"
"The dataset without text variables","The dataset without text variables" "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.." "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.." "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 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:" "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." "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" "Other","Other"
"Hour of the day","Hour of the day" "Hour of the day","Hour of the day"
@ -266,46 +272,3 @@
"By quantiles (groups of equal size)","By quantiles (groups of equal size)" "By quantiles (groups of equal size)","By quantiles (groups of equal size)"
"Please fill in web address and API token, then press 'Connect'.","Please fill in web address and API token, then press 'Connect'." "Please fill in web address and API token, then press 'Connect'.","Please fill in web address and API token, then press 'Connect'."
"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." "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."
"Text or character to split string by","Text or character to split string by"
"Split the variable","Split the variable"
"Variable to split:","Variable to split:"
"Direction:","Direction:"
"Split string to multiple columns. Keep number of rows.","Split string to multiple columns. Keep number of rows."
"Split string to multiple observations (rows) in the same column. Also ads id and instance columns","Split string to multiple observations (rows) in the same column. Also ads id and instance columns"
"Split character string","Split character string"
"Split text","Split text"
"Split a character string by a common delimiter","Split a character string by a common delimiter"
"Select delimiter","Select delimiter"
"Browse data preview","Browse data preview"
"Original data","Original data"
"Preview of result","Preview of result"
"No character variables with accepted delimiters detected.","No character variables with accepted delimiters detected."
"Split a text column by a recognised delimiter.","Split a text column by a recognised delimiter."
"Apply split","Apply split"
"Stacked relative barplot","Stacked relative barplot"
"Create relative stacked barplots to show the distribution of categorical levels","Create relative stacked barplots to show the distribution of categorical levels"
"Side-by-side barplot","Side-by-side barplot"
"Create side-by-side barplot to show the distribution of categorical levels","Create side-by-side barplot to show the distribution of categorical levels"
"Select table theme","Select table theme"
"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"

1 en sw
49 Column added! Column added!
50 Unique values: Unique values:
51 Variable to cut: Variable to cut:
52 Number of breaks: Number of breaks:
53 Close intervals on the right Close intervals on the right
54 Include lowest value Include lowest value
55 Create factor variable Create factor variable
151 Settings Settings
152 The following error occured on determining correlations: The following error occured on determining correlations:
153 We encountered the following error creating your report: We encountered the following error creating your report:
154 No variable chosen for analysis No variable chosen for analysis
155 No missing observations No missing observations
156 Missing vs non-missing observations in the variable **'{variabler()}'** Missing vs non-missing observations in the variable **'{variabler()}'**
157 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}.
158 There is a total of {p_miss} % missing observations. There is a total of {p_miss} % missing observations.
159 Median: Median:
160 Restore original data Restore original data
247 Data characteristics table Data characteristics table
248 The dataset without text variables The dataset without text variables
249 Creating the table. Hold on for a moment.. Creating the table. Hold on for a moment..
250 Select variable to stratify analysis Select variable to stratify analysis
251 Generating the report. Hold on for a moment.. Generating the report. Hold on for a moment..
252 We encountered the following error showing missingness: We encountered the following error showing missingness:
253 We encountered the following error browsing your data: We encountered the following error browsing your data:
254 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.
255 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.
256 Other Other
257 Hour of the day Hour of the day
272 By quantiles (groups of equal size) By quantiles (groups of equal size)
273 Please fill in web address and API token, then press 'Connect'. Please fill in web address and API token, then press 'Connect'.
274 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.
Text or character to split string by Text or character to split string by
Split the variable Split the variable
Variable to split: Variable to split:
Direction: Direction:
Split string to multiple columns. Keep number of rows. Split string to multiple columns. Keep number of rows.
Split string to multiple observations (rows) in the same column. Also ads id and instance columns Split string to multiple observations (rows) in the same column. Also ads id and instance columns
Split character string Split character string
Split text Split text
Split a character string by a common delimiter Split a character string by a common delimiter
Select delimiter Select delimiter
Browse data preview Browse data preview
Original data Original data
Preview of result Preview of result
No character variables with accepted delimiters detected. No character variables with accepted delimiters detected.
Split a text column by a recognised delimiter. Split a text column by a recognised delimiter.
Apply split Apply split
Stacked relative barplot Stacked relative barplot
Create relative stacked barplots to show the distribution of categorical levels Create relative stacked barplots to show the distribution of categorical levels
Side-by-side barplot Side-by-side barplot
Create side-by-side barplot to show the distribution of categorical levels Create side-by-side barplot to show the distribution of categorical levels
Select table theme Select table theme
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

View file

@ -1,23 +0,0 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/helpers.R
\name{collapse_spaces}
\alias{collapse_spaces}
\title{Substitue spaces/tabs with single space excluding text within quotes}
\usage{
collapse_spaces(x, preserve_newlines = TRUE)
}
\arguments{
\item{x}{character string}
\item{preserve_newlines}{flag to preserve new lines}
}
\value{
character string
}
\description{
Written assisted by Claude.ai. It is long and possibly too complicated,
but it works
}
\examples{
collapse_spaces(c("cyl", "di sp","s e d","d e'dl e'"))
}

View file

@ -4,12 +4,7 @@
\alias{compare_missings} \alias{compare_missings}
\title{Pairwise comparison of missings across covariables} \title{Pairwise comparison of missings across covariables}
\usage{ \usage{
compare_missings( compare_missings(data, by_var)
data,
by_var,
max_level = 20,
type = c("predictors", "outcome")
)
} }
\arguments{ \arguments{
\item{data}{data frame} \item{data}{data frame}

View file

@ -4,7 +4,7 @@
\alias{create-column} \alias{create-column}
\alias{create_column_ui} \alias{create_column_ui}
\alias{create_column_server} \alias{create_column_server}
\alias{allowed_operations} \alias{list_allowed_operations}
\alias{modal_create_column} \alias{modal_create_column}
\alias{winbox_create_column} \alias{winbox_create_column}
\title{Create new column} \title{Create new column}
@ -17,7 +17,7 @@ create_column_server(
allowed_operations = list_allowed_operations() allowed_operations = list_allowed_operations()
) )
allowed_operations() list_allowed_operations()
modal_create_column( modal_create_column(
id, 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}. This module allow to enter an expression to create a new column in a \code{data.frame}.
} }
\note{ \note{
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. 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.
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: 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")) \if{html}{\out{<div class="sourceCode r">}}\preformatted{c(list_allowed_operations(), getNamespaceExports("lubridate"))

View file

@ -9,10 +9,8 @@ create_baseline(
..., ...,
by.var, by.var,
add.p = FALSE, add.p = FALSE,
add.diff = FALSE,
add.overall = FALSE, add.overall = FALSE,
theme = c("jama", "lancet", "nejm", "qjecon"), theme = c("jama", "lancet", "nejm", "qjecon")
detail_level = c("minimal", "extended")
) )
} }
\arguments{ \arguments{
@ -20,15 +18,11 @@ create_baseline(
\item{...}{passed as fun.arg to baseline_table()} \item{...}{passed as fun.arg to baseline_table()}
\item{by.var}{specify stratification variable}
\item{add.p}{add comparison/p-value} \item{add.p}{add comparison/p-value}
\item{add.overall}{add overall column} \item{add.overall}{add overall column}
\item{theme}{set table theme} \item{strat.var}{grouping/strat variable}
\item{detail_level}{specify detail level. Either "minimal" or "extended".}
} }
\value{ \value{
gtsummary table list object gtsummary table list object
@ -38,8 +32,5 @@ Create a baseline table
} }
\examples{ \examples{
mtcars |> create_baseline(by.var = "gear", add.p = "yes" == "yes") mtcars |> create_baseline(by.var = "gear", add.p = "yes" == "yes")
mtcars |> create_baseline(by.var = "gear", detail_level = "extended")
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(default_parsing(mtcars), by.var = "am", add.p = FALSE, add.overall = FALSE, theme = "lancet")
} }

View file

@ -8,7 +8,6 @@
\alias{cut_var.POSIXct} \alias{cut_var.POSIXct}
\alias{cut_var.Date} \alias{cut_var.Date}
\alias{cut_var.factor} \alias{cut_var.factor}
\alias{cut_var.character}
\title{Extended cutting function with fall-back to the native base::cut} \title{Extended cutting function with fall-back to the native base::cut}
\usage{ \usage{
cut_var(x, ...) cut_var(x, ...)
@ -38,8 +37,6 @@ cut_var(x, ...)
\method{cut_var}{Date}(x, breaks = NULL, start.on.monday = TRUE, ...) \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}{factor}(x, breaks = NULL, type = c("top", "bottom"), other = "Other", ...)
\method{cut_var}{character}(x, breaks = NULL, type = c("characters", "words"), ...)
} }
\arguments{ \arguments{
\item{x}{an object inheriting from class "POSIXct"} \item{x}{an object inheriting from class "POSIXct"}
@ -51,16 +48,12 @@ cut_var(x, ...)
\value{ \value{
factor factor
factor
factor factor
} }
\description{ \description{
Extended cutting function with fall-back to the native base::cut Extended cutting function with fall-back to the native base::cut
Simplify a factor to only the top or bottom n levels Simplify a factor to only the top or bottom n levels
Subset first part of string to factor
} }
\examples{ \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) 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)
@ -87,5 +80,4 @@ mtcars$carb |>
as.factor() |> as.factor() |>
cut_var(20, "bottom") |> cut_var(20, "bottom") |>
table() table()
c("Sunday", "This week is short") |> cut_var(breaks = 3)
} }

View file

@ -6,15 +6,13 @@
\alias{data_missings_server} \alias{data_missings_server}
\title{Data correlations evaluation module} \title{Data correlations evaluation module}
\usage{ \usage{
data_missings_ui(id, ...) data_missings_ui(id)
data_missings_server(id, data, max_level = 20, ...) data_missings_server(id, data, variable, ...)
} }
\arguments{ \arguments{
\item{id}{Module id} \item{id}{Module id}
\item{...}{additional UI elements to show before the table overview}
\item{data}{data} \item{data}{data}
\item{output.format}{output format} \item{output.format}{output format}

View file

@ -1,13 +1,11 @@
% Generated by roxygen2: do not edit by hand % Generated by roxygen2: do not edit by hand
% Please edit documentation in R/data_plots.R, R/plot_bar.R, R/plot_box.R, % Please edit documentation in R/data_plots.R, R/plot_box.R, R/plot_hbar.R,
% R/plot_hbar.R, R/plot_ridge.R, R/plot_sankey.R, R/plot_scatter.R, % R/plot_ridge.R, R/plot_sankey.R, R/plot_scatter.R, R/plot_violin.R
% R/plot_violin.R
\name{data-plots} \name{data-plots}
\alias{data-plots} \alias{data-plots}
\alias{data_visuals_ui} \alias{data_visuals_ui}
\alias{data_visuals_server} \alias{data_visuals_server}
\alias{create_plot} \alias{create_plot}
\alias{plot_bar_single}
\alias{plot_box} \alias{plot_box}
\alias{plot_box_single} \alias{plot_box_single}
\alias{plot_hbars} \alias{plot_hbars}
@ -24,14 +22,6 @@ data_visuals_server(id, data, ...)
create_plot(data, type, pri, sec, ter = NULL, ...) create_plot(data, type, pri, sec, ter = NULL, ...)
plot_bar_single(
data,
pri,
sec = NULL,
style = c("stack", "dodge", "fill"),
max_level = 30
)
plot_box(data, pri, sec, ter = NULL, ...) plot_box(data, pri, sec, ter = NULL, ...)
plot_box_single(data, pri, sec = NULL, seed = 2103) plot_box_single(data, pri, sec = NULL, seed = 2103)
@ -70,9 +60,6 @@ plot_violin(data, pri, sec, ter = NULL)
\item{sec}{secondary variable} \item{sec}{secondary variable}
\item{ter}{tertiary variable} \item{ter}{tertiary variable}
\item{style}{barplot style passed to geom_bar position argument.
One of c("stack", "dodge", "fill")}
} }
\value{ \value{
Shiny ui module Shiny ui module
@ -81,8 +68,6 @@ shiny server module
ggplot2 object ggplot2 object
ggplot object
ggplot2 object ggplot2 object
ggplot object ggplot object
@ -104,8 +89,6 @@ Data correlations evaluation module
Wrapper to create plot based on provided type Wrapper to create plot based on provided type
Single vertical barplot
Beautiful box plot(s) Beautiful box plot(s)
Create nice box-plots Create nice box-plots
@ -124,13 +107,6 @@ Beatiful violin plot
} }
\examples{ \examples{
create_plot(mtcars, "plot_violin", "mpg", "cyl") |> attributes() create_plot(mtcars, "plot_violin", "mpg", "cyl") |> attributes()
mtcars |>
dplyr::mutate(cyl = factor(cyl), am = factor(am)) |>
plot_bar_single(pri = "cyl", sec = "am", style = "fill")
mtcars |>
dplyr::mutate(cyl = factor(cyl), am = factor(am)) |>
plot_bar_single(pri = "cyl", style = "stack")
mtcars |> plot_box(pri = "mpg", sec = "gear") mtcars |> plot_box(pri = "mpg", sec = "gear")
mtcars |> plot_box(pri = "mpg", sec="cyl") mtcars |> plot_box(pri = "mpg", sec="cyl")
mtcars |> mtcars |>

View file

@ -31,5 +31,5 @@ data.frame
Data summary for printing visual summary Data summary for printing visual summary
} }
\examples{ \examples{
mtcars |> data_summary_gather() |> names() mtcars |> data_summary_gather()
} }

View file

@ -1,22 +0,0 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/separate_string.R
\name{detect_delimiter}
\alias{detect_delimiter}
\title{Detect delimiters in string based on allowed delimiters}
\usage{
detect_delimiter(data, delimiters = c("_", "-", ";", "\\n", ","))
}
\arguments{
\item{delimiters}{allowed delimiters}
\item{text}{character vector}
}
\value{
character vector
}
\description{
Accepts any repeat of delimiters and includes surrounding whitespace
}
\examples{
sapply(c("Walk - run", "Sel__Re", "what;now"), detect_delimiter)
}

View file

@ -1,35 +0,0 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/update-factor-ext.R
\name{factor_new_levels_labels}
\alias{factor_new_levels_labels}
\title{Simple function to apply new levels and/or labels to factor}
\usage{
factor_new_levels_labels(
data,
variable,
new_variable = TRUE,
new_levels = NULL,
new_labels = NULL,
ignore = "New label"
)
}
\arguments{
\item{variable}{factor variable}
\item{ignore}{character string to ignore in new labels}
\item{new_level}{new levels, same length as original}
\item{new_label}{new labels, same length as original}
}
\value{
factor
}
\description{
Simple function to apply new levels and/or labels to factor
}
\examples{
data_n <- mtcars
data_n$cyl <- factor(data_n$cyl)
factor_new_levels_labels(data_n, "cyl", new_labels = c("four", "New label", "New label"))
}

View file

@ -2,7 +2,7 @@
% Please edit documentation in R/data_plots.R % Please edit documentation in R/data_plots.R
\name{get_label} \name{get_label}
\alias{get_label} \alias{get_label}
\title{Print label, and if missing print variable name for plots} \title{Print label, and if missing print variable name}
\usage{ \usage{
get_label(data, var = NULL) get_label(data, var = NULL)
} }
@ -15,7 +15,7 @@ get_label(data, var = NULL)
character string character string
} }
\description{ \description{
Print label, and if missing print variable name for plots Print label, and if missing print variable name
} }
\examples{ \examples{
mtcars |> get_label(var = "mpg") mtcars |> get_label(var = "mpg")

View file

@ -1,21 +0,0 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/separate_string.R
\name{is_splittable}
\alias{is_splittable}
\title{Determine if any variable in data frame character and contains recognized delimiters}
\usage{
is_splittable(data)
}
\arguments{
\item{data}{vector or data.frame}
}
\value{
logical
}
\description{
Determine if any variable in data frame character and contains recognized delimiters
}
\examples{
any(apply(mtcars, 2, is_splittable))
is_splittable(mtcars)
}

View file

@ -1,25 +0,0 @@
% 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()
}

View file

@ -1,23 +0,0 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/separate_string.R
\name{separate_string}
\alias{separate_string}
\title{Separate string wide or long}
\usage{
separate_string(data, col, delim, direction = c("wide", "long"))
}
\arguments{
\item{data}{data}
\item{col}{column}
\item{delim}{delimiter}
\item{direction}{target direction}
}
\value{
data.frame
}
\description{
Separate string wide or long
}

View file

@ -1,44 +0,0 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/separate_string.R
\name{split-string}
\alias{split-string}
\alias{string_split_ui}
\alias{string_split_server}
\alias{modal_string_split}
\title{String split module based on tidyr::separate_}
\usage{
string_split_ui(id)
string_split_server(id, data_r = reactive(NULL))
modal_string_split(
id,
title = i18n$t("Split character string"),
easyClose = TRUE,
size = "xl",
footer = NULL
)
}
\arguments{
\item{id}{id}
\item{data_r}{reactive data}
\item{title}{Modal title}
\item{easyClose}{easyClose}
\item{size}{size}
\item{footer}{footer}
}
\value{
A shiny ui module
shiny module server
shiny modal
}
\description{
String split module based on tidyr::separate_
}

View file

@ -1,25 +0,0 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/update-factor-ext.R
\name{unique_names}
\alias{unique_names}
\title{Make unique variable names}
\usage{
unique_names(new, existing = character())
}
\arguments{
\item{new}{a vector of proposed new variable names}
\item{existing}{a vector of existing variable names}
}
\value{
a vector of unique new variable names
}
\description{
Helper function to create new variable names that are unique
given a set of existing names (in a data set, for example).
If a variable name already exists, a number will be appended.
}
\examples{
unique_names(c("var_x", "var_y", "var_x"), c("var_x", "var_z"))
}

View file

@ -54,7 +54,7 @@ shiny server
shiny modal shiny modal
An \code{\link[apexcharter:apexchart]{apexcharter::apexchart()}} \code{htmlwidget} object. An \code{\link[=apexchart]{apexchart()}} \code{htmlwidget} object.
ggplot2 object ggplot2 object
} }
@ -69,3 +69,51 @@ Plot missings and class with apexcharter. Not in use with FreesearchR.
Ggplot2 data summary visualisation based on visdat::vis_dat. Ggplot2 data summary visualisation based on visdat::vis_dat.
} }
\examples{
visual_summary_demo_app <- function() {
ui <- shiny::fluidPage(
shiny::actionButton(
inputId = "modal_missings",
label = "Visual summary",
width = "100\%",
disabled = FALSE
)
)
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_demo$gear <- factor(data_demo$gear)
visual_summary_server(id = "data", data = shiny::reactive(data_demo),summary.fun=class)
observeEvent(input$modal_missings, {
tryCatch(
{
modal_visual_summary(id = "data")
},
error = function(err) {
showNotification(paste0("We encountered the following error browsing your data: ", err), type = "err")
}
)
})
}
shiny::shinyApp(ui, server)
}
visual_summary_demo_app()
data_demo <- mtcars
data_demo[2:4, "cyl"] <- NA
rbind(data_demo, data_demo, data_demo, data_demo) |> missings_apex_plot()
data_demo |> missings_apex_plot()
mtcars |> missings_apex_plot(animation = TRUE)
# dplyr::storms |> missings_apex_plot()
visdat::vis_dat(dplyr::storms)
data_demo <- mtcars
data_demo[sample(1:32, 10), "cyl"] <- NA
data_demo[sample(1:32, 8), "vs"] <- NA
visual_summary(data_demo)
visual_summary(data_demo, palette.fun = scales::hue_pal())
visual_summary(dplyr::storms, summary.fun = data_type)
visual_summary(dplyr::storms, summary.fun = data_type, na.label = "Missings", legend.title = "Class")
}

1192
renv.lock

File diff suppressed because one or more lines are too long

View file

@ -10,9 +10,4 @@ library(testthat)
library(FreesearchR) library(FreesearchR)
library(shiny) library(shiny)
i18n <- shiny.i18n::Translator$new(translation_csvs_path = here::here("inst/translations/"))
i18n$set_translation_language("en")
test_check("FreesearchR") test_check("FreesearchR")

View file

@ -7,6 +7,163 @@ vignette: >
%\VignetteEncoding{UTF-8} %\VignetteEncoding{UTF-8}
--- ---
Documentation on getting started using the FreesearchR app can be found in the [FreesearchR project documentations (link)](https://freesearchr.github.io/FreesearchR-knowledge/app/app.html). ```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE,eval = TRUE)
library(FreesearchR)
i18n_path <- system.file("translations", package = "FreesearchR")
i18n <- shiny.i18n::Translator$new(translation_csvs_path = i18n_path)
i18n$set_translation_language("en")
```
# Getting started with ***FreesearchR***
Below is a simple walk-trough and basic descriptions on the different features of the ***FreesearchR*** app.
## Launching
The easiest way to get started is to launch [the onlie version of the app (click this link)](https://app.freesearchr.org/). Please be aware not to upload sensitive data in this version as data security can not be guaranteed in this online environment. The app can easily be run from *R* on your own computer by running the code below ([read more on running locally here](https://agdamsbo.github.io/FreesearchR/#run-locally-on-your-own-machine)):
```{r eval = FALSE}
require("pak")
pak::pak("agdamsbo/FreesearchR")
library(FreesearchR)
FreesearchR::launch_FreesearchR()
```
As a small note, a standalone Windows app version is on the drawing board as well, but no time frame is currently available.
## Get started
Once in the app, get started by loading your data. You have three options available for importing data: file upload, REDCap server export and local or sample data.
After choosing a data source nad importing data, you can preview the basic data structure and missing observations, set a threshold to filter data by completeness and further manually specify variables to include for analyses.
### File upload
Several data file formats are supported for easy import (csv, txt, xls(x), ods, rds, dta). If importing workbooks (xls(x) or ods), you are prompted to specify sheet(s) to import. If choosing multiple sheets, these are automatically merged by common variable(s), so please make sure that key/ID variables are correctly named identically.
### REDCap server export
Export data directly from a REDCap server. You need to first generate an API-token ([see these instruction](https://confluence.research.cchmc.org/pages/viewpage.action?pageId=50987698)) in REDCap. Make sure you have the necessary rights to do so.
Please don't store the API-key on your device unless encrypted or in a keyring, as this may compromise data safety. Log in to your REDCap server and retrieve the token when needed.
Type the correct web address of your REDCap server.
The module will validate the information and you can click "Connect".
This will unfold options to preview your data dictionary (the main database metadata), choose fields/variables to download as well as filtering options.
### Local or sample data
When opening the online hosted app, you can load some sample data to try out the app. When running the app locally from *R* on your own computer, you will find all data frames loaded in your environment here. This extends the possible uses of this app to allow for quick and easy data insights and code generation.
## Prepare
This is the panel to prepare data for evaluation and analyses and get a good overview of your data, check data is classed and formatted correctly, perform simple modifications and filter data.
### Summary
Here, the data variables can be inspected with a simple visualisation and a few key measures. Also, data filtering is available at two levels:
- Data type filtering allows to filter by variable [data type](https://agdamsbo.github.io/FreesearchR/articles/data-types.html)
- Observations level filtering allow to filter data by variable
### Modify
Re-class, rename, and relabel variables. Subset data, create new variables and reorder factor levels. Also, compare the modified dataset to the original and restore the original data.
## Evaluate
This panel allows for basic data evaluation.
### Characteristics
Create a classical baseline characteristics table with optional data stratification and comparisons.
### Correlation matrix
Visualise variable correlations and get suggestions to exclude highly correlated variables.
## Visuals
There are a number of plotting options to visualise different aspects of the data.
Below are the available plot types listed.
```{r echo = FALSE}
c("continuous", "dichotomous", "categorical") |>
lapply(\(.x){
dplyr::bind_cols(
dplyr::tibble("Data type"=.x),
supported_plots() |>
lapply(\(.y){
if (.x %in% .y$primary.type){
.y[c("descr","note")]|> dplyr::bind_cols()
}
})|>
dplyr::bind_rows() |>
setNames(c("Plot type","Description")))
}) |>
dplyr::bind_rows() |>
# toastui::datagrid(filters=TRUE,theme="striped") |>
knitr::kable()
```
Export the plots directly from the sidebar with easily adjusted plot dimensions for your next publication.
Also copy the code to generate the plot in your own R-environment and fine tune all the small details.
## Regression
This section is only intended for very simple explorative analyses and as a proof-of-concept for now. If you are doing complex regression analyses you should probably just write the code yourself.
Below are the available regression types listed.
```{r echo = FALSE}
c("continuous", "dichotomous", "categorical") |>
lapply(\(.x){
dplyr::bind_cols(
dplyr::tibble("Data type"=.x),
supported_functions()|>
lapply(\(.y){
if (.x %in% .y$out.type){
.y[c("descr","fun","design")]|> dplyr::bind_cols()
}
})|>
dplyr::bind_rows() |>
setNames(c("Regression model","Function","Study design")))
}) |>
dplyr::bind_rows() |>
# toastui::datagrid(filters=TRUE,theme="striped") |>
knitr::kable()
```
### Table
Generate simple regression models and get the results in a nice table. This will also be included in the exported report.
This will generate a combined table with both univariate regression model results for each included variable and a multivariate model with all variables included for explorative analyses.
### Plots
Plot the coefficients from the regression models in a forest plot. Choose which model(s) to include.
### Model checks
Check model assumptions visually. Supported checks can be chosen.
## Download
### Report
Download a nice report with baseline characteristics and regression model results. Choose between MS Word or LibreOffice format.
### Data
Export the modified dataset in different formats.
### Code
See all the code snippets from the different steps in your data evaluation.

View file

@ -16,4 +16,23 @@ knitr::opts_chunk$set(
options(rmarkdown.html_vignette.check_title = FALSE) options(rmarkdown.html_vignette.check_title = FALSE)
``` ```
Documentation on the data types used in FreesearchR can be found in the [FreesearchR project documentations (link)](https://freesearchr.github.io/FreesearchR-knowledge/app/data_types.html). ```{r setup}
library(FreesearchR)
i18n_path <- system.file("translations", package = "FreesearchR")
i18n <- shiny.i18n::Translator$new(translation_csvs_path = i18n_path)
i18n$set_translation_language("en")
```
## A clinical data class
Traditionally in *R*, data is identified by classes, like numeric, integer, double, logical, factor etc. These classes can be a little confusing from a clinical or operational standpoint. In the ***FreesearchR*** app, these classes has been simplified and modified to the following data types, that are assigned on a prioritised order like the following:
```{r echo = FALSE}
data_types() |> purrr::imap(\(.x,.i){
dplyr::bind_cols("type"=.i,.x,.name_repair = "unique_quiet")
}) |> dplyr::bind_rows() |>
setNames(c("Data type","Description","Data classes included")) |>
knitr::kable()
```
Categorising data in this way makes sense when making choices on how to evaluate and analyse data. This is used throughout the ***FreesearchR*** app to simplify data handling.

View file

@ -15,4 +15,12 @@ knitr::opts_chunk$set(
options(rmarkdown.html_vignette.check_title = FALSE) options(rmarkdown.html_vignette.check_title = FALSE)
``` ```
Considerations of data missingness can be found in the [FreesearchR project documentations (link)](https://freesearchr.github.io/FreesearchR-knowledge/intro/missingness.html). ```{r setup}
library(FreesearchR)
```
## Considering missing observations
### Further reading
The authors behind the [{finalfit}-package](https://finalfit.org/index.html) have shared a very comprehensive article on what to do and think about missing observations in your data. Please [have a look here](https://finalfit.org/articles/missing.html).

View file

@ -16,4 +16,44 @@ knitr::opts_chunk$set(
options(rmarkdown.html_vignette.check_title = FALSE) options(rmarkdown.html_vignette.check_title = FALSE)
``` ```
Documentation on visuals used in FreesearchR can be found in the [FreesearchR project documentations (link)](https://freesearchr.github.io/FreesearchR-knowledge/app/visuals.html). ```{r setup}
library(FreesearchR)
i18n_path <- system.file("translations", package = "FreesearchR")
i18n <- shiny.i18n::Translator$new(translation_csvs_path = i18n_path)
i18n$set_translation_language("en")
```
## Basic visualisations
The goal of ***FreesearchR*** is to keep things simple. Visuals can get very complicated. We provide a selection of plots, that helps visualise typical clinical and will be enough for most use cases, and for publishing to most journals.
If you want to go further, have a look at these sites with suggestions and sample code for data plotting:
- [*R* Charts](https://r-charts.com/): Extensive gallery with great plots
- [*R* Graph gallery](https://r-graph-gallery.com/): Another gallery with great graphs
- [graphics principles](https://graphicsprinciples.github.io/): Easy to follow recommendations for clear visuals.
### Available plots
Below are the available plot types listed.
```{r echo = FALSE}
c("continuous", "dichotomous", "categorical") |>
lapply(\(.x){
dplyr::bind_cols(
dplyr::tibble("Data type"=.x),
supported_plots() |>
lapply(\(.y){
if (.x %in% .y$primary.type){
.y[c("descr","note")]|> dplyr::bind_cols()
}
})|>
dplyr::bind_rows() |>
setNames(c("Plot type","Description")))
}) |>
dplyr::bind_rows() |>
knitr::kable()
```