diff --git a/CITATION.cff b/CITATION.cff index 4ceeccf6..b2741aa4 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -9,7 +9,7 @@ type: software license: AGPL-3.0-or-later title: 'FreesearchR: A free and open-source browser based data analysis tool for researchers with publication ready output' -version: 25.5.6 +version: 25.5.5 doi: 10.5281/zenodo.14527429 identifiers: - type: url diff --git a/DESCRIPTION b/DESCRIPTION index e723fde4..f245494a 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: FreesearchR Title: A free and open-source browser based data analysis tool for researchers with publication ready output -Version: 25.5.6 +Version: 25.5.5 Authors@R: c( person("Andreas Gammelgaard", "Damsbo",email="agdamsbo@clin.au.dk", role = c("aut", "cre"), comment = c(ORCID = "0000-0002-7559-1154")), diff --git a/NEWS.md b/NEWS.md index 6534c2d6..44b78379 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,11 +1,3 @@ -# FreesearchR 25.5.6 - -- *FIX* note on max file size of 5 mb - -- *FIX* added a banner to the dev version on shinyapps.io - -- *FIX* updated intro text - # FreesearchR 25.5.5 - *FIX* several minor bugs and polish diff --git a/R/app_version.R b/R/app_version.R index 7290e2e0..d4d8dc13 100644 --- a/R/app_version.R +++ b/R/app_version.R @@ -1 +1 @@ -app_version <- function()'25.5.6' +app_version <- function()'25.5.5' diff --git a/R/create-column-mod.R b/R/create-column-mod.R index 22768056..0bc24026 100644 --- a/R/create-column-mod.R +++ b/R/create-column-mod.R @@ -96,7 +96,7 @@ create_column_ui <- function(id) { uiOutput(outputId = ns("columns")), uiOutput(outputId = ns("feedback")), tags$div( - style = htmltools::css( + style = css( display = "grid", gridTemplateColumns = "3fr 1fr", columnGap = "10px", @@ -187,7 +187,7 @@ create_column_server <- function(id, if (input$new_column == "") { rv$feedback <- shinyWidgets::alert( status = "warning", - phosphoricons::ph("warning"), datamods::i18n("New column name cannot be empty") + ph("warning"), datamods::i18n("New column name cannot be empty") ) } }) @@ -351,7 +351,7 @@ try_compute_column <- function(expression, ) shinyWidgets::alert( status = "success", - phosphoricons::ph("check"), datamods::i18n("Column added!") + ph("check"), datamods::i18n("Column added!") ) } @@ -374,7 +374,7 @@ extract_calls <- function(exp) { alert_error <- function(text) { alert( status = "danger", - phosphoricons::ph("bug"), text + ph("bug"), text ) } @@ -385,7 +385,7 @@ btn_column <- function(label, data, inputId) { tags$button( type = "button", class = paste0("btn btn-column-", type), - style = htmltools::css( + style = css( "--bs-btn-padding-y" = ".25rem", "--bs-btn-padding-x" = ".5rem", "--bs-btn-font-size" = ".75rem", diff --git a/R/hosted_version.R b/R/hosted_version.R index bf34da5d..3cd23688 100644 --- a/R/hosted_version.R +++ b/R/hosted_version.R @@ -1 +1 @@ -hosted_version <- function()'v25.5.6-250516' +hosted_version <- function()'v25.5.5-250514' diff --git a/R/import-file-ext.R b/R/import-file-ext.R index 1eba71ac..5298ec49 100644 --- a/R/import-file-ext.R +++ b/R/import-file-ext.R @@ -83,7 +83,7 @@ import_file_ui <- function(id, inputId = ns("file"), label = datamods:::i18n("Upload a file:"), buttonLabel = datamods:::i18n("Browse..."), - placeholder = datamods:::i18n("No file selected; maximum file size is 5 mb"), + placeholder = datamods:::i18n("No file selected"), accept = file_extensions, width = "100%", ## A solution to allow multiple file upload is being considered diff --git a/R/sysdata.rda b/R/sysdata.rda index 8eef1f32..3bc008a0 100644 Binary files a/R/sysdata.rda and b/R/sysdata.rda differ diff --git a/R/update-factor-ext.R b/R/update-factor-ext.R index 014f854b..3fd4719e 100644 --- a/R/update-factor-ext.R +++ b/R/update-factor-ext.R @@ -45,8 +45,8 @@ update_factor_ui <- function(id) { actionButton( inputId = ns("sort_levels"), label = tagList( - phosphoricons::ph("sort-ascending"), - datamods:::i18n("Sort by levels") + ph("sort-ascending"), + i18n("Sort by levels") ), class = "btn-outline-primary mb-3", width = "100%" @@ -58,8 +58,8 @@ update_factor_ui <- function(id) { actionButton( inputId = ns("sort_occurrences"), label = tagList( - phosphoricons::ph("sort-ascending"), - datamods:::i18n("Sort by count") + ph("sort-ascending"), + i18n("Sort by count") ), class = "btn-outline-primary mb-3", width = "100%" @@ -71,7 +71,7 @@ update_factor_ui <- function(id) { class = "float-end", shinyWidgets::prettyCheckbox( inputId = ns("new_var"), - label = datamods:::i18n("Create a new variable (otherwise replaces the one selected)"), + label = i18n("Create a new variable (otherwise replaces the one selected)"), value = FALSE, status = "primary", outline = TRUE, @@ -79,7 +79,7 @@ update_factor_ui <- function(id) { ), actionButton( inputId = ns("create"), - label = tagList(phosphoricons::ph("arrow-clockwise"), datamods:::i18n("Update factor variable")), + label = tagList(ph("arrow-clockwise"), i18n("Update factor variable")), class = "btn-outline-primary" ) ), @@ -127,13 +127,13 @@ update_factor_server <- function(id, data_r = reactive(NULL)) { if (input$sort_levels %% 2 == 1) { decreasing <- FALSE label <- tagList( - phosphoricons::ph("sort-descending"), + ph("sort-descending"), "Sort Levels" ) } else { decreasing <- TRUE label <- tagList( - phosphoricons::ph("sort-ascending"), + ph("sort-ascending"), "Sort Levels" ) } @@ -145,14 +145,14 @@ update_factor_server <- function(id, data_r = reactive(NULL)) { if (input$sort_occurrences %% 2 == 1) { decreasing <- FALSE label <- tagList( - phosphoricons::ph("sort-descending"), - datamods:::i18n("Sort count") + ph("sort-descending"), + i18n("Sort count") ) } else { decreasing <- TRUE label <- tagList( - phosphoricons::ph("sort-ascending"), - datamods:::i18n("Sort count") + ph("sort-ascending"), + i18n("Sort count") ) } updateActionButton(inputId = "sort_occurrences", label = as.character(label)) @@ -179,7 +179,7 @@ update_factor_server <- function(id, data_r = reactive(NULL)) { grid <- grid_columns( grid, columns = c("Var1", "Var1_toset", "Freq"), - header = c(datamods:::i18n("Levels"), "New label", datamods:::i18n("Count")) + header = c(i18n("Levels"), "New label", i18n("Count")) ) grid <- grid_colorbar( grid, diff --git a/SESSION.md b/SESSION.md index f21212dd..9dd0b555 100644 --- a/SESSION.md +++ b/SESSION.md @@ -11,11 +11,11 @@ |collate |en_US.UTF-8 | |ctype |en_US.UTF-8 | |tz |Europe/Copenhagen | -|date |2025-05-16 | -|rstudio |2025.05.0+496 Mariposa Orchid (desktop) | +|date |2025-05-14 | +|rstudio |2024.12.1+563 Kousa Dogwood (desktop) | |pandoc |3.6.4 @ /opt/homebrew/bin/ (via rmarkdown) | |quarto |1.7.30 @ /usr/local/bin/quarto | -|FreesearchR |25.5.6.250516 | +|FreesearchR |25.5.5.250514 | -------------------------------------------------------------------------------- @@ -53,7 +53,6 @@ |colorspace |2.1-1 |2024-07-26 |CRAN (R 4.4.1) | |commonmark |1.9.5 |2025-03-17 |CRAN (R 4.4.1) | |crayon |1.5.3 |2024-06-20 |CRAN (R 4.4.1) | -|credentials |2.0.2 |2024-10-04 |CRAN (R 4.4.1) | |curl |6.2.2 |2025-03-24 |CRAN (R 4.4.1) | |data.table |1.17.0 |2025-02-22 |CRAN (R 4.4.1) | |datamods |1.5.3 |2024-10-02 |CRAN (R 4.4.1) | @@ -85,19 +84,16 @@ |foreach |1.5.2 |2022-02-02 |CRAN (R 4.4.0) | |foreign |0.8-90 |2025-03-31 |CRAN (R 4.4.1) | |Formula |1.2-5 |2023-02-24 |CRAN (R 4.4.1) | -|FreesearchR |25.5.6 |NA |NA | +|FreesearchR |25.5.5 |NA |NA | |fs |1.6.6 |2025-04-12 |CRAN (R 4.4.1) | |gdtools |0.4.2 |2025-03-27 |CRAN (R 4.4.1) | |generics |0.1.3 |2022-07-05 |CRAN (R 4.4.1) | -|gert |2.1.5 |2025-03-25 |CRAN (R 4.4.1) | |ggalluvial |0.12.5 |2023-02-22 |CRAN (R 4.4.0) | |ggcorrplot |0.1.4.1 |2023-09-05 |CRAN (R 4.4.0) | |ggforce |0.4.2 |2024-02-19 |CRAN (R 4.4.0) | |ggplot2 |3.5.2 |2025-04-09 |CRAN (R 4.4.1) | |ggridges |0.5.6 |2024-01-23 |CRAN (R 4.4.0) | |ggstats |0.9.0 |2025-03-10 |CRAN (R 4.4.1) | -|gh |1.4.1 |2024-03-28 |CRAN (R 4.4.0) | -|gitcreds |0.1.2 |2022-09-08 |CRAN (R 4.4.1) | |glue |1.8.0 |2024-09-30 |CRAN (R 4.4.1) | |gridExtra |2.3 |2017-09-09 |CRAN (R 4.4.1) | |gt |1.0.0 |2025-04-05 |CRAN (R 4.4.1) | @@ -111,7 +107,6 @@ |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) | |httpuv |1.6.16 |2025-04-16 |CRAN (R 4.4.1) | -|httr2 |1.1.2 |2025-03-26 |CRAN (R 4.4.1) | |IDEAFilter |0.2.0 |2024-04-15 |CRAN (R 4.4.0) | |insight |1.2.0 |2025-04-22 |CRAN (R 4.4.1) | |iterators |1.0.14 |2022-02-05 |CRAN (R 4.4.1) | @@ -124,11 +119,9 @@ |later |1.4.2 |2025-04-08 |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) | -|litedown |0.7 |2025-04-08 |CRAN (R 4.4.1) | |lme4 |1.1-37 |2025-03-26 |CRAN (R 4.4.1) | |lubridate |1.9.4 |2024-12-08 |CRAN (R 4.4.1) | |magrittr |2.0.3 |2022-03-30 |CRAN (R 4.4.1) | -|markdown |2.0 |2025-03-23 |CRAN (R 4.4.1) | |MASS |7.3-65 |2025-02-28 |CRAN (R 4.4.1) | |Matrix |1.7-3 |2025-03-11 |CRAN (R 4.4.1) | |memoise |2.0.1 |2021-11-26 |CRAN (R 4.4.0) | @@ -167,7 +160,6 @@ |R6 |2.6.1 |2025-02-15 |CRAN (R 4.4.1) | |ragg |1.4.0 |2025-04-10 |CRAN (R 4.4.1) | |rankinPlot |1.1.0 |2023-01-30 |CRAN (R 4.4.0) | -|rappdirs |0.3.3 |2021-01-31 |CRAN (R 4.4.1) | |rbibutils |2.3 |2024-10-04 |CRAN (R 4.4.1) | |RColorBrewer |1.1-3 |2022-04-03 |CRAN (R 4.4.1) | |Rcpp |1.0.14 |2025-01-12 |CRAN (R 4.4.1) | @@ -204,7 +196,6 @@ |shinyWidgets |0.9.0 |2025-02-21 |CRAN (R 4.4.1) | |stringi |1.8.7 |2025-03-27 |CRAN (R 4.4.1) | |stringr |1.5.1 |2023-11-14 |CRAN (R 4.4.0) | -|sys |3.4.3 |2024-10-04 |CRAN (R 4.4.1) | |systemfonts |1.2.2 |2025-04-04 |CRAN (R 4.4.1) | |testthat |3.2.3 |2025-01-13 |CRAN (R 4.4.1) | |textshaping |1.0.0 |2025-01-20 |CRAN (R 4.4.1) | diff --git a/inst/apps/FreesearchR/app.R b/inst/apps/FreesearchR/app.R index 22b7ee47..be0bb4da 100644 --- a/inst/apps/FreesearchR/app.R +++ b/inst/apps/FreesearchR/app.R @@ -49,7 +49,7 @@ library(rlang) #### Current file: /Users/au301842/FreesearchR/R//app_version.R ######## -app_version <- function()'25.5.6' +app_version <- function()'25.5.5' ######## @@ -440,7 +440,7 @@ create_column_ui <- function(id) { uiOutput(outputId = ns("columns")), uiOutput(outputId = ns("feedback")), tags$div( - style = htmltools::css( + style = css( display = "grid", gridTemplateColumns = "3fr 1fr", columnGap = "10px", @@ -531,7 +531,7 @@ create_column_server <- function(id, if (input$new_column == "") { rv$feedback <- shinyWidgets::alert( status = "warning", - phosphoricons::ph("warning"), datamods::i18n("New column name cannot be empty") + ph("warning"), datamods::i18n("New column name cannot be empty") ) } }) @@ -695,7 +695,7 @@ try_compute_column <- function(expression, ) shinyWidgets::alert( status = "success", - phosphoricons::ph("check"), datamods::i18n("Column added!") + ph("check"), datamods::i18n("Column added!") ) } @@ -718,7 +718,7 @@ extract_calls <- function(exp) { alert_error <- function(text) { alert( status = "danger", - phosphoricons::ph("bug"), text + ph("bug"), text ) } @@ -729,7 +729,7 @@ btn_column <- function(label, data, inputId) { tags$button( type = "button", class = paste0("btn btn-column-", type), - style = htmltools::css( + style = css( "--bs-btn-padding-y" = ".25rem", "--bs-btn-padding-x" = ".5rem", "--bs-btn-font-size" = ".75rem", @@ -3996,7 +3996,7 @@ simple_snake <- function(data){ #### Current file: /Users/au301842/FreesearchR/R//hosted_version.R ######## -hosted_version <- function()'v25.5.6-250516' +hosted_version <- function()'v25.5.5-250514' ######## @@ -4103,7 +4103,7 @@ import_file_ui <- function(id, inputId = ns("file"), label = datamods:::i18n("Upload a file:"), buttonLabel = datamods:::i18n("Browse..."), - placeholder = datamods:::i18n("No file selected; maximum file size is 5 mb"), + placeholder = datamods:::i18n("No file selected"), accept = file_extensions, width = "100%", ## A solution to allow multiple file upload is being considered @@ -8125,8 +8125,8 @@ update_factor_ui <- function(id) { actionButton( inputId = ns("sort_levels"), label = tagList( - phosphoricons::ph("sort-ascending"), - datamods:::i18n("Sort by levels") + ph("sort-ascending"), + i18n("Sort by levels") ), class = "btn-outline-primary mb-3", width = "100%" @@ -8138,8 +8138,8 @@ update_factor_ui <- function(id) { actionButton( inputId = ns("sort_occurrences"), label = tagList( - phosphoricons::ph("sort-ascending"), - datamods:::i18n("Sort by count") + ph("sort-ascending"), + i18n("Sort by count") ), class = "btn-outline-primary mb-3", width = "100%" @@ -8151,7 +8151,7 @@ update_factor_ui <- function(id) { class = "float-end", shinyWidgets::prettyCheckbox( inputId = ns("new_var"), - label = datamods:::i18n("Create a new variable (otherwise replaces the one selected)"), + label = i18n("Create a new variable (otherwise replaces the one selected)"), value = FALSE, status = "primary", outline = TRUE, @@ -8159,7 +8159,7 @@ update_factor_ui <- function(id) { ), actionButton( inputId = ns("create"), - label = tagList(phosphoricons::ph("arrow-clockwise"), datamods:::i18n("Update factor variable")), + label = tagList(ph("arrow-clockwise"), i18n("Update factor variable")), class = "btn-outline-primary" ) ), @@ -8207,13 +8207,13 @@ update_factor_server <- function(id, data_r = reactive(NULL)) { if (input$sort_levels %% 2 == 1) { decreasing <- FALSE label <- tagList( - phosphoricons::ph("sort-descending"), + ph("sort-descending"), "Sort Levels" ) } else { decreasing <- TRUE label <- tagList( - phosphoricons::ph("sort-ascending"), + ph("sort-ascending"), "Sort Levels" ) } @@ -8225,14 +8225,14 @@ update_factor_server <- function(id, data_r = reactive(NULL)) { if (input$sort_occurrences %% 2 == 1) { decreasing <- FALSE label <- tagList( - phosphoricons::ph("sort-descending"), - datamods:::i18n("Sort count") + ph("sort-descending"), + i18n("Sort count") ) } else { decreasing <- TRUE label <- tagList( - phosphoricons::ph("sort-ascending"), - datamods:::i18n("Sort count") + ph("sort-ascending"), + i18n("Sort count") ) } updateActionButton(inputId = "sort_occurrences", label = as.character(label)) @@ -8259,7 +8259,7 @@ update_factor_server <- function(id, data_r = reactive(NULL)) { grid <- grid_columns( grid, columns = c("Var1", "Var1_toset", "Freq"), - header = c(datamods:::i18n("Levels"), "New label", datamods:::i18n("Count")) + header = c(i18n("Levels"), "New label", i18n("Count")) ) grid <- grid_colorbar( grid, @@ -9352,15 +9352,6 @@ header_include <- function(){ } -######## -#### Current file: /Users/au301842/FreesearchR/dev/dev_banner.R -######## - -dev_banner <- function(){ - NULL - } - - ######## #### Current file: /Users/au301842/FreesearchR/app/ui.R ######## @@ -9378,10 +9369,6 @@ ui_elements <- list( "home" = bslib::nav_panel( title = "FreesearchR", shiny::fluidRow( - ## On building the dev-version for shinyapps.io, the dev_banner() is redefined - ## Default just output "NULL" - ## This could probably be achieved more legantly, but this works. - dev_banner(), shiny::column(width = 2), shiny::column( width = 8, diff --git a/inst/apps/FreesearchR/www/intro.md b/inst/apps/FreesearchR/www/intro.md index 0b644dcf..f1432c8b 100644 --- a/inst/apps/FreesearchR/www/intro.md +++ b/inst/apps/FreesearchR/www/intro.md @@ -1,18 +1,20 @@ # Welcome -This is the ***FreesearchR*** data analysis tool. We intend ***FreesearchR*** to be a free tool for easy data evaluation and analysis. If you need more advanced tools, start with ***FreesearchR*** and then you'll probably be better off using *R* or similar directly. +This is the ***FreesearchR*** data analysis tool. We intend the ***FreesearchR*** to be a powerful and free tool for easy data evaluation and analysis at the hands of the clinician. If you need more advanced tools for regression models or plotting, you'll probably be better off using *R* or similar directly on your own machine. + +By intention, this tool has been designed to be simple to use with a minimum of mandatory options to keep the workflow streamlined, while also including a few options to go even further. Here is a brief summary of the functions: -1. **Import data** from a spreadsheet/file on your machine, direct export from a REDCap server, sample data or data from a your local environment if run locally. +1. Import data to get started. This can be a spreadsheet/file on your machine, direct export from a REDCap server, sample data or data from a your local environment if run locally. -1. **Data inspection** and **modification** like modifying variables or creating new (categorical from numeric or time data, or completely new variables from the data) +1. Data inspection and modification (change variable classes, create new variables (categorical from numeric or time data, or completely new variables from the data) -1. **Evaluate data** using descriptive analyses methods and inspect cross-correlations +1. Evaluate data using descriptive analyses methods and inspect cross-correlations -1. **Create and export simple, clean plots** for data overview and insights +1. Create and export simple, clean plots for data overview and insights. -1. **Create regression simple models** for even more advanced data analyses +1. Create regression models for even more advanced data analyses - Linear, dichotomous or ordinal logistic regression will be used depending on specified outcome variable @@ -20,7 +22,7 @@ Here is a brief summary of the functions: - Evaluate model assumptions -1. **Export results** +1. Export results - Descriptive and regression analyses results for MS Word or [LibreOffice](https://www.libreoffice.org/) diff --git a/inst/apps/FreesearchR/www/report.rmd b/inst/apps/FreesearchR/www/report.rmd index 7f7c61f6..9a2013b3 100644 --- a/inst/apps/FreesearchR/www/report.rmd +++ b/inst/apps/FreesearchR/www/report.rmd @@ -43,7 +43,7 @@ vec2sentence <- function(data, sep.word = "and") { ## Introduction -Research should be free and open with easy access for all. The *FreesearchR* tool attempts to help lower the bar to participate in research by making basic data exploration and analyses easily accessible. +Research should be free and open with easy access for all. The FreesearchR tool attempts to help lower the bar to participate in contributing to science by making guided data analysis easily accessible in the web-browser. ## Methods