From 00906519277bde4c751547f4f0840cd27c1d2413 Mon Sep 17 00:00:00 2001 From: Andreas Gammelgaard Damsbo Date: Wed, 11 Mar 2026 14:45:56 +0100 Subject: [PATCH 01/15] fix: faster summary --- R/helpers.R | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/R/helpers.R b/R/helpers.R index 04fd8346..75fedb70 100644 --- a/R/helpers.R +++ b/R/helpers.R @@ -356,33 +356,28 @@ missing_fraction <- function(data) { #' sample(c(1:8, NA), 20, TRUE) #' ) |> data_description() data_description <- function(data, data_text = "Data") { - data <- if (shiny::is.reactive(data)) - data() - else - data + # Resolve reactive once + if (shiny::is.reactive(data)) data <- data() + + # Early return if null + if (is.null(data)) return(i18n$t("No data present.")) n <- nrow(data) + + # Early return if empty + if (n == 0L) return(i18n$t("No data present.")) + n_var <- ncol(data) - n_complete <- sum(complete.cases(data)) + + # Faster complete.cases alternative using rowSums on NA matrix + n_complete <- n - sum(rowSums(is.na(data)) > 0L) p_complete <- signif(100 * n_complete / n, 3) - if (is.null(data)) { - i18n$t("No data present.") - } else { - glue::glue( - i18n$t( - "{data_text} has {n} observations and {n_var} variables, with {n_complete} ({p_complete} %) complete cases." - ) + glue::glue( + i18n$t( + "{data_text} has {n} observations and {n_var} variables, with {n_complete} ({p_complete} %) complete cases." ) - } - # sprintf( - # "%s has %s observations and %s variables, with %s (%s%%) complete cases.", - # data_text, - # n, - # n_var, - # n_complete, - # p_complete - # ) + ) } From 16fdd3fdef8b1a53391826093a05c8ac62af51c2 Mon Sep 17 00:00:00 2001 From: Andreas Gammelgaard Damsbo Date: Wed, 11 Mar 2026 14:46:38 +0100 Subject: [PATCH 02/15] feat: mount volume in docker (compose) to automatically load content in app --- R/launch_FreesearchR.R | 88 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/R/launch_FreesearchR.R b/R/launch_FreesearchR.R index 469c443b..089cea90 100644 --- a/R/launch_FreesearchR.R +++ b/R/launch_FreesearchR.R @@ -57,3 +57,91 @@ get_config <- function(var_name, default = NULL) { stop(paste("Required config variable not set:", var_name)) } + + +## File loader - based on the module, uses hard coded default values +load_file <- function(path) { + read_fns <- list( + ods = "import_ods", + dta = "import_dta", + csv = "import_delim", + tsv = "import_delim", + txt = "import_delim", + xls = "import_xls", + xlsx = "import_xls", + rds = "import_rds" + ) + + ext <- tolower(tools::file_ext(path)) + + if (!ext %in% names(read_fns)) { + message("Unsupported file type, skipping: ", basename(path), " (.", ext, ")") + return(NULL) + } + + read_fn <- read_fns[[ext]] + + parameters <- list( + file = path, + sheet = 1, + skip = 0, + dec = ".", + encoding = "unknown" + ) + + # Trim parameters to only those accepted by the target function + parameters <- parameters[which(names(parameters) %in% rlang::fn_fmls_names(get(read_fn)))] + + result <- tryCatch( + rlang::exec(read_fn, !!!parameters), + error = function(e) { + # Fall back to rio::import + message("Primary loader failed for ", basename(path), ", trying rio::import") + tryCatch( + rio::import(path), + error = function(e2) { + message("Failed to load ", basename(path), ": ", e2$message) + NULL + } + ) + } + ) + + if (!is.null(result) && NROW(result) < 1) { + message("File loaded but contains no rows, skipping: ", basename(path)) + return(NULL) + } + + result +} + + +load_folder <- function(folder = "/app/data", envir = .GlobalEnv) { + if (is.null(folder) || !dir.exists(folder)) { + message("No data folder found, skipping load") + return(invisible(NULL)) + } + + files <- list.files(folder, full.names = TRUE) + if (length(files) == 0) { + message("Data folder is empty, skipping load") + return(invisible(NULL)) + } + + loaded <- vapply(files, function(file) { + result <- load_file(file) + if (is.null(result)) + return(FALSE) + name <- tools::file_path_sans_ext(basename(file)) + assign(name, default_parsing(result), envir = envir) + TRUE + }, logical(1)) + + message(sprintf( + "Loaded %d/%d files from %s", + sum(loaded), + length(files), + folder + )) + invisible(loaded) +} From 62aa629ad27e0c5967c685851622e17f0493f2ef Mon Sep 17 00:00:00 2001 From: Andreas Gammelgaard Damsbo Date: Thu, 12 Mar 2026 11:08:14 +0100 Subject: [PATCH 03/15] feat: revised docs on running locally --- README.md | 72 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 7d03d815..8f7ccef3 100644 --- a/README.md +++ b/README.md @@ -25,45 +25,71 @@ This app has the following simple goals: 1. ease quick data overview and basic visualisations for any clinical researcher -## Run locally on your own machine +Here’s a polished and restructured version of your README section for clarity, conciseness, and user-friendliness: -The ***FreesearchR*** app can also run on your own machine with no data transmitted anywhere. Blow are the available options. +## Run Locally on Your Own Machine -### Run from R (or RStduio) +The **FreesearchR** app can be run locally on your machine, ensuring no data is transmitted externally. Below are the available options for setup and configuration. -Working with data in R, FreesearchR is a quick and easy tool to get overview and perform the first explorative analyses to get you going. +### Configuration & Data Loading -Any data available in the your R session will be available to the FreesearchR app. Just follow the below steps to get going: +The app can be configured either by passing a named list to `run_app()` or by setting environment variables in a **Docker Compose** file. The following variables control data access and display behavior. If no values are provided, the app will use the defaults listed below. -1. **Requirement:** You need to have [*R* installed](https://www.r-project.org/) and possibly an editor like [RStudio](https://posit.co/download/rstudio-desktop/). -1. Then open the *R* console and copy/paste the following code, that will install the `{devtools}` package and then the `{FreesearchR}` *R*-package with its dependencies: +**Configuration Variables** - ``` - require("devtools") - devtools::install_github("agdamsbo/FreesearchR") - library(FreesearchR) - # By loading mtcars to the environment, it will be available - # in the interface like any other data.frame - data(mtcars) - launch_FreesearchR() - ``` +| Variable | Description | Default | +|-------------------------|-----------------------------------------------------------------------------|-----------| +| `INCLUDE_GLOBALENV` | Load datasets already present in the global R environment into the app | `FALSE` | +| `DATA_LIMIT_DEFAULT` | Default number of observations for previewing or working with a dataset | `10,000` | +| `DATA_LIMIT_UPPER` | Maximum number of observations a user can set for the upper limit | `100,000` | +| `DATA_LIMIT_LOWER` | Minimum number of observations a user can set for the lower limit | `1` | -### Running with docker compose +### Run from R (or RStudio) -For advanced users, wanting to deploy the FreesearchR app to run anywhere, a docker image is available. +If you're working with data in R, **FreesearchR** is a quick and easy tool for exploratory analysis. -Below is the minimal `docker_compose.yml` file: +1. **Requirement:** Ensure you have [R](https://www.r-project.org/) installed, and optionally an editor like [RStudio](https://posit.co/download/rstudio-desktop/). -``` +2. Open the **R console** and run the following code to install the `{FreesearchR}` package and launch the app: + + ```r + if (!require("devtools")) install.packages("devtools") + devtools::install_github("agdamsbo/FreesearchR") + library(FreesearchR) + # Load sample data (e.g., mtcars) to make it available in the app + data(mtcars) + launch_FreesearchR(INCLUDE_GLOBALENV=TRUE) + ``` + +All the variables specified above can also be passed to the app on launch from R. + +### Running with Docker Compose + +For advanced users, you can deploy **FreesearchR** using Docker. A data folder can be mounted to `/app/data` to automatically load supported file types (`.csv`, `.tsv`, `.txt`, `.xls`, `.xlsx`, `.ods`, `.dta`, `.rds`) at startup. + +To mount a local data folder, add a `volumes` entry to your `docker-compose.yml` file: + +```yaml services: - freesearchr: - image: ghcr.io/agdamsbo/freesearchr:latest - ports: + shiny: + image: ghcr.io/agdamsbo/freesearchr:latest + volumes: + - ./data:/app/data:ro + environment: + - INCLUDE_GLOBALENV=FALSE + - DATA_LIMIT_DEFAULT=10000 + - DATA_LIMIT_UPPER=100000 + - DATA_LIMIT_LOWER=1 + ports: - '3838:3838' restart: on-failure ``` +- The `:ro` flag mounts the folder as **read-only**, preventing the app from modifying your original data files. + +- If no volume is mounted, the app will start without any preloaded datasets. + ## Code of Conduct Please note that the ***FreesearchR*** project is published with a [Contributor Code of Conduct](https://contributor-covenant.org/version/2/1/CODE_OF_CONDUCT.html). By contributing to this project, you agree to abide by its terms. From 39db24c9be979588ef50e1873758ff9bd9229ffb Mon Sep 17 00:00:00 2001 From: Andreas Gammelgaard Damsbo Date: Thu, 12 Mar 2026 11:08:28 +0100 Subject: [PATCH 04/15] docs --- CITATION.cff | 2 +- NEWS.md | 4 +- R/app_version.R | 2 +- R/hosted_version.R | 2 +- R/sysdata.rda | Bin 2661 -> 2667 bytes SESSION.md | 4 +- inst/translations/translation_da.csv | 60 +++++++++++++-------------- inst/translations/translation_sw.csv | 60 +++++++++++++-------------- 8 files changed, 68 insertions(+), 66 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 6d5ebe92..3baa4bf4 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -8,7 +8,7 @@ message: 'To cite package "FreesearchR" in publications use:' type: software license: AGPL-3.0-or-later title: 'FreesearchR: Easy data analysis for clinicians' -version: 26.3.2 +version: 26.3.3 doi: 10.5281/zenodo.14527429 identifiers: - type: url diff --git a/NEWS.md b/NEWS.md index e5800992..570ab7e2 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,8 @@ # FreesearchR 26.3.3 -*NEW* option to pass global settings when running as docker or launching from R. Support for INCLUDE_GLOBALENV, DATA_LIMIT_DEFAULT, DATA_LIMIT_UPPER and DATA_LIMIT_LOWER. Docs are missing... +*NEW* option to pass global settings when running as docker or launching from R. Support for INCLUDE_GLOBALENV, DATA_LIMIT_DEFAULT, DATA_LIMIT_UPPER and DATA_LIMIT_LOWER. Described in the README. + +*FIX* faster data description function. # FreesearchR 26.3.2 diff --git a/R/app_version.R b/R/app_version.R index a87c4470..dccdf7c4 100644 --- a/R/app_version.R +++ b/R/app_version.R @@ -1 +1 @@ -app_version <- function()'26.3.2' +app_version <- function()'26.3.3' diff --git a/R/hosted_version.R b/R/hosted_version.R index 771bd124..2306a9f6 100644 --- a/R/hosted_version.R +++ b/R/hosted_version.R @@ -1 +1 @@ -hosted_version <- function()'v26.3.2-260311' +hosted_version <- function()'v26.3.3-260311' diff --git a/R/sysdata.rda b/R/sysdata.rda index f20ba2552a749586b3c5f0ce62e1446fd82b4b4c..370024a5ce9e7ade03d0b750b138398b0b3598bb 100644 GIT binary patch delta 2584 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 diff --git a/SESSION.md b/SESSION.md index 1193d865..907e05c0 100644 --- a/SESSION.md +++ b/SESSION.md @@ -15,7 +15,7 @@ |rstudio |2026.01.1+403 Apple Blossom (desktop) | |pandoc |3.6.4 @ /opt/homebrew/bin/ (via rmarkdown) | |quarto |1.7.30 @ /usr/local/bin/quarto | -|FreesearchR |26.3.2.260311 | +|FreesearchR |26.3.3.260311 | -------------------------------------------------------------------------------- @@ -83,7 +83,7 @@ |foreach |1.5.2 |2022-02-02 |CRAN (R 4.5.0) | |foreign |0.8-90 |2025-03-31 |CRAN (R 4.5.2) | |Formula |1.2-5 |2023-02-24 |CRAN (R 4.5.0) | -|FreesearchR |26.3.2 |NA |NA | +|FreesearchR |26.3.3 |NA |NA | |fs |1.6.6 |2025-04-12 |CRAN (R 4.5.0) | |gdtools |0.5.0 |2026-02-09 |CRAN (R 4.5.2) | |generics |0.1.4 |2025-05-09 |CRAN (R 4.5.0) | diff --git a/inst/translations/translation_da.csv b/inst/translations/translation_da.csv index 86a7f72b..15991bfe 100644 --- a/inst/translations/translation_da.csv +++ b/inst/translations/translation_da.csv @@ -1,9 +1,6 @@ "en","da" "Hello","Hej" "Get started","Kom i gang" -"File upload","Upload fil" -"REDCap server export","Eksport fra REDCap server" -"Local or sample data","Lokal eller testdata" "Please be mindfull handling sensitive data","Pas godt på og overvej nøje hvordan du håndterer personfølsomme data" "Quick overview","Hurtigt overblik" "Select variables for final import","Vælg variabler til den endelige import" @@ -132,7 +129,6 @@ "Coefficients plot","Koefficientgraf" "Checks","Test af model" "Browse observations","Gennemse observationer" -"Settings","Indstillinger" "The following error occured on determining correlations:","Følgende fejl opstod i forbindelse med korrelationsanalysen:" "No missing observations","Ingen manglende observationer" "There is a total of {p_miss} % missing observations.","Der er i alt {p_miss} % manglende observationer." @@ -145,15 +141,7 @@ "Missings","Manglende observationer" "Class","Klasse" "Observations","Observationer" -"Data classes and missing observations","Dataklasser og manglende observationer" -"Sure you want to reset data? This cannot be undone.","Er du sikker på at du vil gendanne data? Det kan ikke fortrydes." "Cancel","Afbryd" -"Confirm","Bekræft" -"The filtered data","Filtreret data" -"Create new factor","Ny kategorisk variabel" -"Create new variables","Opret nye variabler" -"Select data types to include","Vælg datatyper, der skal inkluderes" -"Uploaded data overview","Overblik over uploaded data" "Specify covariables","Angiv kovariabler" "If none are selected, all are included.","Hvis ingen er valgt inkluderes alle." "Analyse","Analysér" @@ -161,7 +149,6 @@ "Press 'Analyse' to create the regression model and after changing parameters.","Tryk 'Analysér' for at danne regressionsmodel og for at opdatere hvis parametre ændres." "Show p-value","Vis p-værdi" "Model checks","Model-test" -"Please confirm data reset!","Bekræft gendannelse af data!" "Import data from REDCap","Importér data fra REDCap" "REDCap server","REDCap-server" "Web address","Serveradresse" @@ -210,18 +197,7 @@ "Multivariable regression model checks","Tests af multivariabel regressionsmodel" "Grouped by {get_label(data,ter)}","Grupperet efter {get_label(data,ter)}" "Option to perform statistical comparisons between strata in baseline table.","Mulighed for at udføre statistiske tests mellem strata i oversigtstabellen." -"The data includes {n_col} variables. Please limit to 100.","Data indeholder {n_col} variabler. Begræns venligst til 100." -"Data import","Data import" -"Data import formatting","Formatering af data ved import" -"Data modifications","Ændringer af data" -"Variables filter","Variables filter" -"Data filter","Data filter" -"Data characteristics table","Oversigtstabel" -"The dataset without text variables","Datasættet uden variabler formateret som tekst" -"Creating the table. Hold on for a moment..","Opretter tabellen. Vent et øjeblik.." "Generating the report. Hold on for a moment..","Opretter rapporten. Vent et øjeblik.." -"We encountered the following error showing missingness:","Under analysen af manglende observationer opstod følgende fejl:" -"We encountered the following error browsing your data:","I forsøget på at vise en dataoversigt opstod følgende fejl:" "Choose a name for the column to be created or modified, then enter an expression before clicking on the button below to create the variable, or cancel to exit without saving anything.","Vælg et navn til den nye variabel, skriv din formel og tryk så på knappen for at gemme variablen, eller annuler for at lukke uden at gemme." "Please fill in web address and API token, then press 'Connect'.","Udfyld serveradresse og API-nøgle, og tryk så 'Fobind'." "Other","Other" @@ -254,16 +230,12 @@ "Browse data preview","Forhåndsvisning af resultat" "Split character string","Opdel tegnstreng" "Split text","Opdel tekst" -"Split a character string by a common delimiter","Opdel en tekstkolonne med en fælles afgrænser" "Apply split","Anvend opdeling" "Stacked relative barplot","Stablet relativt søjlediagram" "Create relative stacked barplots to show the distribution of categorical levels","Opret relative stablede søjlediagrammer for at vise fordelingen af kategoriske niveauer" "Side-by-side barplot","Side om side barplot" "Create side-by-side barplot to show the distribution of categorical levels","Opret et side-om-side søjlediagram for at vise fordelingen af kategoriske niveauer" "Select table theme","Vælg tema" -"Level of detail","Detaljeniveau" -"Minimal","Minimal" -"Extensive","Stor" "Letters","Bogstaver" "Words","Ord" "Shorten to first letters","Afkort til første bogstaver" @@ -312,7 +284,6 @@ "When you need more advanced tools, you'll be prepared to use R directly.","Når du har brug for mere avancerede værktøjer, vil du være forberedt på at bruge R direkte." "The app contains a selelct number of features and will guide you through key analyses.","Appen indeholder udvalgte funktioner, og guider dig gennem de vigtigste analyser." "Sort by Levels","Sorter efter niveauer" -"Reorder factor levels","Omarranger niveauer" "Modify factor levels","Ændr kategoriske niveauer" "Reorder or rename the levels of factor/categorical variables.","Ændr navn eller rækkefølge på kategorisk variabel." "Maximum number of observations:","Maximale antal observationer:" @@ -326,5 +297,34 @@ "No data present.","Ingen data tilstede." "You have provided a complete dataset with no missing values.","Data er uden manglende observationer." "Start by loading data.","Start med at vælge data." -"Sample data","Træningsdata" "Create a new variable; otherwise replaces (Updating labels always creates new variable)","Create a new variable; otherwise replaces (Updating labels always creates new variable)" +"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" +"Reorder factor levels","Reorder factor levels" +"Split a character string by a common delimiter","Split a character string by a common delimiter" +"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:" +"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" +"Level of detail","Level of detail" +"Minimal","Minimal" +"Extensive","Extensive" +"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.." +"File upload","File upload" +"REDCap server export","REDCap server export" +"Local or sample data","Local or sample data" +"Sample data","Sample data" +"Settings","Settings" +"Create new factor","Create new factor" diff --git a/inst/translations/translation_sw.csv b/inst/translations/translation_sw.csv index 1193ea71..4388ae6e 100644 --- a/inst/translations/translation_sw.csv +++ b/inst/translations/translation_sw.csv @@ -1,9 +1,6 @@ "en","sw" "Hello","Habari" "Get started","Tuanze!" -"File upload","Upakiaji wa faili" -"REDCap server export","Usafirishaji wa seva ya REDCap" -"Local or sample data","Data ya ndani au ya sampuli" "Please be mindfull handling sensitive data","Tafadhali kuwa mwangalifu kushughulikia data nyeti" "Quick overview","Muhtasari wa haraka" "Select variables for final import","Chagua vigezo vya kuingiza mwisho" @@ -132,7 +129,6 @@ "Coefficients plot","Mchoro wa viambato" "Checks","Hundi" "Browse observations","Vinjari uchunguzi" -"Settings","Mipangilio" "The following error occured on determining correlations:","Hitilafu ifuatayo ilitokea katika kubaini uhusiano:" "No missing observations","Hakuna uchunguzi unaokosekana" "There is a total of {p_miss} % missing observations.","Kuna jumla ya uchunguzi wa {p_miss}% unaokosekana." @@ -145,15 +141,7 @@ "Missings","Hazipo" "Class","Darasa" "Observations","Uchunguzi" -"Data classes and missing observations","Madarasa ya data na uchunguzi unaokosekana" -"Sure you want to reset data? This cannot be undone.","Una uhakika unataka kuweka upya data? Hii haiwezi kutenduliwa." "Cancel","Ghairi" -"Confirm","Thibitisha" -"The filtered data","Data iliyochujwa" -"Create new factor","Unda kipengele kipya" -"Create new variables","Unda vigezo vipya" -"Select data types to include","Chagua aina za data za kujumuisha" -"Uploaded data overview","Muhtasari wa data iliyopakiwa" "Specify covariables","Bainisha vigeu vinavyoweza kuunganishwa" "If none are selected, all are included.","Ikiwa hakuna aliyechaguliwa, wote wamejumuishwa." "Analyse","Changanua" @@ -161,7 +149,6 @@ "Press 'Analyse' to create the regression model and after changing parameters.","Bonyeza 'Changanua' ili kuunda modeli ya urejeshaji na baada ya kubadilisha vigezo." "Show p-value","Onyesha thamani ya p" "Model checks","Ukaguzi wa modeli" -"Please confirm data reset!","Tafadhali thibitisha urejeshaji wa data!" "Import data from REDCap","Ingiza data kutoka REDCap" "REDCap server","Seva ya REDCap" "Web address","Anwani ya wavuti" @@ -210,18 +197,7 @@ "Multivariable regression model checks","Ukaguzi wa modeli ya urejeshaji unaoweza kubadilika-badilika" "Grouped by {get_label(data,ter)}","Imepangwa kwa makundi kulingana na {get_label(data,ter)}" "Option to perform statistical comparisons between strata in baseline table.","Chaguo la kufanya ulinganisho wa takwimu kati ya tabaka katika jedwali la msingi." -"The data includes {n_col} variables. Please limit to 100.","Data inajumuisha vigezo vya {n_col}. Tafadhali punguza hadi 100." -"Data import","Uingizaji wa data" -"Data import formatting","Uumbizaji wa kuingiza data" -"Data modifications","Marekebisho ya data" -"Variables filter","Kichujio cha vigeugeu" -"Data filter","Kichujio cha data" -"Data characteristics table","Jedwali la sifa za data" -"The dataset without text variables","Seti ya data bila vigeu vya maandishi" -"Creating the table. Hold on for a moment..","Kutengeneza meza. Subiri kwa muda.." "Generating the report. Hold on for a moment..","Inazalisha ripoti. Subiri kidogo.." -"We encountered the following error showing missingness:","Tulikutana na hitilafu ifuatayo inayoonyesha ukosefu:" -"We encountered the following error browsing your data:","Tulipata hitilafu ifuatayo wakati wa kuvinjari data yako:" "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.","Chagua jina la safu wima itakayoundwa au kurekebishwa, kisha ingiza usemi kabla ya kubofya kitufe kilicho hapa chini ili kuunda kigezo, au ghairi ili kutoka bila kuhifadhi chochote." "Other","Nyingine" "Hour of the day","Saa ya siku" @@ -249,7 +225,6 @@ "Split string to multiple observations (rows) in the same column. Also ads id and instance columns","Gawanya mfuatano katika uchunguzi mwingi (safu) katika safu wima moja. Pia vitambulisho vya matangazo na safu wima za mfano" "Split character string","Gawanya mfuatano wa herufi" "Split text","Gawanya maandishi" -"Split a character string by a common delimiter","Gawanya mfuatano wa herufi kwa kitenganishi cha kawaida" "Select delimiter","Chagua kidhibiti" "Browse data preview","Vinjari hakikisho la data" "Original data","Data asili" @@ -261,9 +236,6 @@ "Side-by-side barplot","Kipande cha baruni cha kando kwa kando" "Create side-by-side barplot to show the distribution of categorical levels","Unda mpangilio wa barufa kando ili kuonyesha usambazaji wa viwango vya kategoria" "Select table theme","Chagua mandhari ya jedwali" -"Level of detail","Kiwango cha maelezo" -"Minimal","Kidogo" -"Extensive","Kina" "Letters","Barua" "Words","Maneno" "Shorten to first letters","Fupisha herufi za kwanza" @@ -312,7 +284,6 @@ "When you need more advanced tools, you'll be prepared to use R directly.","Unapohitaji zana za hali ya juu zaidi, utakuwa tayari kutumia R moja kwa moja." "The app contains a selelct number of features and will guide you through key analyses.","The app contains a selelct number of features and will guide you through key analyses." "Sort by Levels","Sort by Levels" -"Reorder factor levels","Reorder factor levels" "Modify factor levels","Modify factor levels" "Reorder or rename the levels of factor/categorical variables.","Reorder or rename the levels of factor/categorical variables." "Maximum number of observations:","Maximum number of observations:" @@ -326,5 +297,34 @@ "No data present.","No data present." "You have provided a complete dataset with no missing values.","You have provided a complete dataset with no missing values." "Start by loading data.","Start by loading data." -"Sample data","Sample data" "Create a new variable; otherwise replaces (Updating labels always creates new variable)","Create a new variable; otherwise replaces (Updating labels always creates new variable)" +"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" +"Reorder factor levels","Reorder factor levels" +"Split a character string by a common delimiter","Split a character string by a common delimiter" +"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:" +"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" +"Level of detail","Level of detail" +"Minimal","Minimal" +"Extensive","Extensive" +"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.." +"File upload","File upload" +"REDCap server export","REDCap server export" +"Local or sample data","Local or sample data" +"Sample data","Sample data" +"Settings","Settings" +"Create new factor","Create new factor" From a73f8b1ba3767894359fd19bd0016898cb76bb13 Mon Sep 17 00:00:00 2001 From: Andreas Gammelgaard Damsbo Date: Thu, 12 Mar 2026 11:13:06 +0100 Subject: [PATCH 05/15] fixed spelling --- R/launch_FreesearchR.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/launch_FreesearchR.R b/R/launch_FreesearchR.R index 089cea90..99046649 100644 --- a/R/launch_FreesearchR.R +++ b/R/launch_FreesearchR.R @@ -18,7 +18,7 @@ #' data(mtcars) #' launch_FreesearchR(launch.browser = TRUE) #' } -launch_FreesearchR <- function(inlcude_globalenv = TRUE, +launch_FreesearchR <- function(include_globalenv = TRUE, data_limit_default = 1000, data_limit_upper = 100000, data_limit_lower = 1, From 95fc0a4d5f3a731583eec6f5c3fdab73f3634715 Mon Sep 17 00:00:00 2001 From: Andreas Gammelgaard Damsbo Date: Thu, 12 Mar 2026 11:32:06 +0100 Subject: [PATCH 06/15] fix: trying to fix launching with globals --- R/hosted_version.R | 2 +- R/launch_FreesearchR.R | 19 +++++++++++++++---- man/launch_FreesearchR.Rd | 8 ++++---- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/R/hosted_version.R b/R/hosted_version.R index 2306a9f6..b15a5737 100644 --- a/R/hosted_version.R +++ b/R/hosted_version.R @@ -1 +1 @@ -hosted_version <- function()'v26.3.3-260311' +hosted_version <- function()'v26.3.3-260312' diff --git a/R/launch_FreesearchR.R b/R/launch_FreesearchR.R index 99046649..a789f185 100644 --- a/R/launch_FreesearchR.R +++ b/R/launch_FreesearchR.R @@ -43,14 +43,15 @@ launch_FreesearchR <- function(include_globalenv = TRUE, ## Helper to set env variables get_config <- function(var_name, default = NULL) { - # First check environment variables (set by Docker) - val <- Sys.getenv(var_name, unset = NA) + val <- Sys.getenv(var_name, unset = NA_character_) - if (!is.na(val) && nzchar(val)) { + # Only use env var if it is explicitly set and non-empty + if (!is.na(val) && nzchar(trimws(val))) { + if (is.logical(default)) return(to_logical(val)) + if (is.numeric(default)) return(as.numeric(val)) return(val) } - # Fall back to default (can be overridden when launching from R) if (!is.null(default)) { return(default) } @@ -58,6 +59,16 @@ get_config <- function(var_name, default = NULL) { stop(paste("Required config variable not set:", var_name)) } +to_logical <- function(x) { + result <- switch(tolower(trimws(as.character(x))), + "true" = , "1" = , "yes" = TRUE, + "false" = , "0" = , "no" = FALSE, + NA + ) + if (is.na(result)) stop(paste("Cannot coerce to logical:", x)) + result +} + ## File loader - based on the module, uses hard coded default values load_file <- function(path) { diff --git a/man/launch_FreesearchR.Rd b/man/launch_FreesearchR.Rd index e052ba7b..2ab6c607 100644 --- a/man/launch_FreesearchR.Rd +++ b/man/launch_FreesearchR.Rd @@ -5,7 +5,7 @@ \title{Easily launch the FreesearchR app} \usage{ launch_FreesearchR( - inlcude_globalenv = TRUE, + include_globalenv = TRUE, data_limit_default = 1000, data_limit_upper = 1e+05, data_limit_lower = 1, @@ -13,6 +13,9 @@ launch_FreesearchR( ) } \arguments{ +\item{include_globalenv}{flag to include global env (local data) as option +when loading data} + \item{data_limit_default}{default data set observations limit} \item{data_limit_upper}{data set observations upper limit} @@ -20,9 +23,6 @@ launch_FreesearchR( \item{data_limit_lower}{data set observations lower limit} \item{...}{passed on to \code{shiny::runApp()}} - -\item{include_globalenv}{flag to include global env (local data) as option -when loading data} } \value{ shiny app From a8ff1c82040f7362faad45b289373691a9293fa1 Mon Sep 17 00:00:00 2001 From: Andreas Gammelgaard Damsbo Date: Thu, 12 Mar 2026 11:58:09 +0100 Subject: [PATCH 07/15] packaging --- .gitignore | 1 - R/sysdata.rda | Bin 2667 -> 2668 bytes SESSION.md | 4 +- app_docker/app.R | 221 ++++++++++++++++----- app_docker/translations/translation_da.csv | 60 +++--- app_docker/translations/translation_sw.csv | 60 +++--- inst/apps/FreesearchR/app.R | 221 ++++++++++++++++----- 7 files changed, 406 insertions(+), 161 deletions(-) diff --git a/.gitignore b/.gitignore index 39765ab7..ce227491 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,6 @@ dev/ .DS_Store .quarto app/rsconnect -inst/shiny-examples/casting/functions.R functions.R docs inst/doc diff --git a/R/sysdata.rda b/R/sysdata.rda index 370024a5ce9e7ade03d0b750b138398b0b3598bb..bf735f2dcec4f96eb89c18b40a68635bbf4208b7 100644 GIT binary patch delta 2667 zcmV-x3Y7Kh6zmiZLRx4!F+o`-Q(5&5gQSrT9)A}(mNyRvP^yh63KSR5z6t_>Du)eB zKqf;$GHA#`V5g9#)PAHefB-alhMuO$2C9ApCYmKYQ}mvw@ijN4GKOn7 zKz}p=pa1|GXaEFCB-F^lG$Yi}pvj4#27mwzO$JRe10~5<5i^Pzh+;5M3oN37mciHgIbWw^6+ctOr$P_-c8P4LlB#BOazut3PTBRVs|ahrENvZh@gy!@$qly zU*i8>HbYi^3XOGe5ACl!GHYUU%%<3;we;Lb-d2vA_!F(?caz5!S^ke z*Kp+TNxL~t-LZV%pVb$EtoHNAatO!KH zAc8#Z&yOi^Fv;%ZeW1?)xhfM~xOcU=vSi9^W;o=o$S!>5PX`fFffI&x7TY^l>woau zbvMNNK|FIC5;V;^V|c+^_?zGOJ}9tX0YA+#guAm zG%K(9G8bTO7HH72VV;~5R#!T(K-zRlz3tUp6vbE|NerD>yn=kDUv8 zcnZ_dboU}1?wq|TFf=uqEZp`Svd0^BAeV-v=4}{vEuAzn?bkmHYn%*1r7+9ddX+B< zCqfE2kp;gm=-Y=@=1F)Bs3?i9C*g+Oz6 zH%wYetEB)#SE+*MZ*QBGhuxnLLA+wkNtH?shF()qUp-9B4Lgq3APS{{O!73eo+eHj!$(`A@=zpy&#U~VF#xIc^ zc4M9T<=m1;-GZUM)WPc0t~|~%O$Wfr=sq7yzh%$Wq9YBsnW5S8f$lL^yh$j>FYB>8Y6I-frQJT;(;xr>;Aw zWZhbd(JR)v=q<$p{YnA>tTIlM7V7D2UC zF)L82$x(sgc#J8gYc#-Ty6D0bwxqEXiWAD1m|H(SQ9{&Z%FR*Y>axDYKtGFVnol@TjM5O8V>8eq!LC=7y6 zQ5}kz)&@GzEq{qi<@g@aKsR83Zq;xwVK`YVg(}JtAdm^c?NU{%x7TGF! znbmZuZIxxusjWd##;PG!(y=th%d9-;7{L(zRK19y(^rp7#mfqx7uDf8#)UV#iZVqK zw4?@-Jj=9jL@gePrTG@nZ>$K$6- ztq7-0Eh$8j6rkW@tYm#3gU{DF>)ditDbd=NrIn#psID+d_-CG4Yo6|V_ssV>-r9=O zqa-yniK{Dlcdd@qOIooJl^7B$t8p$&^M4wkJO>vA&hCviYxGnH?q2a`95d1FaF|+} z397+t`hSIV)&deuCgvh)hoEqXfB=-kPtlsK06P39!Xf|yx-o=A00n*pNdpUE;pIh0 zo&m|g^&%0Nt1})yVXvMvHPfanoE-1$Y+n1~!)u@$Nbv1Bk9?PyMCL!=4X)Fq)W7fc zh@iX{>wLvjzPA}co*|yg&d*#v`ngm+?h;cWl7GGRGOgpx?kE>0+gyb~PO0)*j3wi2 zZ6-j)t z{Un!eCl!@I5NS{2-j+WPzG%p*{Voj&Hse7gY{Ra#wGuo&T$bB4Ay-^)Fdn7iIIl3(SEQ*dk?z0rnWsa+}D*ot7Vt9XE*V zQ6+n~1g)9}sQ3%saQEq~duLz5ci zf~?_eQ-1gK1+ONK8pp_-6vJNZ@~^B^=8E<1`Q*~gWw6RYe@AOqbO=z#QD6EDPVMUS ztaHu`!don(Q;x(o5|1g`po=vS)T<}Vk9OSAnw_InvTfN`O$LmNV8b)8rn9VxN|kC# z_024aFw?17`TO^}{WH9LYqnYNXDQ5(UTF0u?DKA{!Bs|YBbe9DU|kwAE^x*10XU000Ton&^0`b z2}(vlWYYlv1|}v5WEmL%88m3YCXzy$nrJ}NMt}oA00000000o84^YvgMutFW4FJ#v zfPZKJ2ATi?5{We$FqsJT7=tE8KpFr5F*F%8$Oe}sTqML$%|i)(fLUb}6t*a-tCENc z^6^?#6dKfqXOo9x6v{&^GXLAWzvBp-kxS&3PzplyF^>*z=lkD7HlyG{?F zW3Fc%y2IguQh*R}e%(~OuY*L42*kooiRtnHKqJj`G=Lfl| zy8M}orlQY|kHgiTHlre2wvRf_+bqm#W;tYxt`{}tO!g2$c@qU>6P+_pzvZsWbAO5Q zf_P*#Bx#y*#_@u);BSA$@kN6CinW^7O|`o93-uU+w_Q%Zu+qZ_X;@xi<$V;g=qodF zENryiC!vB8nc<7IW@Dol1;b2g=W9g85q8aX(ZTuA3GUMv5rkEROx@hX3o&sJTqFoB z8O4#72)Jf-63@ZHjm~d`o)s4_e19n3>Ih`+#qSBnR)jXPFmG&&c+;GRYu=G>ZvmaX zhfjo%?}TOUV8GDUXtQ(JbK8zKXhAOxOU&9Z=(cj)WzS5z@v4w93Y5Vv>T1-wD4K9l z&4?}Odq&(E*EHqOHsGQrz@Q@p00u{Ztoe| zN~@&+L#eBN=WBB&Ru67`K?doEIVlLqB!q$_RAf<9MOcht#t5LIgA^Dju~lM=7{Vwl z5fN2b3ltF|sw>y(c6qa_y;a@u=V=gFy|Y;+?smB0?Kd~WM)iQRi%NSM5rk?^gpqEp3Ylnw ztSFF98=*mhM3EVh5*C9XodF_5(uX-{-DsMWFucLdg<@XJQAD&NRGA|23A_~-Yk8J| z+urWvU0x{`NlODrvkMTHV( zTtcF6qLs@+h@?OUA(AW3f&q3aj?fmeb{PudPWQadZiK0o4GvRb$3R_ZGibV;~n3!8We4>NT2q$;Xasb4TML~#8T(bbe(O_9< zGu5!kzpJsQgq1pPbcO78IdzemDOxeKyFh_z36jFHjHroPAcKQYSknepbO6XC?ve6p zVz4pRfow`%FMmMx3IV+Y1A41{g9mcSWGPlqkpzHFl>*5jdoQ21(nXMY*jr?&)n^sb zrM6XOA(o*k z&c8LC3=W_WA{o=C*UHYCRFygUT;-u{60o*N6$w}Xq<@TC zm(QqJO@DA9B~x-z1*mDp2#5d)>1@t0mkB`~j)=H96{=cwA z1>m+>;w5eMILZw04E0`h`eFIYjECIeH8LAj_kT%}%y^x}0^<8Bn2=MX`K?A0@vb%# zAY#Vufqo1t5Hk-U{d;{Yktkj3!vlA&d8aJ6vw5N?RUcb?o5Di{MiIpzwkqH4wRsR( zL{iPAYaVnRFS@{fk%Cks=B*KU->NTXqtRlqEy3NdPc80ht!|1itwL^Es9F=TSBuX|38l|;8pD9ms%+jIH(o%KKlTD+@@$QM-JINUqO z)ik?dIIENa29-Vi$y@OJ=!}Z5-Ee41HycH#ZY~!+{QqIwM@7SwQexOvT1olquLfvd zzo(C85xj*~=jCkl&hS@_!C(f#Jm0L%ANjP6bSs%`YVxa0G*y-bpqE zAB_E6Lh6{^RGZh-@Cu^A z3k1O{)d7fd+NgJx)(w#1OPO!MZF#lP>CJ;cL3m=Rv$o?ad$*zXAuL%sT98r3bbsi~ z6s676fiG8AcRU)%UqOVZglmI({$6Z=&VEEC1}IN5&Z`Qm9>~Cib3!vzVDtC4adNc8 zy5+kmiB?q`%{Q@6%ZKuFHdw75#vHzbKwWnVI4$Rw-n1Nutq4Kp7vE}3i)oVsfLe$W z(`p_b1`hW*VY6EQn-mNnQ%PO98h;LG5iDBIT(<2s`7`J$C~_gG6dcMcp(w#JD5}&e z9&!&?B5HdQt31r^{u}WW0_@L1^p(+e-;wZML^J3N0KOb;5xj>lj!xcP#c5hwGJj%+7B$NS zQNqZkdB2b?IJ9rlK7w#l4SO=%S74KxD$}RQHkL~*M%jh?d9`;yg{C^n|J-7iX0IxT zR#0XW)nyqt>qB8E_R_@!S*V7EQ9guwHR?uc)rAv^>y1ROSVYDuEoBnebrB&-jZUj& zF0KTl4M@Bl*}DDNZgFnib$^PW-E7genq_q#{c9j=_apyHh-J;pdG+EMjh| zdW`pMo}E3=UtBSj<&jdloQ+nljaBUuyq9uly`>?>xyBX}qDi9cdmfKqq>2h%MX{)I Y2i67~EG!bkWdDn~BAh5lR=9-Z09K#SfdBvi diff --git a/SESSION.md b/SESSION.md index 907e05c0..3e97a260 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 |2026-03-11 | +|date |2026-03-12 | |rstudio |2026.01.1+403 Apple Blossom (desktop) | |pandoc |3.6.4 @ /opt/homebrew/bin/ (via rmarkdown) | |quarto |1.7.30 @ /usr/local/bin/quarto | -|FreesearchR |26.3.3.260311 | +|FreesearchR |26.3.3.260312 | -------------------------------------------------------------------------------- diff --git a/app_docker/app.R b/app_docker/app.R index 7f99dcd4..72d8290a 100644 --- a/app_docker/app.R +++ b/app_docker/app.R @@ -1,7 +1,7 @@ ######## -#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//RtmpsadCw0/file14b247eddca29.R +#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//Rtmprp4Sq1/fileb602d982aa3.R ######## i18n_path <- here::here("translations") @@ -45,8 +45,7 @@ library(rlang) library(shiny.i18n) library(fontawesome) -print(list.files("www/fonts/montserrat", full.names = TRUE)) - +# print(list.files("www/fonts/montserrat", full.names = TRUE)) ## Translation init i18n <- shiny.i18n::Translator$new(translation_csvs_path = i18n_path) @@ -54,16 +53,6 @@ i18n <- shiny.i18n::Translator$new(translation_csvs_path = i18n_path) # i18n <- shiny.i18n::Translator$new(translation_csvs_path = here::here("inst/translations/")) i18n$set_translation_language("en") -## Global freesearchR vars -if (!"global_freesearchR" %in% ls(name = globalenv())) { - global_freesearchR <- list( - include_globalenv = FALSE, - data_limit_default = 1000, - data_limit_upper = 10000, - data_limit_lower = 1 - ) -} - ######## #### Current file: /Users/au301842/FreesearchR/app/functions.R @@ -75,7 +64,7 @@ if (!"global_freesearchR" %in% ls(name = globalenv())) { #### Current file: /Users/au301842/FreesearchR/R//app_version.R ######## -app_version <- function()'26.3.2' +app_version <- function()'26.3.3' ######## @@ -4035,33 +4024,28 @@ missing_fraction <- function(data) { #' sample(c(1:8, NA), 20, TRUE) #' ) |> data_description() data_description <- function(data, data_text = "Data") { - data <- if (shiny::is.reactive(data)) - data() - else - data + # Resolve reactive once + if (shiny::is.reactive(data)) data <- data() + + # Early return if null + if (is.null(data)) return(i18n$t("No data present.")) n <- nrow(data) + + # Early return if empty + if (n == 0L) return(i18n$t("No data present.")) + n_var <- ncol(data) - n_complete <- sum(complete.cases(data)) + + # Faster complete.cases alternative using rowSums on NA matrix + n_complete <- n - sum(rowSums(is.na(data)) > 0L) p_complete <- signif(100 * n_complete / n, 3) - if (is.null(data)) { - i18n$t("No data present.") - } else { - glue::glue( - i18n$t( - "{data_text} has {n} observations and {n_var} variables, with {n_complete} ({p_complete} %) complete cases." - ) + glue::glue( + i18n$t( + "{data_text} has {n} observations and {n_var} variables, with {n_complete} ({p_complete} %) complete cases." ) - } - # sprintf( - # "%s has %s observations and %s variables, with %s (%s%%) complete cases.", - # data_text, - # n, - # n_var, - # n_complete, - # p_complete - # ) + ) } @@ -4527,7 +4511,7 @@ data_types <- function() { #### Current file: /Users/au301842/FreesearchR/R//hosted_version.R ######## -hosted_version <- function()'v26.3.2-260311' +hosted_version <- function()'v26.3.3-260312' ######## @@ -5987,16 +5971,16 @@ landing_page_ui <- function(i18n) { #' data(mtcars) #' launch_FreesearchR(launch.browser = TRUE) #' } -launch_FreesearchR <- function(inlcude_globalenv = TRUE, +launch_FreesearchR <- function(include_globalenv = TRUE, data_limit_default = 1000, data_limit_upper = 100000, data_limit_lower = 1, ...) { - global_freesearchR <- list( - include_globalenv = include_globalenv, - data_limit_default = data_limit_default, - data_limit_upper = data_limit_upper, - data_limit_lower = data_limit_lower + Sys.setenv( + INCLUDE_GLOBALENV = include_globalenv, + DATA_LIMIT_DEFAULT = data_limit_default, + DATA_LIMIT_UPPER = data_limit_upper, + DATA_LIMIT_LOWER = data_limit_lower ) appDir <- system.file("apps", "FreesearchR", package = "FreesearchR") @@ -6010,6 +5994,123 @@ launch_FreesearchR <- function(inlcude_globalenv = TRUE, } +## Helper to set env variables +get_config <- function(var_name, default = NULL) { + val <- Sys.getenv(var_name, unset = NA_character_) + + # Only use env var if it is explicitly set and non-empty + if (!is.na(val) && nzchar(trimws(val))) { + if (is.logical(default)) return(to_logical(val)) + if (is.numeric(default)) return(as.numeric(val)) + return(val) + } + + if (!is.null(default)) { + return(default) + } + + stop(paste("Required config variable not set:", var_name)) +} + +to_logical <- function(x) { + result <- switch(tolower(trimws(as.character(x))), + "true" = , "1" = , "yes" = TRUE, + "false" = , "0" = , "no" = FALSE, + NA + ) + if (is.na(result)) stop(paste("Cannot coerce to logical:", x)) + result +} + + +## File loader - based on the module, uses hard coded default values +load_file <- function(path) { + read_fns <- list( + ods = "import_ods", + dta = "import_dta", + csv = "import_delim", + tsv = "import_delim", + txt = "import_delim", + xls = "import_xls", + xlsx = "import_xls", + rds = "import_rds" + ) + + ext <- tolower(tools::file_ext(path)) + + if (!ext %in% names(read_fns)) { + message("Unsupported file type, skipping: ", basename(path), " (.", ext, ")") + return(NULL) + } + + read_fn <- read_fns[[ext]] + + parameters <- list( + file = path, + sheet = 1, + skip = 0, + dec = ".", + encoding = "unknown" + ) + + # Trim parameters to only those accepted by the target function + parameters <- parameters[which(names(parameters) %in% rlang::fn_fmls_names(get(read_fn)))] + + result <- tryCatch( + rlang::exec(read_fn, !!!parameters), + error = function(e) { + # Fall back to rio::import + message("Primary loader failed for ", basename(path), ", trying rio::import") + tryCatch( + rio::import(path), + error = function(e2) { + message("Failed to load ", basename(path), ": ", e2$message) + NULL + } + ) + } + ) + + if (!is.null(result) && NROW(result) < 1) { + message("File loaded but contains no rows, skipping: ", basename(path)) + return(NULL) + } + + result +} + + +load_folder <- function(folder = "/app/data", envir = .GlobalEnv) { + if (is.null(folder) || !dir.exists(folder)) { + message("No data folder found, skipping load") + return(invisible(NULL)) + } + + files <- list.files(folder, full.names = TRUE) + if (length(files) == 0) { + message("Data folder is empty, skipping load") + return(invisible(NULL)) + } + + loaded <- vapply(files, function(file) { + result <- load_file(file) + if (is.null(result)) + return(FALSE) + name <- tools::file_path_sans_ext(basename(file)) + assign(name, default_parsing(result), envir = envir) + TRUE + }, logical(1)) + + message(sprintf( + "Loaded %d/%d files from %s", + sum(loaded), + length(files), + folder + )) + invisible(loaded) +} + + ######## #### Current file: /Users/au301842/FreesearchR/R//missings-module.R ######## @@ -10726,9 +10827,9 @@ ui_elements <- function(selection) { layout_params = "dropdown", # title = "Choose a datafile to upload", file_extensions = c(".csv", ".tsv", ".txt", ".xls", ".xlsx", ".rds", ".ods", ".dta"), - limit_default = global_freesearchR$data_limit_default, - limit_lower = global_freesearchR$data_limit_lower, - limit_upper = global_freesearchR$data_limit_upper + limit_default = DATA_LIMIT_DEFAULT, + limit_lower = DATA_LIMIT_LOWER, + limit_upper = DATA_LIMIT_UPPER ) ), @@ -10750,7 +10851,7 @@ ui_elements <- function(selection) { id = "env", title = NULL, packages = c("NHANES", "stRoke", "datasets", "MASS"), - globalenv = global_freesearchR$include_globalenv + globalenv = isTruthy(INCLUDE_GLOBALENV) ) ), # shiny::conditionalPanel( @@ -13601,6 +13702,28 @@ dev_banner <- function(){ } +######## +#### Current file: /Users/au301842/FreesearchR/app/globals.R +######## + +## Setting global variables +INCLUDE_GLOBALENV <- get_config("INCLUDE_GLOBALENV", default = FALSE) +DATA_LIMIT_DEFAULT <- get_config("DATA_LIMIT_DEFAULT", default = 10000) +DATA_LIMIT_UPPER <- get_config("DATA_LIMIT_UPPER", default = 100000) +DATA_LIMIT_LOWER <- get_config("DATA_LIMIT_LOWER", default = 1) + +## Loads folder passed to the docker container and mounted as below: +## +## services: +## shiny: +## image: your-shiny-app +## volumes: +## - ./data:/app/data:ro +## +## All files in the ./data/ folder is attempted loaded +load_folder() + + ######## #### Current file: /Users/au301842/FreesearchR/app/ui.R ######## @@ -13798,9 +13921,9 @@ server <- function(input, output, session) { # selected = "file" # ) - if (isTRUE(global_freesearchR$include_globalenv)) { + if (isTruthy(INCLUDE_GLOBALENV)) { env_label <- i18n$t("Local or sample data") - output$data_sample_text <- shiny::renderText(shiny::helpText( + output$data_sample_text <- shiny::renderUI(shiny::helpText( i18n$t( "Upload a file, get data directly from REDCap or use local or sample data." ) @@ -13893,7 +14016,7 @@ server <- function(input, output, session) { trigger_return = "change", btn_show_data = FALSE, reset = reactive(input$hidden), - limit_data = global_freesearchR$data_limit_upper + limit_data = DATA_LIMIT_UPPER ) shiny::observeEvent(from_env$data(), { diff --git a/app_docker/translations/translation_da.csv b/app_docker/translations/translation_da.csv index 86a7f72b..15991bfe 100644 --- a/app_docker/translations/translation_da.csv +++ b/app_docker/translations/translation_da.csv @@ -1,9 +1,6 @@ "en","da" "Hello","Hej" "Get started","Kom i gang" -"File upload","Upload fil" -"REDCap server export","Eksport fra REDCap server" -"Local or sample data","Lokal eller testdata" "Please be mindfull handling sensitive data","Pas godt på og overvej nøje hvordan du håndterer personfølsomme data" "Quick overview","Hurtigt overblik" "Select variables for final import","Vælg variabler til den endelige import" @@ -132,7 +129,6 @@ "Coefficients plot","Koefficientgraf" "Checks","Test af model" "Browse observations","Gennemse observationer" -"Settings","Indstillinger" "The following error occured on determining correlations:","Følgende fejl opstod i forbindelse med korrelationsanalysen:" "No missing observations","Ingen manglende observationer" "There is a total of {p_miss} % missing observations.","Der er i alt {p_miss} % manglende observationer." @@ -145,15 +141,7 @@ "Missings","Manglende observationer" "Class","Klasse" "Observations","Observationer" -"Data classes and missing observations","Dataklasser og manglende observationer" -"Sure you want to reset data? This cannot be undone.","Er du sikker på at du vil gendanne data? Det kan ikke fortrydes." "Cancel","Afbryd" -"Confirm","Bekræft" -"The filtered data","Filtreret data" -"Create new factor","Ny kategorisk variabel" -"Create new variables","Opret nye variabler" -"Select data types to include","Vælg datatyper, der skal inkluderes" -"Uploaded data overview","Overblik over uploaded data" "Specify covariables","Angiv kovariabler" "If none are selected, all are included.","Hvis ingen er valgt inkluderes alle." "Analyse","Analysér" @@ -161,7 +149,6 @@ "Press 'Analyse' to create the regression model and after changing parameters.","Tryk 'Analysér' for at danne regressionsmodel og for at opdatere hvis parametre ændres." "Show p-value","Vis p-værdi" "Model checks","Model-test" -"Please confirm data reset!","Bekræft gendannelse af data!" "Import data from REDCap","Importér data fra REDCap" "REDCap server","REDCap-server" "Web address","Serveradresse" @@ -210,18 +197,7 @@ "Multivariable regression model checks","Tests af multivariabel regressionsmodel" "Grouped by {get_label(data,ter)}","Grupperet efter {get_label(data,ter)}" "Option to perform statistical comparisons between strata in baseline table.","Mulighed for at udføre statistiske tests mellem strata i oversigtstabellen." -"The data includes {n_col} variables. Please limit to 100.","Data indeholder {n_col} variabler. Begræns venligst til 100." -"Data import","Data import" -"Data import formatting","Formatering af data ved import" -"Data modifications","Ændringer af data" -"Variables filter","Variables filter" -"Data filter","Data filter" -"Data characteristics table","Oversigtstabel" -"The dataset without text variables","Datasættet uden variabler formateret som tekst" -"Creating the table. Hold on for a moment..","Opretter tabellen. Vent et øjeblik.." "Generating the report. Hold on for a moment..","Opretter rapporten. Vent et øjeblik.." -"We encountered the following error showing missingness:","Under analysen af manglende observationer opstod følgende fejl:" -"We encountered the following error browsing your data:","I forsøget på at vise en dataoversigt opstod følgende fejl:" "Choose a name for the column to be created or modified, then enter an expression before clicking on the button below to create the variable, or cancel to exit without saving anything.","Vælg et navn til den nye variabel, skriv din formel og tryk så på knappen for at gemme variablen, eller annuler for at lukke uden at gemme." "Please fill in web address and API token, then press 'Connect'.","Udfyld serveradresse og API-nøgle, og tryk så 'Fobind'." "Other","Other" @@ -254,16 +230,12 @@ "Browse data preview","Forhåndsvisning af resultat" "Split character string","Opdel tegnstreng" "Split text","Opdel tekst" -"Split a character string by a common delimiter","Opdel en tekstkolonne med en fælles afgrænser" "Apply split","Anvend opdeling" "Stacked relative barplot","Stablet relativt søjlediagram" "Create relative stacked barplots to show the distribution of categorical levels","Opret relative stablede søjlediagrammer for at vise fordelingen af kategoriske niveauer" "Side-by-side barplot","Side om side barplot" "Create side-by-side barplot to show the distribution of categorical levels","Opret et side-om-side søjlediagram for at vise fordelingen af kategoriske niveauer" "Select table theme","Vælg tema" -"Level of detail","Detaljeniveau" -"Minimal","Minimal" -"Extensive","Stor" "Letters","Bogstaver" "Words","Ord" "Shorten to first letters","Afkort til første bogstaver" @@ -312,7 +284,6 @@ "When you need more advanced tools, you'll be prepared to use R directly.","Når du har brug for mere avancerede værktøjer, vil du være forberedt på at bruge R direkte." "The app contains a selelct number of features and will guide you through key analyses.","Appen indeholder udvalgte funktioner, og guider dig gennem de vigtigste analyser." "Sort by Levels","Sorter efter niveauer" -"Reorder factor levels","Omarranger niveauer" "Modify factor levels","Ændr kategoriske niveauer" "Reorder or rename the levels of factor/categorical variables.","Ændr navn eller rækkefølge på kategorisk variabel." "Maximum number of observations:","Maximale antal observationer:" @@ -326,5 +297,34 @@ "No data present.","Ingen data tilstede." "You have provided a complete dataset with no missing values.","Data er uden manglende observationer." "Start by loading data.","Start med at vælge data." -"Sample data","Træningsdata" "Create a new variable; otherwise replaces (Updating labels always creates new variable)","Create a new variable; otherwise replaces (Updating labels always creates new variable)" +"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" +"Reorder factor levels","Reorder factor levels" +"Split a character string by a common delimiter","Split a character string by a common delimiter" +"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:" +"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" +"Level of detail","Level of detail" +"Minimal","Minimal" +"Extensive","Extensive" +"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.." +"File upload","File upload" +"REDCap server export","REDCap server export" +"Local or sample data","Local or sample data" +"Sample data","Sample data" +"Settings","Settings" +"Create new factor","Create new factor" diff --git a/app_docker/translations/translation_sw.csv b/app_docker/translations/translation_sw.csv index 1193ea71..4388ae6e 100644 --- a/app_docker/translations/translation_sw.csv +++ b/app_docker/translations/translation_sw.csv @@ -1,9 +1,6 @@ "en","sw" "Hello","Habari" "Get started","Tuanze!" -"File upload","Upakiaji wa faili" -"REDCap server export","Usafirishaji wa seva ya REDCap" -"Local or sample data","Data ya ndani au ya sampuli" "Please be mindfull handling sensitive data","Tafadhali kuwa mwangalifu kushughulikia data nyeti" "Quick overview","Muhtasari wa haraka" "Select variables for final import","Chagua vigezo vya kuingiza mwisho" @@ -132,7 +129,6 @@ "Coefficients plot","Mchoro wa viambato" "Checks","Hundi" "Browse observations","Vinjari uchunguzi" -"Settings","Mipangilio" "The following error occured on determining correlations:","Hitilafu ifuatayo ilitokea katika kubaini uhusiano:" "No missing observations","Hakuna uchunguzi unaokosekana" "There is a total of {p_miss} % missing observations.","Kuna jumla ya uchunguzi wa {p_miss}% unaokosekana." @@ -145,15 +141,7 @@ "Missings","Hazipo" "Class","Darasa" "Observations","Uchunguzi" -"Data classes and missing observations","Madarasa ya data na uchunguzi unaokosekana" -"Sure you want to reset data? This cannot be undone.","Una uhakika unataka kuweka upya data? Hii haiwezi kutenduliwa." "Cancel","Ghairi" -"Confirm","Thibitisha" -"The filtered data","Data iliyochujwa" -"Create new factor","Unda kipengele kipya" -"Create new variables","Unda vigezo vipya" -"Select data types to include","Chagua aina za data za kujumuisha" -"Uploaded data overview","Muhtasari wa data iliyopakiwa" "Specify covariables","Bainisha vigeu vinavyoweza kuunganishwa" "If none are selected, all are included.","Ikiwa hakuna aliyechaguliwa, wote wamejumuishwa." "Analyse","Changanua" @@ -161,7 +149,6 @@ "Press 'Analyse' to create the regression model and after changing parameters.","Bonyeza 'Changanua' ili kuunda modeli ya urejeshaji na baada ya kubadilisha vigezo." "Show p-value","Onyesha thamani ya p" "Model checks","Ukaguzi wa modeli" -"Please confirm data reset!","Tafadhali thibitisha urejeshaji wa data!" "Import data from REDCap","Ingiza data kutoka REDCap" "REDCap server","Seva ya REDCap" "Web address","Anwani ya wavuti" @@ -210,18 +197,7 @@ "Multivariable regression model checks","Ukaguzi wa modeli ya urejeshaji unaoweza kubadilika-badilika" "Grouped by {get_label(data,ter)}","Imepangwa kwa makundi kulingana na {get_label(data,ter)}" "Option to perform statistical comparisons between strata in baseline table.","Chaguo la kufanya ulinganisho wa takwimu kati ya tabaka katika jedwali la msingi." -"The data includes {n_col} variables. Please limit to 100.","Data inajumuisha vigezo vya {n_col}. Tafadhali punguza hadi 100." -"Data import","Uingizaji wa data" -"Data import formatting","Uumbizaji wa kuingiza data" -"Data modifications","Marekebisho ya data" -"Variables filter","Kichujio cha vigeugeu" -"Data filter","Kichujio cha data" -"Data characteristics table","Jedwali la sifa za data" -"The dataset without text variables","Seti ya data bila vigeu vya maandishi" -"Creating the table. Hold on for a moment..","Kutengeneza meza. Subiri kwa muda.." "Generating the report. Hold on for a moment..","Inazalisha ripoti. Subiri kidogo.." -"We encountered the following error showing missingness:","Tulikutana na hitilafu ifuatayo inayoonyesha ukosefu:" -"We encountered the following error browsing your data:","Tulipata hitilafu ifuatayo wakati wa kuvinjari data yako:" "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.","Chagua jina la safu wima itakayoundwa au kurekebishwa, kisha ingiza usemi kabla ya kubofya kitufe kilicho hapa chini ili kuunda kigezo, au ghairi ili kutoka bila kuhifadhi chochote." "Other","Nyingine" "Hour of the day","Saa ya siku" @@ -249,7 +225,6 @@ "Split string to multiple observations (rows) in the same column. Also ads id and instance columns","Gawanya mfuatano katika uchunguzi mwingi (safu) katika safu wima moja. Pia vitambulisho vya matangazo na safu wima za mfano" "Split character string","Gawanya mfuatano wa herufi" "Split text","Gawanya maandishi" -"Split a character string by a common delimiter","Gawanya mfuatano wa herufi kwa kitenganishi cha kawaida" "Select delimiter","Chagua kidhibiti" "Browse data preview","Vinjari hakikisho la data" "Original data","Data asili" @@ -261,9 +236,6 @@ "Side-by-side barplot","Kipande cha baruni cha kando kwa kando" "Create side-by-side barplot to show the distribution of categorical levels","Unda mpangilio wa barufa kando ili kuonyesha usambazaji wa viwango vya kategoria" "Select table theme","Chagua mandhari ya jedwali" -"Level of detail","Kiwango cha maelezo" -"Minimal","Kidogo" -"Extensive","Kina" "Letters","Barua" "Words","Maneno" "Shorten to first letters","Fupisha herufi za kwanza" @@ -312,7 +284,6 @@ "When you need more advanced tools, you'll be prepared to use R directly.","Unapohitaji zana za hali ya juu zaidi, utakuwa tayari kutumia R moja kwa moja." "The app contains a selelct number of features and will guide you through key analyses.","The app contains a selelct number of features and will guide you through key analyses." "Sort by Levels","Sort by Levels" -"Reorder factor levels","Reorder factor levels" "Modify factor levels","Modify factor levels" "Reorder or rename the levels of factor/categorical variables.","Reorder or rename the levels of factor/categorical variables." "Maximum number of observations:","Maximum number of observations:" @@ -326,5 +297,34 @@ "No data present.","No data present." "You have provided a complete dataset with no missing values.","You have provided a complete dataset with no missing values." "Start by loading data.","Start by loading data." -"Sample data","Sample data" "Create a new variable; otherwise replaces (Updating labels always creates new variable)","Create a new variable; otherwise replaces (Updating labels always creates new variable)" +"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" +"Reorder factor levels","Reorder factor levels" +"Split a character string by a common delimiter","Split a character string by a common delimiter" +"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:" +"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" +"Level of detail","Level of detail" +"Minimal","Minimal" +"Extensive","Extensive" +"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.." +"File upload","File upload" +"REDCap server export","REDCap server export" +"Local or sample data","Local or sample data" +"Sample data","Sample data" +"Settings","Settings" +"Create new factor","Create new factor" diff --git a/inst/apps/FreesearchR/app.R b/inst/apps/FreesearchR/app.R index 6007a903..de5e9f11 100644 --- a/inst/apps/FreesearchR/app.R +++ b/inst/apps/FreesearchR/app.R @@ -1,7 +1,7 @@ ######## -#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//RtmpxB1KWR/file173c978fea931.R +#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//Rtmprp4Sq1/fileb60491b0ce8.R ######## i18n_path <- system.file("translations", package = "FreesearchR") @@ -45,8 +45,7 @@ library(rlang) library(shiny.i18n) library(fontawesome) -print(list.files("www/fonts/montserrat", full.names = TRUE)) - +# print(list.files("www/fonts/montserrat", full.names = TRUE)) ## Translation init i18n <- shiny.i18n::Translator$new(translation_csvs_path = i18n_path) @@ -54,16 +53,6 @@ i18n <- shiny.i18n::Translator$new(translation_csvs_path = i18n_path) # i18n <- shiny.i18n::Translator$new(translation_csvs_path = here::here("inst/translations/")) i18n$set_translation_language("en") -## Global freesearchR vars -if (!"global_freesearchR" %in% ls(name = globalenv())) { - global_freesearchR <- list( - include_globalenv = FALSE, - data_limit_default = 1000, - data_limit_upper = 10000, - data_limit_lower = 1 - ) -} - ######## #### Current file: /Users/au301842/FreesearchR/app/functions.R @@ -75,7 +64,7 @@ if (!"global_freesearchR" %in% ls(name = globalenv())) { #### Current file: /Users/au301842/FreesearchR/R//app_version.R ######## -app_version <- function()'26.3.2' +app_version <- function()'26.3.3' ######## @@ -4035,33 +4024,28 @@ missing_fraction <- function(data) { #' sample(c(1:8, NA), 20, TRUE) #' ) |> data_description() data_description <- function(data, data_text = "Data") { - data <- if (shiny::is.reactive(data)) - data() - else - data + # Resolve reactive once + if (shiny::is.reactive(data)) data <- data() + + # Early return if null + if (is.null(data)) return(i18n$t("No data present.")) n <- nrow(data) + + # Early return if empty + if (n == 0L) return(i18n$t("No data present.")) + n_var <- ncol(data) - n_complete <- sum(complete.cases(data)) + + # Faster complete.cases alternative using rowSums on NA matrix + n_complete <- n - sum(rowSums(is.na(data)) > 0L) p_complete <- signif(100 * n_complete / n, 3) - if (is.null(data)) { - i18n$t("No data present.") - } else { - glue::glue( - i18n$t( - "{data_text} has {n} observations and {n_var} variables, with {n_complete} ({p_complete} %) complete cases." - ) + glue::glue( + i18n$t( + "{data_text} has {n} observations and {n_var} variables, with {n_complete} ({p_complete} %) complete cases." ) - } - # sprintf( - # "%s has %s observations and %s variables, with %s (%s%%) complete cases.", - # data_text, - # n, - # n_var, - # n_complete, - # p_complete - # ) + ) } @@ -4527,7 +4511,7 @@ data_types <- function() { #### Current file: /Users/au301842/FreesearchR/R//hosted_version.R ######## -hosted_version <- function()'v26.3.2-260311' +hosted_version <- function()'v26.3.3-260312' ######## @@ -5987,16 +5971,16 @@ landing_page_ui <- function(i18n) { #' data(mtcars) #' launch_FreesearchR(launch.browser = TRUE) #' } -launch_FreesearchR <- function(inlcude_globalenv = TRUE, +launch_FreesearchR <- function(include_globalenv = TRUE, data_limit_default = 1000, data_limit_upper = 100000, data_limit_lower = 1, ...) { - global_freesearchR <- list( - include_globalenv = include_globalenv, - data_limit_default = data_limit_default, - data_limit_upper = data_limit_upper, - data_limit_lower = data_limit_lower + Sys.setenv( + INCLUDE_GLOBALENV = include_globalenv, + DATA_LIMIT_DEFAULT = data_limit_default, + DATA_LIMIT_UPPER = data_limit_upper, + DATA_LIMIT_LOWER = data_limit_lower ) appDir <- system.file("apps", "FreesearchR", package = "FreesearchR") @@ -6010,6 +5994,123 @@ launch_FreesearchR <- function(inlcude_globalenv = TRUE, } +## Helper to set env variables +get_config <- function(var_name, default = NULL) { + val <- Sys.getenv(var_name, unset = NA_character_) + + # Only use env var if it is explicitly set and non-empty + if (!is.na(val) && nzchar(trimws(val))) { + if (is.logical(default)) return(to_logical(val)) + if (is.numeric(default)) return(as.numeric(val)) + return(val) + } + + if (!is.null(default)) { + return(default) + } + + stop(paste("Required config variable not set:", var_name)) +} + +to_logical <- function(x) { + result <- switch(tolower(trimws(as.character(x))), + "true" = , "1" = , "yes" = TRUE, + "false" = , "0" = , "no" = FALSE, + NA + ) + if (is.na(result)) stop(paste("Cannot coerce to logical:", x)) + result +} + + +## File loader - based on the module, uses hard coded default values +load_file <- function(path) { + read_fns <- list( + ods = "import_ods", + dta = "import_dta", + csv = "import_delim", + tsv = "import_delim", + txt = "import_delim", + xls = "import_xls", + xlsx = "import_xls", + rds = "import_rds" + ) + + ext <- tolower(tools::file_ext(path)) + + if (!ext %in% names(read_fns)) { + message("Unsupported file type, skipping: ", basename(path), " (.", ext, ")") + return(NULL) + } + + read_fn <- read_fns[[ext]] + + parameters <- list( + file = path, + sheet = 1, + skip = 0, + dec = ".", + encoding = "unknown" + ) + + # Trim parameters to only those accepted by the target function + parameters <- parameters[which(names(parameters) %in% rlang::fn_fmls_names(get(read_fn)))] + + result <- tryCatch( + rlang::exec(read_fn, !!!parameters), + error = function(e) { + # Fall back to rio::import + message("Primary loader failed for ", basename(path), ", trying rio::import") + tryCatch( + rio::import(path), + error = function(e2) { + message("Failed to load ", basename(path), ": ", e2$message) + NULL + } + ) + } + ) + + if (!is.null(result) && NROW(result) < 1) { + message("File loaded but contains no rows, skipping: ", basename(path)) + return(NULL) + } + + result +} + + +load_folder <- function(folder = "/app/data", envir = .GlobalEnv) { + if (is.null(folder) || !dir.exists(folder)) { + message("No data folder found, skipping load") + return(invisible(NULL)) + } + + files <- list.files(folder, full.names = TRUE) + if (length(files) == 0) { + message("Data folder is empty, skipping load") + return(invisible(NULL)) + } + + loaded <- vapply(files, function(file) { + result <- load_file(file) + if (is.null(result)) + return(FALSE) + name <- tools::file_path_sans_ext(basename(file)) + assign(name, default_parsing(result), envir = envir) + TRUE + }, logical(1)) + + message(sprintf( + "Loaded %d/%d files from %s", + sum(loaded), + length(files), + folder + )) + invisible(loaded) +} + + ######## #### Current file: /Users/au301842/FreesearchR/R//missings-module.R ######## @@ -10726,9 +10827,9 @@ ui_elements <- function(selection) { layout_params = "dropdown", # title = "Choose a datafile to upload", file_extensions = c(".csv", ".tsv", ".txt", ".xls", ".xlsx", ".rds", ".ods", ".dta"), - limit_default = global_freesearchR$data_limit_default, - limit_lower = global_freesearchR$data_limit_lower, - limit_upper = global_freesearchR$data_limit_upper + limit_default = DATA_LIMIT_DEFAULT, + limit_lower = DATA_LIMIT_LOWER, + limit_upper = DATA_LIMIT_UPPER ) ), @@ -10750,7 +10851,7 @@ ui_elements <- function(selection) { id = "env", title = NULL, packages = c("NHANES", "stRoke", "datasets", "MASS"), - globalenv = global_freesearchR$include_globalenv + globalenv = isTruthy(INCLUDE_GLOBALENV) ) ), # shiny::conditionalPanel( @@ -13601,6 +13702,28 @@ dev_banner <- function(){ } +######## +#### Current file: /Users/au301842/FreesearchR/app/globals.R +######## + +## Setting global variables +INCLUDE_GLOBALENV <- get_config("INCLUDE_GLOBALENV", default = FALSE) +DATA_LIMIT_DEFAULT <- get_config("DATA_LIMIT_DEFAULT", default = 10000) +DATA_LIMIT_UPPER <- get_config("DATA_LIMIT_UPPER", default = 100000) +DATA_LIMIT_LOWER <- get_config("DATA_LIMIT_LOWER", default = 1) + +## Loads folder passed to the docker container and mounted as below: +## +## services: +## shiny: +## image: your-shiny-app +## volumes: +## - ./data:/app/data:ro +## +## All files in the ./data/ folder is attempted loaded +load_folder() + + ######## #### Current file: /Users/au301842/FreesearchR/app/ui.R ######## @@ -13798,9 +13921,9 @@ server <- function(input, output, session) { # selected = "file" # ) - if (isTRUE(global_freesearchR$include_globalenv)) { + if (isTruthy(INCLUDE_GLOBALENV)) { env_label <- i18n$t("Local or sample data") - output$data_sample_text <- shiny::renderText(shiny::helpText( + output$data_sample_text <- shiny::renderUI(shiny::helpText( i18n$t( "Upload a file, get data directly from REDCap or use local or sample data." ) @@ -13893,7 +14016,7 @@ server <- function(input, output, session) { trigger_return = "change", btn_show_data = FALSE, reset = reactive(input$hidden), - limit_data = global_freesearchR$data_limit_upper + limit_data = DATA_LIMIT_UPPER ) shiny::observeEvent(from_env$data(), { From 342579c36f362e02c4e6cf7a376324f70abc94cc Mon Sep 17 00:00:00 2001 From: Andreas Gammelgaard Damsbo Date: Thu, 12 Mar 2026 12:40:04 +0100 Subject: [PATCH 08/15] handle ordered factors --- R/data-summary.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/data-summary.R b/R/data-summary.R index ccb749bc..62f5e0bf 100644 --- a/R/data-summary.R +++ b/R/data-summary.R @@ -75,7 +75,7 @@ add_sparkline <- function(grid, column = "vals", color.main = "#2a8484", color.s type <- "line" ds <- data.frame(x = NA, y = NA) horizontal <- FALSE - } else if (identical(data_cl, "factor")) { + } else if ("factor" %in% data_cl) { type <- "column" s <- summary(data) ds <- data.frame(x = names(s), y = s) From f928aee11017ca88790dc483124281d813123f5b Mon Sep 17 00:00:00 2001 From: Andreas Gammelgaard Damsbo Date: Thu, 12 Mar 2026 12:40:31 +0100 Subject: [PATCH 09/15] fix: implement "with_labels" and added tests --- R/helpers.R | 29 +++--- tests/testthat/test-default-parsing.R | 134 ++++++++++++++++++++++++++ 2 files changed, 150 insertions(+), 13 deletions(-) create mode 100644 tests/testthat/test-default-parsing.R diff --git a/R/helpers.R b/R/helpers.R index 75fedb70..adc12777 100644 --- a/R/helpers.R +++ b/R/helpers.R @@ -219,20 +219,23 @@ file_export <- function(data, #' head(5) |> #' str() default_parsing <- function(data) { - name_labels <- lapply(data, \(.x) REDCapCAST::get_attr(.x, attr = "label")) + # name_labels <- lapply(data, \(.x) REDCapCAST::get_attr(.x, attr = "label")) # browser() - out <- data |> - setNames(make.names(names(data), unique = TRUE)) |> - ## Temporary step to avoid nested list and crashing - remove_nested_list() |> - REDCapCAST::parse_data() |> - REDCapCAST::as_factor() |> - REDCapCAST::numchar2fct(numeric.threshold = 8, - character.throshold = 10) |> - REDCapCAST::as_logical() |> - REDCapCAST::fct_drop() - - set_column_label(out, setNames(name_labels, names(out)), overwrite = FALSE) + with_labels(data,{ + data |> + setNames(make.names(names(data), unique = TRUE)) |> + ## Temporary step to avoid nested list and crashing + remove_nested_list() |> + REDCapCAST::parse_data() |> + REDCapCAST::as_factor() |> + REDCapCAST::numchar2fct(numeric.threshold = 8, + character.throshold = 10) |> + REDCapCAST::as_logical() |> + REDCapCAST::fct_drop() + }) + # out <- + # + # set_column_label(out, setNames(name_labels, names(out)), overwrite = FALSE) # purrr::map2( # out, diff --git a/tests/testthat/test-default-parsing.R b/tests/testthat/test-default-parsing.R new file mode 100644 index 00000000..8cd2455b --- /dev/null +++ b/tests/testthat/test-default-parsing.R @@ -0,0 +1,134 @@ +test_that("default_parsing returns a data.frame", { + result <- default_parsing(mtcars) + expect_true(is.data.frame(result)) +}) + +test_that("default_parsing preserves row count", { + result <- default_parsing(mtcars) + expect_equal(nrow(result), nrow(mtcars)) +}) + +test_that("default_parsing preserves column count", { + result <- default_parsing(mtcars) + expect_equal(ncol(result), ncol(mtcars)) +}) + +test_that("default_parsing produces valid column names (make.names compatible)", { + # Create data with problematic column names + bad_names_df <- data.frame( + `1bad` = 1:5, + `has space` = letters[1:5], + `good_name` = TRUE, + check.names = FALSE + ) + result <- default_parsing(bad_names_df) + expect_true(all(make.names(names(result)) == names(result))) +}) + +test_that("default_parsing handles duplicate column names", { + dup_df <- data.frame(a = 1:5, b = 6:10) + names(dup_df) <- c("x", "x") + result <- default_parsing(dup_df) + expect_equal(length(names(result)), 2) + expect_true(all(!duplicated(names(result)))) +}) + +test_that("default_parsing converts low-cardinality numeric columns to factor", { + # A numeric column with <= 8 unique values should become a factor + df <- data.frame( + group = c(1, 2, 3, 1, 2, 3, 1, 2), # 3 unique → factor + value = rnorm(8) # 8 unique → stays numeric + ) + result <- default_parsing(df) + expect_true(is.factor(result$group)) +}) + +test_that("default_parsing converts low-cardinality character columns to factor", { + # A character column with <= 10 unique values should become a factor + df <- data.frame( + category = rep(c("a", "b", "c"), 4), # 3 unique → factor + stringsAsFactors = FALSE + ) + result <- default_parsing(df) + expect_true(is.factor(result$category)) +}) + +test_that("default_parsing drops unused factor levels", { + df <- data.frame( + x = factor(c("a", "b", "a"), levels = c("a", "b", "c")) # "c" unused + ) + result <- default_parsing(df) + expect_false("c" %in% levels(result$x)) +}) + +test_that("default_parsing converts logical-like columns to logical", { + df <- data.frame( + flag = c(0L, 1L, 0L, 1L, 0L), + stringsAsFactors = FALSE + ) + result <- default_parsing(df) + # as_logical should have converted 0/1 integer to logical + expect_true(is.logical(result$flag)) +}) + +test_that("default_parsing preserves column labels when present", { + df <- data.frame(a = 1:3, b = c("x", "y", "z"), stringsAsFactors = FALSE) + attr(df$a, "label") <- "Column A Label" + attr(df$b, "label") <- "Column B Label" + + result <- default_parsing(df) + + expect_equal(attr(result$a, "label"), "Column A Label") + expect_equal(attr(result$b, "label"), "Column B Label") +}) + +test_that("default_parsing handles columns with no label attribute", { + df <- data.frame(a = 1:3, b = c("x", "y", "z"), stringsAsFactors = FALSE) + result <- default_parsing(df) + # Should not error; label attrs simply absent or NULL + expect_null(attr(result$a, "label")) +}) + +test_that("default_parsing handles a single-column data.frame", { + df <- data.frame(x = 1:10) + result <- default_parsing(df) + expect_equal(ncol(result), 1) + expect_equal(nrow(result), 10) +}) + +test_that("default_parsing handles an empty data.frame gracefully", { + df <- data.frame(a = integer(0), b = character(0), stringsAsFactors = FALSE) + result <- default_parsing(df) + expect_equal(nrow(result), 0) +}) + +test_that("default_parsing handles all-NA columns without error", { + df <- data.frame(a = NA_real_, b = NA_character_, stringsAsFactors = FALSE) + expect_no_error(default_parsing(df)) +}) + +test_that("default_parsing removes nested list columns", { + df <- data.frame(id = 1:3) + df$nested <- list(list(1, 2), list(3), list(4, 5)) # nested list column + # Should not crash; nested list column is removed by remove_nested_list() + expect_no_error(default_parsing(df)) +}) + +test_that("default_parsing works with dplyr::starwars-like tibble", { + skip_if_not_installed("dplyr") + sw <- head(dplyr::starwars, 10) + result <- default_parsing(sw) + expect_true(is.data.frame(result)) + expect_equal(nrow(result), 10) +}) + +test_that("default_parsing high-cardinality character column stays character or factor", { + # > 10 unique values → should NOT be coerced to factor by numchar2fct + df <- data.frame( + id = paste0("id_", 1:20), + stringsAsFactors = FALSE + ) + result <- default_parsing(df) + # high cardinality: remains character (not factor) + expect_false(is.factor(result$id)) +}) From 95e813753ff4a9acd86821640706dd1a9121d6d1 Mon Sep 17 00:00:00 2001 From: Andreas Gammelgaard Damsbo Date: Thu, 12 Mar 2026 12:40:40 +0100 Subject: [PATCH 10/15] merge --- R/sysdata.rda | Bin 2668 -> 2671 bytes SESSION.md | 33 ++++---- app_docker/app.R | 33 ++++---- inst/apps/FreesearchR/app.R | 33 ++++---- renv.lock | 148 +++++++++++++++++++----------------- renv/activate.R | 4 +- 6 files changed, 130 insertions(+), 121 deletions(-) diff --git a/R/sysdata.rda b/R/sysdata.rda index bf735f2dcec4f96eb89c18b40a68635bbf4208b7..7ab55e91eff8121f1805d27dc695bbd323b19233 100644 GIT binary patch literal 2671 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 literal 2668 zcmV-y3X}ChT4*^jL0KkKS@jKrqyQOGf5iX)Xaz!l|KNXb-@w2B|L{Nn06+)<;0xau zIhHpM2T-bwC<+u8&%O!*fGUR#Oh6_>K{9B_LSUzmrqq6s(PMKX|);v z8&CkzkYvyR000CigVZ!=(droh13)wZpa1|GXaEFCB-F^lG$Yi}pvj4#27mwzO$JRe z10~5<5i^Pzh+;5M3oN37mciHgIbWw^6+ctOr$P_-c8P4LlB#BOazut z3PTBRVs|ahrENvZh@gy!@$qlyU*i8>HbYi^3XOGe5ACl!TjG}zv-mn zDO6u|yw2hx2vr&F--rak_bry!aOCewK-@g3p+wbEW|JvRamZ{#%*lHO(y3x*7lyP` zt)8bsqFtL|)!faTGsNVq2t>jlf;{fek1234$?oKRpw9uhDid9}ceS~)WXf!2IOML# zE_~)s2N6<%6NYsb+dEh5@Y{7a#QH%za~l#g%{pUv!CUy7-}pW#uwMePX0?-O-Mow8 z2m-^DlP_y$uCL<9YHKtrulX_;U~U#@(6V8koD)`8IflRplY?4hTgMG#yN{g00IPrhSdQ;TGoOn zA^VCT<;6e?HKhx`g+Oz6H%wYetEB)#SE+*MZ*QBGhuxnLLA+wkNzDeS?*Fmk3W zC!;iAmjYBGh`fNW1x?&*GTeH?~&N?m3xs4hq-Nc9($Xg*X8zN!> zg3Ot>5sqeOSC|zzg)+6%ol@(*w7`LiA_f=$sDQ{)$de>FD<@ZO6;wnxdY+EM)i~*? znC0GX;f`G8HN&T_JE&ycT8hyt*1G8L%gcJ^wUlXfB$6;-K(=Kotv&nX*qpp|T*;g5 z%?6_HFvd$^a@#8_N@yA8O>SD_$zHa`u1jX}xZ-F`QEL&#!sb@0)|7HdB*_$lr^{fI z+tTIlM7V7D2UCF)L82$x(sgc#J8gYc#-Ty6D0bwxqEXiWAD1m|H(SQ9{&Z%FR*Y>axDYKtGFVnol@TjM z5O8V>8eq!LC=7y6Q5}kz)&@GzEs0Cz_#V+fH(-En)o?IjI9V)(D#{WdkO}0VStKv4 z{ax-zvJZw9*(!ON)pV(Cm1WPVtwB-7sv%a=u{6iatUTx#!4Umay@;XHSC34^%L<M3NMs;9{&~eIJ9**E#Fla#1PK+Loo2p;oA_FiQAmo?2_3 z?tAyl_c`9$iqoScH8hE#n5#1$KVh$)G&R$vESwzg>}+29;=^m88%Xf&Igfmom_+73 z-wm$Qq}0Ff_K2Xo7VCV)RKB+vL7pL=%g)bSKKi*-J?;`yA(FlIGOgpx?kE>0+gyb~ zPO0)*j3wi2Z6-j)t_Yb4aVuTL+Qs@3da)%6+z>bOn8Z#@6f&~zf8LJu&%3M7cK zGGK5EQ36_Ihlh!Sz0O!{mcQD?0|*q-S7v5|wE`upS?!)#8vPmd6x2Ep*oqEh)!a%j zOo}SS3kS?W>gY{Ra#wGuo&T$bB4Ay-^)Fdn7iIIl3(SEQ*dk?z0rnWsa+}D*ot7Vt z9XE*VQ6+n~1g)9}sQ3%saQE!nX{ zlN#lMtl?}^e)seRuO^Nf$H<%%!(Qz2udGz&iuLaKI++k15)qi!~6`t0&BlcHGgLougHQ`#2U;CU(O5Lhl;QxMf;O=kHm4=n)?66o(X8Ra3*?5>!CdWD zAG6?eUM*NF{<*+r)6$Nt7k^LG8JA+xiwxzP~~K!3rSHV)pos)N3c$!f|rJC a>6~Hqfr`ru1hCmZ;_gVN3KAZnuyla;tob(p diff --git a/SESSION.md b/SESSION.md index 3e97a260..2f9f27b9 100644 --- a/SESSION.md +++ b/SESSION.md @@ -33,7 +33,6 @@ |bit64 |4.6.0-1 |2025-01-16 |CRAN (R 4.5.0) | |bitops |1.0-9 |2024-10-03 |CRAN (R 4.5.0) | |boot |1.3-32 |2025-08-29 |CRAN (R 4.5.2) | -|brio |1.1.5 |2024-04-24 |CRAN (R 4.5.0) | |broom |1.0.12 |2026-01-27 |CRAN (R 4.5.2) | |broom.helpers |1.22.0 |2025-09-17 |CRAN (R 4.5.0) | |bsicons |0.1.2 |2023-11-04 |CRAN (R 4.5.0) | @@ -67,7 +66,7 @@ |e1071 |1.7-17 |2025-12-18 |CRAN (R 4.5.2) | |easystats |0.7.5 |2025-07-11 |CRAN (R 4.5.0) | |ellipsis |0.3.2 |2021-04-29 |CRAN (R 4.5.0) | -|emmeans |2.0.1 |2025-12-16 |CRAN (R 4.5.2) | +|emmeans |2.0.2 |2026-03-05 |CRAN (R 4.5.2) | |esquisse |2.1.0 |2025-02-21 |CRAN (R 4.5.0) | |estimability |1.5.1 |2024-05-12 |CRAN (R 4.5.0) | |eulerr |7.0.4 |2025-09-24 |CRAN (R 4.5.0) | @@ -75,7 +74,6 @@ |farver |2.1.2 |2024-05-13 |CRAN (R 4.5.0) | |fastmap |1.2.0 |2024-05-15 |CRAN (R 4.5.0) | |flextable |0.9.11 |2026-02-13 |CRAN (R 4.5.2) | -|fontawesome |0.5.3 |2024-11-16 |CRAN (R 4.5.0) | |fontBitstreamVera |0.1.1 |2017-02-01 |CRAN (R 4.5.0) | |fontLiberation |0.1.0 |2016-10-15 |CRAN (R 4.5.0) | |fontquiver |0.2.1 |2017-02-01 |CRAN (R 4.5.0) | @@ -84,15 +82,15 @@ |foreign |0.8-90 |2025-03-31 |CRAN (R 4.5.2) | |Formula |1.2-5 |2023-02-24 |CRAN (R 4.5.0) | |FreesearchR |26.3.3 |NA |NA | -|fs |1.6.6 |2025-04-12 |CRAN (R 4.5.0) | +|fs |1.6.7 |2026-03-06 |CRAN (R 4.5.2) | |gdtools |0.5.0 |2026-02-09 |CRAN (R 4.5.2) | |generics |0.1.4 |2025-05-09 |CRAN (R 4.5.0) | -|ggalluvial |0.12.5 |2023-02-22 |CRAN (R 4.5.0) | +|ggalluvial |0.12.6 |2026-02-22 |CRAN (R 4.5.2) | |ggcorrplot |0.1.4.1 |2023-09-05 |CRAN (R 4.5.0) | |ggforce |0.5.0 |2025-06-18 |CRAN (R 4.5.0) | |ggplot2 |4.0.2 |2026-02-03 |CRAN (R 4.5.2) | |ggridges |0.5.7 |2025-08-27 |CRAN (R 4.5.0) | -|ggstats |0.12.0 |2025-12-22 |CRAN (R 4.5.2) | +|ggstats |0.13.0 |2026-03-06 |CRAN (R 4.5.2) | |glue |1.8.0 |2024-09-30 |CRAN (R 4.5.0) | |gridExtra |2.3 |2017-09-09 |CRAN (R 4.5.0) | |gt |1.3.0 |2026-01-22 |CRAN (R 4.5.2) | @@ -114,10 +112,10 @@ |KernSmooth |2.23-26 |2025-01-01 |CRAN (R 4.5.2) | |keyring |1.4.1 |2025-06-15 |CRAN (R 4.5.0) | |knitr |1.51 |2025-12-20 |CRAN (R 4.5.2) | -|later |1.4.6 |2026-02-13 |CRAN (R 4.5.2) | +|later |1.4.6 |2026-03-05 |CRAN (R 4.5.2) | |lattice |0.22-7 |2025-04-02 |CRAN (R 4.5.2) | |lifecycle |1.0.5 |2026-01-08 |CRAN (R 4.5.2) | -|lme4 |1.1-38 |2025-12-02 |CRAN (R 4.5.2) | +|lme4 |2.0-1 |2026-03-05 |CRAN (R 4.5.2) | |lubridate |1.9.5 |2026-02-04 |CRAN (R 4.5.2) | |magrittr |2.0.4 |2025-09-12 |CRAN (R 4.5.0) | |MASS |7.3-65 |2025-02-28 |CRAN (R 4.5.0) | @@ -125,15 +123,15 @@ |memoise |2.0.1 |2021-11-26 |CRAN (R 4.5.0) | |mime |0.13 |2025-03-17 |CRAN (R 4.5.0) | |minqa |1.2.8 |2024-08-17 |CRAN (R 4.5.0) | -|mvtnorm |1.3-3 |2025-01-10 |CRAN (R 4.5.0) | +|mvtnorm |1.3-5 |2026-03-11 |CRAN (R 4.5.2) | |NHANES |2.1.0 |2015-07-02 |CRAN (R 4.5.0) | |nlme |3.1-168 |2025-03-31 |CRAN (R 4.5.2) | |nloptr |2.2.1 |2025-03-17 |CRAN (R 4.5.0) | |nnet |7.3-20 |2025-01-01 |CRAN (R 4.5.2) | |officer |0.7.3 |2026-01-16 |CRAN (R 4.5.2) | |opdisDownsampling |1.0.1 |2024-04-15 |CRAN (R 4.5.0) | -|openssl |2.3.4 |2025-09-30 |CRAN (R 4.5.0) | -|openxlsx2 |1.23.1 |2026-01-19 |CRAN (R 4.5.2) | +|openssl |2.3.5 |2026-02-26 |CRAN (R 4.5.2) | +|openxlsx2 |1.25 |2026-03-07 |CRAN (R 4.5.2) | |otel |0.2.0 |2025-08-29 |CRAN (R 4.5.0) | |parameters |0.28.3 |2025-11-25 |CRAN (R 4.5.2) | |patchwork |1.3.2 |2025-08-25 |CRAN (R 4.5.0) | @@ -156,7 +154,7 @@ |qqplotr |0.0.7 |2025-09-05 |CRAN (R 4.5.0) | |quarto |1.5.1 |2025-09-04 |CRAN (R 4.5.0) | |R6 |2.6.1 |2025-02-15 |CRAN (R 4.5.0) | -|ragg |1.5.0 |2025-09-02 |CRAN (R 4.5.0) | +|ragg |1.5.1 |2026-03-06 |CRAN (R 4.5.2) | |rankinPlot |1.1.0 |2023-01-30 |CRAN (R 4.5.0) | |rbibutils |2.4.1 |2026-01-21 |CRAN (R 4.5.2) | |RColorBrewer |1.1-3 |2022-04-03 |CRAN (R 4.5.0) | @@ -172,7 +170,7 @@ |reformulas |0.4.4 |2026-02-02 |CRAN (R 4.5.2) | |remotes |2.5.0 |2024-03-17 |CRAN (R 4.5.0) | |rempsyc |0.2.0 |2025-09-15 |CRAN (R 4.5.0) | -|renv |1.1.7 |2026-01-27 |CRAN (R 4.5.2) | +|renv |1.1.7 |2026-03-05 |CRAN (R 4.5.2) | |reshape2 |1.4.5 |2025-11-12 |CRAN (R 4.5.0) | |rio |1.2.4 |2025-09-26 |CRAN (R 4.5.0) | |rlang |1.1.7 |2026-01-09 |CRAN (R 4.5.2) | @@ -193,14 +191,13 @@ |shinybusy |0.3.3 |2024-03-09 |CRAN (R 4.5.0) | |shinyjs |2.1.1 |2026-01-15 |CRAN (R 4.5.2) | |shinyTime |1.0.3 |2022-08-19 |CRAN (R 4.5.0) | -|shinyWidgets |0.9.0 |2025-02-21 |CRAN (R 4.5.0) | +|shinyWidgets |0.9.1 |2026-03-09 |CRAN (R 4.5.2) | |smd |0.8.0 |2025-02-12 |CRAN (R 4.5.0) | |stringi |1.8.7 |2025-03-27 |CRAN (R 4.5.0) | |stringr |1.6.0 |2025-11-04 |CRAN (R 4.5.0) | |stRoke |25.9.2 |2025-09-30 |CRAN (R 4.5.0) | -|systemfonts |1.3.1 |2025-10-01 |CRAN (R 4.5.0) | -|testthat |3.3.2 |2026-01-11 |CRAN (R 4.5.2) | -|textshaping |1.0.4 |2025-10-10 |CRAN (R 4.5.0) | +|systemfonts |1.3.2 |2026-03-05 |CRAN (R 4.5.2) | +|textshaping |1.0.5 |2026-03-06 |CRAN (R 4.5.2) | |thematic |0.1.8 |2025-09-29 |CRAN (R 4.5.0) | |tibble |3.3.1 |2026-01-11 |CRAN (R 4.5.2) | |tidyr |1.3.2 |2025-12-19 |CRAN (R 4.5.2) | @@ -220,6 +217,6 @@ |writexl |1.5.4 |2025-04-15 |CRAN (R 4.5.0) | |xfun |0.56 |2026-01-18 |CRAN (R 4.5.2) | |xml2 |1.5.2 |2026-01-17 |CRAN (R 4.5.2) | -|xtable |1.8-4 |2019-04-21 |CRAN (R 4.5.0) | +|xtable |1.8-4 |2026-02-22 |CRAN (R 4.5.2) | |yaml |2.3.12 |2025-12-10 |CRAN (R 4.5.2) | |zip |2.3.3 |2025-05-13 |CRAN (R 4.5.0) | diff --git a/app_docker/app.R b/app_docker/app.R index 72d8290a..004466c5 100644 --- a/app_docker/app.R +++ b/app_docker/app.R @@ -1,7 +1,7 @@ ######## -#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//Rtmprp4Sq1/fileb602d982aa3.R +#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//RtmpmhqokQ/file1a146f4d002a.R ######## i18n_path <- here::here("translations") @@ -2957,7 +2957,7 @@ add_sparkline <- function(grid, column = "vals", color.main = "#2a8484", color.s type <- "line" ds <- data.frame(x = NA, y = NA) horizontal <- FALSE - } else if (identical(data_cl, "factor")) { + } else if ("factor" %in% data_cl) { type <- "column" s <- summary(data) ds <- data.frame(x = names(s), y = s) @@ -3887,20 +3887,23 @@ file_export <- function(data, #' head(5) |> #' str() default_parsing <- function(data) { - name_labels <- lapply(data, \(.x) REDCapCAST::get_attr(.x, attr = "label")) + # name_labels <- lapply(data, \(.x) REDCapCAST::get_attr(.x, attr = "label")) # browser() - out <- data |> - setNames(make.names(names(data), unique = TRUE)) |> - ## Temporary step to avoid nested list and crashing - remove_nested_list() |> - REDCapCAST::parse_data() |> - REDCapCAST::as_factor() |> - REDCapCAST::numchar2fct(numeric.threshold = 8, - character.throshold = 10) |> - REDCapCAST::as_logical() |> - REDCapCAST::fct_drop() - - set_column_label(out, setNames(name_labels, names(out)), overwrite = FALSE) + with_labels(data,{ + data |> + setNames(make.names(names(data), unique = TRUE)) |> + ## Temporary step to avoid nested list and crashing + remove_nested_list() |> + REDCapCAST::parse_data() |> + REDCapCAST::as_factor() |> + REDCapCAST::numchar2fct(numeric.threshold = 8, + character.throshold = 10) |> + REDCapCAST::as_logical() |> + REDCapCAST::fct_drop() + }) + # out <- + # + # set_column_label(out, setNames(name_labels, names(out)), overwrite = FALSE) # purrr::map2( # out, diff --git a/inst/apps/FreesearchR/app.R b/inst/apps/FreesearchR/app.R index de5e9f11..ad0da02a 100644 --- a/inst/apps/FreesearchR/app.R +++ b/inst/apps/FreesearchR/app.R @@ -1,7 +1,7 @@ ######## -#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//Rtmprp4Sq1/fileb60491b0ce8.R +#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//RtmpmhqokQ/file1a14715fd082.R ######## i18n_path <- system.file("translations", package = "FreesearchR") @@ -2957,7 +2957,7 @@ add_sparkline <- function(grid, column = "vals", color.main = "#2a8484", color.s type <- "line" ds <- data.frame(x = NA, y = NA) horizontal <- FALSE - } else if (identical(data_cl, "factor")) { + } else if ("factor" %in% data_cl) { type <- "column" s <- summary(data) ds <- data.frame(x = names(s), y = s) @@ -3887,20 +3887,23 @@ file_export <- function(data, #' head(5) |> #' str() default_parsing <- function(data) { - name_labels <- lapply(data, \(.x) REDCapCAST::get_attr(.x, attr = "label")) + # name_labels <- lapply(data, \(.x) REDCapCAST::get_attr(.x, attr = "label")) # browser() - out <- data |> - setNames(make.names(names(data), unique = TRUE)) |> - ## Temporary step to avoid nested list and crashing - remove_nested_list() |> - REDCapCAST::parse_data() |> - REDCapCAST::as_factor() |> - REDCapCAST::numchar2fct(numeric.threshold = 8, - character.throshold = 10) |> - REDCapCAST::as_logical() |> - REDCapCAST::fct_drop() - - set_column_label(out, setNames(name_labels, names(out)), overwrite = FALSE) + with_labels(data,{ + data |> + setNames(make.names(names(data), unique = TRUE)) |> + ## Temporary step to avoid nested list and crashing + remove_nested_list() |> + REDCapCAST::parse_data() |> + REDCapCAST::as_factor() |> + REDCapCAST::numchar2fct(numeric.threshold = 8, + character.throshold = 10) |> + REDCapCAST::as_logical() |> + REDCapCAST::fct_drop() + }) + # out <- + # + # set_column_label(out, setNames(name_labels, names(out)), overwrite = FALSE) # purrr::map2( # out, diff --git a/renv.lock b/renv.lock index dfbaf8cd..11ae7b52 100644 --- a/renv.lock +++ b/renv.lock @@ -2761,7 +2761,7 @@ }, "effectsize": { "Package": "effectsize", - "Version": "1.0.1", + "Version": "1.0.2", "Source": "Repository", "Type": "Package", "Title": "Indices of Effect Size", @@ -2775,11 +2775,11 @@ "R (>= 4.0)" ], "Imports": [ - "bayestestR (>= 0.16.0)", - "insight (>= 1.3.0)", - "parameters (>= 0.26.0)", - "performance (>= 0.14.0)", - "datawizard (>= 1.1.0)", + "bayestestR (>= 0.17.0)", + "insight (>= 1.4.5)", + "parameters (>= 0.28.3)", + "performance (>= 0.15.3)", + "datawizard (>= 1.3.0)", "stats", "utils" ], @@ -2809,7 +2809,7 @@ "VignetteBuilder": "knitr", "Encoding": "UTF-8", "Language": "en-US", - "RoxygenNote": "7.3.2", + "RoxygenNote": "7.3.3", "Config/testthat/edition": "3", "Config/testthat/parallel": "true", "Config/Needs/website": "rstudio/bslib, r-lib/pkgdown, easystats/easystatstemplate", @@ -2819,11 +2819,11 @@ }, "emmeans": { "Package": "emmeans", - "Version": "2.0.1", + "Version": "2.0.2", "Source": "Repository", "Type": "Package", "Title": "Estimated Marginal Means, aka Least-Squares Means", - "Date": "2025-12-10", + "Date": "2026-02-20", "Authors@R": "c(person(\"Russell V.\", \"Lenth\", role = c(\"aut\", \"cph\"), email = \"russell-lenth@uiowa.edu\"), person(\"Julia\", \"Piaskowski\", role = c(\"cre\", \"aut\"), email = \"julia.piask@gmail.com\"), person(\"Balazs\", \"Banfai\", role = \"ctb\"), person(\"Ben\", \"Bolker\", role = \"ctb\"), person(\"Paul\", \"Buerkner\", role = \"ctb\"), person(\"Iago\", \"Giné-Vázquez\", role = \"ctb\"), person(\"Maxime\", \"Hervé\", role = \"ctb\"), person(\"Maarten\", \"Jung\", role = \"ctb\"), person(\"Jonathon\", \"Love\", role = \"ctb\"), person(\"Fernando\", \"Miguez\", role = \"ctb\"), person(\"Hannes\", \"Riebl\", role = \"ctb\"), person(\"Henrik\", \"Singmann\", role = \"ctb\"))", "Maintainer": "Julia Piaskowski ", "Depends": [ @@ -2886,7 +2886,7 @@ "sommer", "survival" ], - "URL": "https://rvlenth.github.io/emmeans/,https://rvlenth.github.io/emmeans/", + "URL": "https://rvlenth.github.io/emmeans/, https://github.com/rvlenth/emmeans/", "BugReports": "https://github.com/rvlenth/emmeans/issues", "LazyData": "yes", "ByteCompile": "yes", @@ -3435,16 +3435,16 @@ }, "fs": { "Package": "fs", - "Version": "1.6.6", + "Version": "1.6.7", "Source": "Repository", "Title": "Cross-Platform File System Operations Based on 'libuv'", - "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"libuv project contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Joyent, Inc. and other Node contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Gábor\", \"Csárdi\", role = \"aut\"), person(\"Jeroen\", \"Ooms\", , \"jeroenooms@gmail.com\", role = \"cre\"), person(\"libuv project contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Joyent, Inc. and other Node contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", "Description": "A cross-platform interface to file system operations, built on top of the 'libuv' C library.", "License": "MIT + file LICENSE", "URL": "https://fs.r-lib.org, https://github.com/r-lib/fs", "BugReports": "https://github.com/r-lib/fs/issues", "Depends": [ - "R (>= 3.6)" + "R (>= 4.1)" ], "Imports": [ "methods" @@ -3465,14 +3465,15 @@ "ByteCompile": "true", "Config/Needs/website": "tidyverse/tidytemplate", "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-04-23", "Copyright": "file COPYRIGHTS", "Encoding": "UTF-8", "Language": "en-US", - "RoxygenNote": "7.2.3", + "RoxygenNote": "7.3.3", "SystemRequirements": "GNU make", "NeedsCompilation": "yes", - "Author": "Jim Hester [aut], Hadley Wickham [aut], Gábor Csárdi [aut, cre], libuv project contributors [cph] (libuv library), Joyent, Inc. and other Node contributors [cph] (libuv library), Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", + "Author": "Jim Hester [aut], Hadley Wickham [aut], Gábor Csárdi [aut], Jeroen Ooms [cre], libuv project contributors [cph] (libuv library), Joyent, Inc. and other Node contributors [cph] (libuv library), Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Jeroen Ooms ", "Repository": "CRAN" }, "gap": { @@ -3642,7 +3643,7 @@ }, "ggalluvial": { "Package": "ggalluvial", - "Version": "0.12.5", + "Version": "0.12.6", "Source": "Repository", "Type": "Package", "Title": "Alluvial Plots in 'ggplot2'", @@ -3889,7 +3890,7 @@ }, "ggstats": { "Package": "ggstats", - "Version": "0.12.0", + "Version": "0.13.0", "Source": "Repository", "Type": "Package", "Title": "Extension to 'ggplot2' for Plotting Stats", @@ -4288,7 +4289,7 @@ }, "highr": { "Package": "highr", - "Version": "0.11", + "Version": "0.12", "Source": "Repository", "Type": "Package", "Title": "Syntax Highlighting for R Source Code", @@ -4310,9 +4311,9 @@ "BugReports": "https://github.com/yihui/highr/issues", "VignetteBuilder": "knitr", "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", + "RoxygenNote": "7.3.3", "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre] (), Yixuan Qiu [aut], Christopher Gandrud [ctb], Qiang Li [ctb]", + "Author": "Yihui Xie [aut, cre] (ORCID: ), Yixuan Qiu [aut], Christopher Gandrud [ctb], Qiang Li [ctb]", "Maintainer": "Yihui Xie ", "Repository": "CRAN" }, @@ -5041,7 +5042,7 @@ }, "later": { "Package": "later", - "Version": "1.4.6", + "Version": "1.4.8", "Source": "Repository", "Type": "Package", "Title": "Utilities for Scheduling Functions to Execute Later with Event Loops", @@ -5217,72 +5218,74 @@ }, "lme4": { "Package": "lme4", - "Version": "1.1-38", + "Version": "2.0-1", "Source": "Repository", "Title": "Linear Mixed-Effects Models using 'Eigen' and S4", - "Authors@R": "c( person(\"Douglas\",\"Bates\", role=\"aut\", comment=c(ORCID=\"0000-0001-8316-9503\")), person(\"Martin\",\"Maechler\", role=\"aut\", comment=c(ORCID=\"0000-0002-8685-9910\")), person(\"Ben\",\"Bolker\",email=\"bbolker+lme4@gmail.com\", role=c(\"aut\",\"cre\"), comment=c(ORCID=\"0000-0002-2127-0443\")), person(\"Steven\",\"Walker\",role=\"aut\", comment=c(ORCID=\"0000-0002-4394-9078\")), person(\"Rune Haubo Bojesen\",\"Christensen\", role=\"ctb\", comment=c(ORCID=\"0000-0002-4494-3399\")), person(\"Henrik\",\"Singmann\", role=\"ctb\", comment=c(ORCID=\"0000-0002-4842-3657\")), person(\"Bin\", \"Dai\", role=\"ctb\"), person(\"Fabian\", \"Scheipl\", role=\"ctb\", comment=c(ORCID=\"0000-0001-8172-3603\")), person(\"Gabor\", \"Grothendieck\", role=\"ctb\"), person(\"Peter\", \"Green\", role=\"ctb\", comment=c(ORCID=\"0000-0002-0238-9852\")), person(\"John\", \"Fox\", role=\"ctb\"), person(\"Alexander\", \"Bauer\", role=\"ctb\"), person(\"Pavel N.\", \"Krivitsky\", role=c(\"ctb\",\"cph\"), comment=c(ORCID=\"0000-0002-9101-3362\", \"shared copyright on simulate.formula\")), person(\"Emi\", \"Tanaka\", role = \"ctb\", comment = c(ORCID=\"0000-0002-1455-259X\")), person(\"Mikael\", \"Jagan\", role = \"ctb\", comment = c(ORCID=\"0000-0002-3542-2938\")), person(\"Ross D.\", \"Boylan\", email=\"ross.boylan@ucsf.edu\", role=(\"ctb\"), comment = c(ORCID=\"0009-0003-4123-8090\")), person(\"Anna\", \"Ly\", role = \"ctb\", comment = c(ORCID = \"0000-0002-0210-0342\")) )", - "Description": "Fit linear and generalized linear mixed-effects models. The models and their components are represented using S4 classes and methods. The core computational algorithms are implemented using the 'Eigen' C++ library for numerical linear algebra and 'RcppEigen' \"glue\".", + "Authors@R": "c(person(\"Douglas\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Martin\", \"Maechler\", role = \"aut\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Ben\", \"Bolker\", role = c(\"cre\", \"aut\"), email = \"bbolker+lme4@gmail.com\", comment = c(ORCID = \"0000-0002-2127-0443\")), person(\"Steven\", \"Walker\", role = \"aut\", comment = c(ORCID = \"0000-0002-4394-9078\")), person(\"Rune Haubo Bojesen\", \"Christensen\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4494-3399\")), person(\"Henrik\", \"Singmann\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4842-3657\")), person(\"Bin\", \"Dai\", role = \"ctb\"), person(\"Fabian\", \"Scheipl\", role = \"ctb\", comment = c(ORCID = \"0000-0001-8172-3603\")), person(\"Gabor\", \"Grothendieck\", role = \"ctb\"), person(\"Peter\", \"Green\", role = \"ctb\", comment = c(ORCID = \"0000-0002-0238-9852\")), person(\"John\", \"Fox\", role = \"ctb\"), person(\"Alexander\", \"Bauer\", role = \"ctb\"), person(\"Pavel N.\", \"Krivitsky\", role = c(\"ctb\", \"cph\"), comment = c(ORCID = \"0000-0002-9101-3362\", \"shared copyright on simulate.formula\")), person(\"Emi\", \"Tanaka\", role = \"ctb\", comment = c(ORCID = \"0000-0002-1455-259X\")), person(\"Mikael\", \"Jagan\", role = \"aut\", comment = c(ORCID = \"0000-0002-3542-2938\")), person(\"Ross D.\", \"Boylan\", role = \"ctb\", comment = c(ORCID = \"0009-0003-4123-8090\")), person(\"Anna\", \"Ly\", role = \"aut\", comment = c(ORCID = \"0000-0002-0210-0342\")))", + "Description": "Fit linear and generalized linear mixed-effects models. The models and their components are represented using S4 classes and methods. The core computational algorithms are implemented using the 'Eigen' C++ library for numerical linear algebra and 'RcppEigen' \"glue\".", "Depends": [ - "R (>= 3.6.0)", + "R (>= 3.6)", "Matrix", "methods", "stats" ], "LinkingTo": [ + "Matrix (>= 1.5-0)", "Rcpp (>= 0.10.5)", - "RcppEigen (>= 0.3.3.9.4)", - "Matrix (>= 1.5-0)" + "RcppEigen (>= 0.3.3.9.4)" ], "Imports": [ + "MASS", + "Rdpack", + "boot", "graphics", "grid", - "splines", - "utils", - "parallel", - "MASS", "lattice", - "boot", - "nlme (>= 3.1-123)", "minqa (>= 1.1.15)", + "nlme (>= 3.1-123)", "nloptr (>= 1.0.4)", - "reformulas (>= 0.3.0)", + "parallel", + "reformulas (>= 0.4.3.1)", "rlang", - "Rdpack" + "splines", + "utils" ], - "RdMacros": "Rdpack", "Suggests": [ - "knitr", - "rmarkdown", - "MEMSS", - "testthat (>= 0.8.1)", - "ggplot2", - "mlmRev", - "optimx (>= 2013.8.6)", - "gamm4", - "pbkrtest", "HSAUR3", - "numDeriv", + "MEMSS", "car", "dfoptim", + "gamm4", + "ggplot2", + "glmmTMB", + "knitr", + "merDeriv", "mgcv", - "statmod", + "mlmRev", + "numDeriv", + "optimx (>= 2013.8.6)", + "pbkrtest", + "rmarkdown", "rr2", "semEff", - "tibble", - "merDeriv" + "statmod", + "testthat (>= 0.8.1)", + "tibble" ], "Enhances": [ "DHARMa", "performance" ], + "RdMacros": "Rdpack", "VignetteBuilder": "knitr", "LazyData": "yes", "License": "GPL (>= 2)", "URL": "https://github.com/lme4/lme4/", "BugReports": "https://github.com/lme4/lme4/issues", "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", "NeedsCompilation": "yes", - "Author": "Douglas Bates [aut] (ORCID: ), Martin Maechler [aut] (ORCID: ), Ben Bolker [aut, cre] (ORCID: ), Steven Walker [aut] (ORCID: ), Rune Haubo Bojesen Christensen [ctb] (ORCID: ), Henrik Singmann [ctb] (ORCID: ), Bin Dai [ctb], Fabian Scheipl [ctb] (ORCID: ), Gabor Grothendieck [ctb], Peter Green [ctb] (ORCID: ), John Fox [ctb], Alexander Bauer [ctb], Pavel N. Krivitsky [ctb, cph] (ORCID: , shared copyright on simulate.formula), Emi Tanaka [ctb] (ORCID: ), Mikael Jagan [ctb] (ORCID: ), Ross D. Boylan [ctb] (ORCID: ), Anna Ly [ctb] (ORCID: )", + "Author": "Douglas Bates [aut] (ORCID: ), Martin Maechler [aut] (ORCID: ), Ben Bolker [cre, aut] (ORCID: ), Steven Walker [aut] (ORCID: ), Rune Haubo Bojesen Christensen [ctb] (ORCID: ), Henrik Singmann [ctb] (ORCID: ), Bin Dai [ctb], Fabian Scheipl [ctb] (ORCID: ), Gabor Grothendieck [ctb], Peter Green [ctb] (ORCID: ), John Fox [ctb], Alexander Bauer [ctb], Pavel N. Krivitsky [ctb, cph] (ORCID: , shared copyright on simulate.formula), Emi Tanaka [ctb] (ORCID: ), Mikael Jagan [aut] (ORCID: ), Ross D. Boylan [ctb] (ORCID: ), Anna Ly [aut] (ORCID: )", "Maintainer": "Ben Bolker ", "Repository": "CRAN" }, @@ -5672,10 +5675,10 @@ }, "mvtnorm": { "Package": "mvtnorm", - "Version": "1.3-3", + "Version": "1.3-5", "Source": "Repository", "Title": "Multivariate Normal and t Distributions", - "Date": "2025-01-09", + "Date": "2026-03-10", "Authors@R": "c(person(\"Alan\", \"Genz\", role = \"aut\"), person(\"Frank\", \"Bretz\", role = \"aut\"), person(\"Tetsuhisa\", \"Miwa\", role = \"aut\"), person(\"Xuefei\", \"Mi\", role = \"aut\"), person(\"Friedrich\", \"Leisch\", role = \"ctb\"), person(\"Fabian\", \"Scheipl\", role = \"ctb\"), person(\"Bjoern\", \"Bornkamp\", role = \"ctb\", comment = c(ORCID = \"0000-0002-6294-8185\")), person(\"Martin\", \"Maechler\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Torsten\", \"Hothorn\", role = c(\"aut\", \"cre\"), email = \"Torsten.Hothorn@R-project.org\", comment = c(ORCID = \"0000-0001-8301-0471\")))", "Description": "Computes multivariate normal and t probabilities, quantiles, random deviates, and densities. Log-likelihoods for multivariate Gaussian models and Gaussian copulae parameterised by Cholesky factors of covariance or precision matrices are implemented for interval-censored and exact data, or a mix thereof. Score functions for these log-likelihoods are available. A class representing multiple lower triangular matrices and corresponding methods are part of this package.", "Imports": [ @@ -5686,12 +5689,13 @@ ], "Suggests": [ "qrng", - "numDeriv" + "numDeriv", + "bibtex" ], "License": "GPL-2", "URL": "http://mvtnorm.R-forge.R-project.org", "NeedsCompilation": "yes", - "Author": "Alan Genz [aut], Frank Bretz [aut], Tetsuhisa Miwa [aut], Xuefei Mi [aut], Friedrich Leisch [ctb], Fabian Scheipl [ctb], Bjoern Bornkamp [ctb] (), Martin Maechler [ctb] (), Torsten Hothorn [aut, cre] ()", + "Author": "Alan Genz [aut], Frank Bretz [aut], Tetsuhisa Miwa [aut], Xuefei Mi [aut], Friedrich Leisch [ctb], Fabian Scheipl [ctb], Bjoern Bornkamp [ctb] (ORCID: ), Martin Maechler [ctb] (ORCID: ), Torsten Hothorn [aut, cre] (ORCID: )", "Maintainer": "Torsten Hothorn ", "Repository": "CRAN" }, @@ -5882,7 +5886,7 @@ }, "openssl": { "Package": "openssl", - "Version": "2.3.4", + "Version": "2.3.5", "Source": "Repository", "Type": "Package", "Title": "Toolkit for Encryption, Signatures and Certificates Based on OpenSSL", @@ -5915,7 +5919,7 @@ }, "openxlsx2": { "Package": "openxlsx2", - "Version": "1.23.1", + "Version": "1.25", "Source": "Repository", "Type": "Package", "Title": "Read, Write and Edit 'xlsx' Files", @@ -5942,10 +5946,10 @@ "ggplot2", "knitr", "mschart (>= 0.4)", + "openssl", "rmarkdown", "rvg", "testthat (>= 3.0.0)", - "waldo", "zip" ], "VignetteBuilder": "knitr", @@ -7089,7 +7093,7 @@ }, "ragg": { "Package": "ragg", - "Version": "1.5.0", + "Version": "1.5.1", "Source": "Repository", "Type": "Package", "Title": "Graphic Devices Based on AGG", @@ -7118,7 +7122,7 @@ "Config/testthat/edition": "3", "Config/usethis/last-upkeep": "2025-04-25", "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", + "RoxygenNote": "7.3.3", "SystemRequirements": "freetype2, libpng, libtiff, libjpeg, libwebp, libwebpmux", "NeedsCompilation": "yes", "Author": "Thomas Lin Pedersen [cre, aut] (ORCID: ), Maxim Shemanarev [aut, cph] (Author of AGG), Tony Juricic [ctb, cph] (Contributor to AGG), Milan Marusinec [ctb, cph] (Contributor to AGG), Spencer Garrett [ctb] (Contributor to AGG), Posit Software, PBC [cph, fnd] (ROR: )", @@ -7541,7 +7545,7 @@ }, "renv": { "Package": "renv", - "Version": "1.1.7", + "Version": "1.1.8", "Source": "Repository", "Type": "Package", "Title": "Project Environments", @@ -7585,11 +7589,11 @@ "Encoding": "UTF-8", "RoxygenNote": "7.3.3", "VignetteBuilder": "knitr", + "NeedsCompilation": "yes", "Config/Needs/website": "tidyverse/tidytemplate", "Config/testthat/edition": "3", "Config/testthat/parallel": "true", "Config/testthat/start-first": "bioconductor,python,install,restore,snapshot,retrieve,remotes", - "NeedsCompilation": "no", "Author": "Kevin Ushey [aut, cre] (ORCID: ), Hadley Wickham [aut] (ORCID: ), Posit Software, PBC [cph, fnd]", "Maintainer": "Kevin Ushey ", "Repository": "CRAN" @@ -8317,7 +8321,7 @@ }, "shinyWidgets": { "Package": "shinyWidgets", - "Version": "0.9.0", + "Version": "0.9.1", "Source": "Repository", "Title": "Custom Inputs Widgets for Shiny", "Authors@R": "c( person(\"Victor\", \"Perrier\", email = \"victor.perrier@dreamrs.fr\", role = c(\"aut\", \"cre\", \"cph\")), person(\"Fanny\", \"Meyer\", role = \"aut\"), person(\"David\", \"Granjon\", role = \"aut\"), person(\"Ian\", \"Fellows\", role = \"ctb\", comment = \"Methods for mutating vertical tabs & updateMultiInput\"), person(\"Wil\", \"Davis\", role = \"ctb\", comment = \"numericRangeInput function\"), person(\"Spencer\", \"Matthews\", role = \"ctb\", comment = \"autoNumeric methods\"), person(family = \"JavaScript and CSS libraries authors\", role = c(\"ctb\", \"cph\"), comment = \"All authors are listed in LICENSE.md\") )", @@ -8327,7 +8331,7 @@ "License": "GPL-3", "Encoding": "UTF-8", "LazyData": "true", - "RoxygenNote": "7.3.2", + "RoxygenNote": "7.3.3", "Depends": [ "R (>= 3.1.0)" ], @@ -8624,7 +8628,7 @@ }, "systemfonts": { "Package": "systemfonts", - "Version": "1.3.1", + "Version": "1.3.2", "Source": "Repository", "Type": "Package", "Title": "System Native Font Finding", @@ -8672,7 +8676,7 @@ }, "textshaping": { "Package": "textshaping", - "Version": "1.0.4", + "Version": "1.0.5", "Source": "Repository", "Title": "Bindings to the 'HarfBuzz' and 'Fribidi' Libraries for Text Shaping", "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", @@ -9513,21 +9517,23 @@ }, "xtable": { "Package": "xtable", - "Version": "1.8-4", + "Version": "1.8-8", "Source": "Repository", - "Date": "2019-04-08", + "Date": "2026-02-20", "Title": "Export Tables to LaTeX or HTML", "Authors@R": "c(person(\"David B.\", \"Dahl\", role=\"aut\"), person(\"David\", \"Scott\", role=c(\"aut\",\"cre\"), email=\"d.scott@auckland.ac.nz\"), person(\"Charles\", \"Roosen\", role=\"aut\"), person(\"Arni\", \"Magnusson\", role=\"aut\"), person(\"Jonathan\", \"Swinton\", role=\"aut\"), person(\"Ajay\", \"Shah\", role=\"ctb\"), person(\"Arne\", \"Henningsen\", role=\"ctb\"), person(\"Benno\", \"Puetz\", role=\"ctb\"), person(\"Bernhard\", \"Pfaff\", role=\"ctb\"), person(\"Claudio\", \"Agostinelli\", role=\"ctb\"), person(\"Claudius\", \"Loehnert\", role=\"ctb\"), person(\"David\", \"Mitchell\", role=\"ctb\"), person(\"David\", \"Whiting\", role=\"ctb\"), person(\"Fernando da\", \"Rosa\", role=\"ctb\"), person(\"Guido\", \"Gay\", role=\"ctb\"), person(\"Guido\", \"Schulz\", role=\"ctb\"), person(\"Ian\", \"Fellows\", role=\"ctb\"), person(\"Jeff\", \"Laake\", role=\"ctb\"), person(\"John\", \"Walker\", role=\"ctb\"), person(\"Jun\", \"Yan\", role=\"ctb\"), person(\"Liviu\", \"Andronic\", role=\"ctb\"), person(\"Markus\", \"Loecher\", role=\"ctb\"), person(\"Martin\", \"Gubri\", role=\"ctb\"), person(\"Matthieu\", \"Stigler\", role=\"ctb\"), person(\"Robert\", \"Castelo\", role=\"ctb\"), person(\"Seth\", \"Falcon\", role=\"ctb\"), person(\"Stefan\", \"Edwards\", role=\"ctb\"), person(\"Sven\", \"Garbade\", role=\"ctb\"), person(\"Uwe\", \"Ligges\", role=\"ctb\"))", "Maintainer": "David Scott ", "Imports": [ "stats", - "utils" + "utils", + "methods" ], "Suggests": [ "knitr", - "plm", "zoo", - "survival" + "survival", + "glue", + "tinytex" ], "VignetteBuilder": "knitr", "Description": "Coerce data to LaTeX and HTML tables.", diff --git a/renv/activate.R b/renv/activate.R index ef25ef83..6e94798d 100644 --- a/renv/activate.R +++ b/renv/activate.R @@ -2,8 +2,8 @@ local({ # the requested version of renv - version <- "1.1.7" - attr(version, "md5") <- "dd5d60f155dadff4c88c2fc6680504b4" + version <- "1.1.8" + attr(version, "md5") <- "cbffd086c66739a0fdaac7a30b4aa65c" attr(version, "sha") <- NULL # the project directory From f0f1e6965ad853f8b3e0260e30388b0817682f7b Mon Sep 17 00:00:00 2001 From: Andreas Gammelgaard Damsbo Date: Thu, 12 Mar 2026 12:43:30 +0100 Subject: [PATCH 11/15] fix: specified no limit --- README.md | 2 +- app_docker/app.R | 2 +- inst/apps/FreesearchR/app.R | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8f7ccef3..e40c0c41 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ The app can be configured either by passing a named list to `run_app()` or by se |-------------------------|-----------------------------------------------------------------------------|-----------| | `INCLUDE_GLOBALENV` | Load datasets already present in the global R environment into the app | `FALSE` | | `DATA_LIMIT_DEFAULT` | Default number of observations for previewing or working with a dataset | `10,000` | -| `DATA_LIMIT_UPPER` | Maximum number of observations a user can set for the upper limit | `100,000` | +| `DATA_LIMIT_UPPER` | Maximum number of observations a user can set for the upper limit. If set to 0, no uppper limit is applied. | `100,000` | | `DATA_LIMIT_LOWER` | Minimum number of observations a user can set for the lower limit | `1` | ### Run from R (or RStudio) diff --git a/app_docker/app.R b/app_docker/app.R index 004466c5..7cb858bb 100644 --- a/app_docker/app.R +++ b/app_docker/app.R @@ -1,7 +1,7 @@ ######## -#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//RtmpmhqokQ/file1a146f4d002a.R +#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//RtmpmhqokQ/file1a144d9f4424.R ######## i18n_path <- here::here("translations") diff --git a/inst/apps/FreesearchR/app.R b/inst/apps/FreesearchR/app.R index ad0da02a..2ee84131 100644 --- a/inst/apps/FreesearchR/app.R +++ b/inst/apps/FreesearchR/app.R @@ -1,7 +1,7 @@ ######## -#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//RtmpmhqokQ/file1a14715fd082.R +#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//RtmpmhqokQ/file1a147dcf977e.R ######## i18n_path <- system.file("translations", package = "FreesearchR") From afae978c26ab89cfb24ff450d4775ed25ffba892 Mon Sep 17 00:00:00 2001 From: Andreas Gammelgaard Damsbo Date: Thu, 12 Mar 2026 12:44:14 +0100 Subject: [PATCH 12/15] news --- NEWS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS.md b/NEWS.md index 570ab7e2..b05d8909 100644 --- a/NEWS.md +++ b/NEWS.md @@ -4,6 +4,8 @@ *FIX* faster data description function. +Also added a few tests to the package. + # FreesearchR 26.3.2 *FIX* Updating factor levels always created new factor. From 9e2ee1e40290a27d6e53e82dea8ddc74404cdd53 Mon Sep 17 00:00:00 2001 From: Andreas Gammelgaard Damsbo Date: Thu, 12 Mar 2026 12:46:31 +0100 Subject: [PATCH 13/15] added docs --- README.md | 2 +- app_docker/Dockerfile | 2 +- app_docker/app.R | 2 +- app_docker/renv.lock | 148 ++++++++++++++++++++++-------------------- 4 files changed, 80 insertions(+), 74 deletions(-) diff --git a/README.md b/README.md index e40c0c41..344b8649 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ If you're working with data in R, **FreesearchR** is a quick and easy tool for e launch_FreesearchR(INCLUDE_GLOBALENV=TRUE) ``` -All the variables specified above can also be passed to the app on launch from R. +All the variables specified above can also be passed to the app on launch from R. Set DATA_LIMIT_UPPER=0 to remove upper data limit. This limit is set to protect the online app version from choking and crashing on large data sets. ### Running with Docker Compose diff --git a/app_docker/Dockerfile b/app_docker/Dockerfile index 15d3a400..029da51f 100644 --- a/app_docker/Dockerfile +++ b/app_docker/Dockerfile @@ -3,7 +3,7 @@ RUN apt-get update -y && apt-get install -y cmake make libcurl4-openssl-dev lib RUN mkdir -p /usr/local/lib/R/etc/ /usr/lib/R/etc/ RUN echo "options(renv.config.pak.enabled = FALSE, repos = c(CRAN = 'https://cran.rstudio.com/'), download.file.method = 'libcurl', Ncpus = 4)" | tee /usr/local/lib/R/etc/Rprofile.site | tee /usr/lib/R/etc/Rprofile.site RUN R -e 'install.packages("remotes")' -RUN R -e 'remotes::install_version("renv", version = "1.1.7")' +RUN R -e 'remotes::install_version("renv", version = "1.1.8")' COPY renv.lock renv.lock RUN --mount=type=cache,id=renv-cache,target=/root/.cache/R/renv R -e 'renv::restore()' WORKDIR /srv/shiny-server/ diff --git a/app_docker/app.R b/app_docker/app.R index 7cb858bb..f50e462a 100644 --- a/app_docker/app.R +++ b/app_docker/app.R @@ -1,7 +1,7 @@ ######## -#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//RtmpmhqokQ/file1a144d9f4424.R +#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//RtmpmhqokQ/file1a1412a8be28.R ######## i18n_path <- here::here("translations") diff --git a/app_docker/renv.lock b/app_docker/renv.lock index dfbaf8cd..11ae7b52 100644 --- a/app_docker/renv.lock +++ b/app_docker/renv.lock @@ -2761,7 +2761,7 @@ }, "effectsize": { "Package": "effectsize", - "Version": "1.0.1", + "Version": "1.0.2", "Source": "Repository", "Type": "Package", "Title": "Indices of Effect Size", @@ -2775,11 +2775,11 @@ "R (>= 4.0)" ], "Imports": [ - "bayestestR (>= 0.16.0)", - "insight (>= 1.3.0)", - "parameters (>= 0.26.0)", - "performance (>= 0.14.0)", - "datawizard (>= 1.1.0)", + "bayestestR (>= 0.17.0)", + "insight (>= 1.4.5)", + "parameters (>= 0.28.3)", + "performance (>= 0.15.3)", + "datawizard (>= 1.3.0)", "stats", "utils" ], @@ -2809,7 +2809,7 @@ "VignetteBuilder": "knitr", "Encoding": "UTF-8", "Language": "en-US", - "RoxygenNote": "7.3.2", + "RoxygenNote": "7.3.3", "Config/testthat/edition": "3", "Config/testthat/parallel": "true", "Config/Needs/website": "rstudio/bslib, r-lib/pkgdown, easystats/easystatstemplate", @@ -2819,11 +2819,11 @@ }, "emmeans": { "Package": "emmeans", - "Version": "2.0.1", + "Version": "2.0.2", "Source": "Repository", "Type": "Package", "Title": "Estimated Marginal Means, aka Least-Squares Means", - "Date": "2025-12-10", + "Date": "2026-02-20", "Authors@R": "c(person(\"Russell V.\", \"Lenth\", role = c(\"aut\", \"cph\"), email = \"russell-lenth@uiowa.edu\"), person(\"Julia\", \"Piaskowski\", role = c(\"cre\", \"aut\"), email = \"julia.piask@gmail.com\"), person(\"Balazs\", \"Banfai\", role = \"ctb\"), person(\"Ben\", \"Bolker\", role = \"ctb\"), person(\"Paul\", \"Buerkner\", role = \"ctb\"), person(\"Iago\", \"Giné-Vázquez\", role = \"ctb\"), person(\"Maxime\", \"Hervé\", role = \"ctb\"), person(\"Maarten\", \"Jung\", role = \"ctb\"), person(\"Jonathon\", \"Love\", role = \"ctb\"), person(\"Fernando\", \"Miguez\", role = \"ctb\"), person(\"Hannes\", \"Riebl\", role = \"ctb\"), person(\"Henrik\", \"Singmann\", role = \"ctb\"))", "Maintainer": "Julia Piaskowski ", "Depends": [ @@ -2886,7 +2886,7 @@ "sommer", "survival" ], - "URL": "https://rvlenth.github.io/emmeans/,https://rvlenth.github.io/emmeans/", + "URL": "https://rvlenth.github.io/emmeans/, https://github.com/rvlenth/emmeans/", "BugReports": "https://github.com/rvlenth/emmeans/issues", "LazyData": "yes", "ByteCompile": "yes", @@ -3435,16 +3435,16 @@ }, "fs": { "Package": "fs", - "Version": "1.6.6", + "Version": "1.6.7", "Source": "Repository", "Title": "Cross-Platform File System Operations Based on 'libuv'", - "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"libuv project contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Joyent, Inc. and other Node contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Gábor\", \"Csárdi\", role = \"aut\"), person(\"Jeroen\", \"Ooms\", , \"jeroenooms@gmail.com\", role = \"cre\"), person(\"libuv project contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Joyent, Inc. and other Node contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", "Description": "A cross-platform interface to file system operations, built on top of the 'libuv' C library.", "License": "MIT + file LICENSE", "URL": "https://fs.r-lib.org, https://github.com/r-lib/fs", "BugReports": "https://github.com/r-lib/fs/issues", "Depends": [ - "R (>= 3.6)" + "R (>= 4.1)" ], "Imports": [ "methods" @@ -3465,14 +3465,15 @@ "ByteCompile": "true", "Config/Needs/website": "tidyverse/tidytemplate", "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-04-23", "Copyright": "file COPYRIGHTS", "Encoding": "UTF-8", "Language": "en-US", - "RoxygenNote": "7.2.3", + "RoxygenNote": "7.3.3", "SystemRequirements": "GNU make", "NeedsCompilation": "yes", - "Author": "Jim Hester [aut], Hadley Wickham [aut], Gábor Csárdi [aut, cre], libuv project contributors [cph] (libuv library), Joyent, Inc. and other Node contributors [cph] (libuv library), Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", + "Author": "Jim Hester [aut], Hadley Wickham [aut], Gábor Csárdi [aut], Jeroen Ooms [cre], libuv project contributors [cph] (libuv library), Joyent, Inc. and other Node contributors [cph] (libuv library), Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Jeroen Ooms ", "Repository": "CRAN" }, "gap": { @@ -3642,7 +3643,7 @@ }, "ggalluvial": { "Package": "ggalluvial", - "Version": "0.12.5", + "Version": "0.12.6", "Source": "Repository", "Type": "Package", "Title": "Alluvial Plots in 'ggplot2'", @@ -3889,7 +3890,7 @@ }, "ggstats": { "Package": "ggstats", - "Version": "0.12.0", + "Version": "0.13.0", "Source": "Repository", "Type": "Package", "Title": "Extension to 'ggplot2' for Plotting Stats", @@ -4288,7 +4289,7 @@ }, "highr": { "Package": "highr", - "Version": "0.11", + "Version": "0.12", "Source": "Repository", "Type": "Package", "Title": "Syntax Highlighting for R Source Code", @@ -4310,9 +4311,9 @@ "BugReports": "https://github.com/yihui/highr/issues", "VignetteBuilder": "knitr", "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", + "RoxygenNote": "7.3.3", "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre] (), Yixuan Qiu [aut], Christopher Gandrud [ctb], Qiang Li [ctb]", + "Author": "Yihui Xie [aut, cre] (ORCID: ), Yixuan Qiu [aut], Christopher Gandrud [ctb], Qiang Li [ctb]", "Maintainer": "Yihui Xie ", "Repository": "CRAN" }, @@ -5041,7 +5042,7 @@ }, "later": { "Package": "later", - "Version": "1.4.6", + "Version": "1.4.8", "Source": "Repository", "Type": "Package", "Title": "Utilities for Scheduling Functions to Execute Later with Event Loops", @@ -5217,72 +5218,74 @@ }, "lme4": { "Package": "lme4", - "Version": "1.1-38", + "Version": "2.0-1", "Source": "Repository", "Title": "Linear Mixed-Effects Models using 'Eigen' and S4", - "Authors@R": "c( person(\"Douglas\",\"Bates\", role=\"aut\", comment=c(ORCID=\"0000-0001-8316-9503\")), person(\"Martin\",\"Maechler\", role=\"aut\", comment=c(ORCID=\"0000-0002-8685-9910\")), person(\"Ben\",\"Bolker\",email=\"bbolker+lme4@gmail.com\", role=c(\"aut\",\"cre\"), comment=c(ORCID=\"0000-0002-2127-0443\")), person(\"Steven\",\"Walker\",role=\"aut\", comment=c(ORCID=\"0000-0002-4394-9078\")), person(\"Rune Haubo Bojesen\",\"Christensen\", role=\"ctb\", comment=c(ORCID=\"0000-0002-4494-3399\")), person(\"Henrik\",\"Singmann\", role=\"ctb\", comment=c(ORCID=\"0000-0002-4842-3657\")), person(\"Bin\", \"Dai\", role=\"ctb\"), person(\"Fabian\", \"Scheipl\", role=\"ctb\", comment=c(ORCID=\"0000-0001-8172-3603\")), person(\"Gabor\", \"Grothendieck\", role=\"ctb\"), person(\"Peter\", \"Green\", role=\"ctb\", comment=c(ORCID=\"0000-0002-0238-9852\")), person(\"John\", \"Fox\", role=\"ctb\"), person(\"Alexander\", \"Bauer\", role=\"ctb\"), person(\"Pavel N.\", \"Krivitsky\", role=c(\"ctb\",\"cph\"), comment=c(ORCID=\"0000-0002-9101-3362\", \"shared copyright on simulate.formula\")), person(\"Emi\", \"Tanaka\", role = \"ctb\", comment = c(ORCID=\"0000-0002-1455-259X\")), person(\"Mikael\", \"Jagan\", role = \"ctb\", comment = c(ORCID=\"0000-0002-3542-2938\")), person(\"Ross D.\", \"Boylan\", email=\"ross.boylan@ucsf.edu\", role=(\"ctb\"), comment = c(ORCID=\"0009-0003-4123-8090\")), person(\"Anna\", \"Ly\", role = \"ctb\", comment = c(ORCID = \"0000-0002-0210-0342\")) )", - "Description": "Fit linear and generalized linear mixed-effects models. The models and their components are represented using S4 classes and methods. The core computational algorithms are implemented using the 'Eigen' C++ library for numerical linear algebra and 'RcppEigen' \"glue\".", + "Authors@R": "c(person(\"Douglas\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Martin\", \"Maechler\", role = \"aut\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Ben\", \"Bolker\", role = c(\"cre\", \"aut\"), email = \"bbolker+lme4@gmail.com\", comment = c(ORCID = \"0000-0002-2127-0443\")), person(\"Steven\", \"Walker\", role = \"aut\", comment = c(ORCID = \"0000-0002-4394-9078\")), person(\"Rune Haubo Bojesen\", \"Christensen\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4494-3399\")), person(\"Henrik\", \"Singmann\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4842-3657\")), person(\"Bin\", \"Dai\", role = \"ctb\"), person(\"Fabian\", \"Scheipl\", role = \"ctb\", comment = c(ORCID = \"0000-0001-8172-3603\")), person(\"Gabor\", \"Grothendieck\", role = \"ctb\"), person(\"Peter\", \"Green\", role = \"ctb\", comment = c(ORCID = \"0000-0002-0238-9852\")), person(\"John\", \"Fox\", role = \"ctb\"), person(\"Alexander\", \"Bauer\", role = \"ctb\"), person(\"Pavel N.\", \"Krivitsky\", role = c(\"ctb\", \"cph\"), comment = c(ORCID = \"0000-0002-9101-3362\", \"shared copyright on simulate.formula\")), person(\"Emi\", \"Tanaka\", role = \"ctb\", comment = c(ORCID = \"0000-0002-1455-259X\")), person(\"Mikael\", \"Jagan\", role = \"aut\", comment = c(ORCID = \"0000-0002-3542-2938\")), person(\"Ross D.\", \"Boylan\", role = \"ctb\", comment = c(ORCID = \"0009-0003-4123-8090\")), person(\"Anna\", \"Ly\", role = \"aut\", comment = c(ORCID = \"0000-0002-0210-0342\")))", + "Description": "Fit linear and generalized linear mixed-effects models. The models and their components are represented using S4 classes and methods. The core computational algorithms are implemented using the 'Eigen' C++ library for numerical linear algebra and 'RcppEigen' \"glue\".", "Depends": [ - "R (>= 3.6.0)", + "R (>= 3.6)", "Matrix", "methods", "stats" ], "LinkingTo": [ + "Matrix (>= 1.5-0)", "Rcpp (>= 0.10.5)", - "RcppEigen (>= 0.3.3.9.4)", - "Matrix (>= 1.5-0)" + "RcppEigen (>= 0.3.3.9.4)" ], "Imports": [ + "MASS", + "Rdpack", + "boot", "graphics", "grid", - "splines", - "utils", - "parallel", - "MASS", "lattice", - "boot", - "nlme (>= 3.1-123)", "minqa (>= 1.1.15)", + "nlme (>= 3.1-123)", "nloptr (>= 1.0.4)", - "reformulas (>= 0.3.0)", + "parallel", + "reformulas (>= 0.4.3.1)", "rlang", - "Rdpack" + "splines", + "utils" ], - "RdMacros": "Rdpack", "Suggests": [ - "knitr", - "rmarkdown", - "MEMSS", - "testthat (>= 0.8.1)", - "ggplot2", - "mlmRev", - "optimx (>= 2013.8.6)", - "gamm4", - "pbkrtest", "HSAUR3", - "numDeriv", + "MEMSS", "car", "dfoptim", + "gamm4", + "ggplot2", + "glmmTMB", + "knitr", + "merDeriv", "mgcv", - "statmod", + "mlmRev", + "numDeriv", + "optimx (>= 2013.8.6)", + "pbkrtest", + "rmarkdown", "rr2", "semEff", - "tibble", - "merDeriv" + "statmod", + "testthat (>= 0.8.1)", + "tibble" ], "Enhances": [ "DHARMa", "performance" ], + "RdMacros": "Rdpack", "VignetteBuilder": "knitr", "LazyData": "yes", "License": "GPL (>= 2)", "URL": "https://github.com/lme4/lme4/", "BugReports": "https://github.com/lme4/lme4/issues", "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", "NeedsCompilation": "yes", - "Author": "Douglas Bates [aut] (ORCID: ), Martin Maechler [aut] (ORCID: ), Ben Bolker [aut, cre] (ORCID: ), Steven Walker [aut] (ORCID: ), Rune Haubo Bojesen Christensen [ctb] (ORCID: ), Henrik Singmann [ctb] (ORCID: ), Bin Dai [ctb], Fabian Scheipl [ctb] (ORCID: ), Gabor Grothendieck [ctb], Peter Green [ctb] (ORCID: ), John Fox [ctb], Alexander Bauer [ctb], Pavel N. Krivitsky [ctb, cph] (ORCID: , shared copyright on simulate.formula), Emi Tanaka [ctb] (ORCID: ), Mikael Jagan [ctb] (ORCID: ), Ross D. Boylan [ctb] (ORCID: ), Anna Ly [ctb] (ORCID: )", + "Author": "Douglas Bates [aut] (ORCID: ), Martin Maechler [aut] (ORCID: ), Ben Bolker [cre, aut] (ORCID: ), Steven Walker [aut] (ORCID: ), Rune Haubo Bojesen Christensen [ctb] (ORCID: ), Henrik Singmann [ctb] (ORCID: ), Bin Dai [ctb], Fabian Scheipl [ctb] (ORCID: ), Gabor Grothendieck [ctb], Peter Green [ctb] (ORCID: ), John Fox [ctb], Alexander Bauer [ctb], Pavel N. Krivitsky [ctb, cph] (ORCID: , shared copyright on simulate.formula), Emi Tanaka [ctb] (ORCID: ), Mikael Jagan [aut] (ORCID: ), Ross D. Boylan [ctb] (ORCID: ), Anna Ly [aut] (ORCID: )", "Maintainer": "Ben Bolker ", "Repository": "CRAN" }, @@ -5672,10 +5675,10 @@ }, "mvtnorm": { "Package": "mvtnorm", - "Version": "1.3-3", + "Version": "1.3-5", "Source": "Repository", "Title": "Multivariate Normal and t Distributions", - "Date": "2025-01-09", + "Date": "2026-03-10", "Authors@R": "c(person(\"Alan\", \"Genz\", role = \"aut\"), person(\"Frank\", \"Bretz\", role = \"aut\"), person(\"Tetsuhisa\", \"Miwa\", role = \"aut\"), person(\"Xuefei\", \"Mi\", role = \"aut\"), person(\"Friedrich\", \"Leisch\", role = \"ctb\"), person(\"Fabian\", \"Scheipl\", role = \"ctb\"), person(\"Bjoern\", \"Bornkamp\", role = \"ctb\", comment = c(ORCID = \"0000-0002-6294-8185\")), person(\"Martin\", \"Maechler\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Torsten\", \"Hothorn\", role = c(\"aut\", \"cre\"), email = \"Torsten.Hothorn@R-project.org\", comment = c(ORCID = \"0000-0001-8301-0471\")))", "Description": "Computes multivariate normal and t probabilities, quantiles, random deviates, and densities. Log-likelihoods for multivariate Gaussian models and Gaussian copulae parameterised by Cholesky factors of covariance or precision matrices are implemented for interval-censored and exact data, or a mix thereof. Score functions for these log-likelihoods are available. A class representing multiple lower triangular matrices and corresponding methods are part of this package.", "Imports": [ @@ -5686,12 +5689,13 @@ ], "Suggests": [ "qrng", - "numDeriv" + "numDeriv", + "bibtex" ], "License": "GPL-2", "URL": "http://mvtnorm.R-forge.R-project.org", "NeedsCompilation": "yes", - "Author": "Alan Genz [aut], Frank Bretz [aut], Tetsuhisa Miwa [aut], Xuefei Mi [aut], Friedrich Leisch [ctb], Fabian Scheipl [ctb], Bjoern Bornkamp [ctb] (), Martin Maechler [ctb] (), Torsten Hothorn [aut, cre] ()", + "Author": "Alan Genz [aut], Frank Bretz [aut], Tetsuhisa Miwa [aut], Xuefei Mi [aut], Friedrich Leisch [ctb], Fabian Scheipl [ctb], Bjoern Bornkamp [ctb] (ORCID: ), Martin Maechler [ctb] (ORCID: ), Torsten Hothorn [aut, cre] (ORCID: )", "Maintainer": "Torsten Hothorn ", "Repository": "CRAN" }, @@ -5882,7 +5886,7 @@ }, "openssl": { "Package": "openssl", - "Version": "2.3.4", + "Version": "2.3.5", "Source": "Repository", "Type": "Package", "Title": "Toolkit for Encryption, Signatures and Certificates Based on OpenSSL", @@ -5915,7 +5919,7 @@ }, "openxlsx2": { "Package": "openxlsx2", - "Version": "1.23.1", + "Version": "1.25", "Source": "Repository", "Type": "Package", "Title": "Read, Write and Edit 'xlsx' Files", @@ -5942,10 +5946,10 @@ "ggplot2", "knitr", "mschart (>= 0.4)", + "openssl", "rmarkdown", "rvg", "testthat (>= 3.0.0)", - "waldo", "zip" ], "VignetteBuilder": "knitr", @@ -7089,7 +7093,7 @@ }, "ragg": { "Package": "ragg", - "Version": "1.5.0", + "Version": "1.5.1", "Source": "Repository", "Type": "Package", "Title": "Graphic Devices Based on AGG", @@ -7118,7 +7122,7 @@ "Config/testthat/edition": "3", "Config/usethis/last-upkeep": "2025-04-25", "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", + "RoxygenNote": "7.3.3", "SystemRequirements": "freetype2, libpng, libtiff, libjpeg, libwebp, libwebpmux", "NeedsCompilation": "yes", "Author": "Thomas Lin Pedersen [cre, aut] (ORCID: ), Maxim Shemanarev [aut, cph] (Author of AGG), Tony Juricic [ctb, cph] (Contributor to AGG), Milan Marusinec [ctb, cph] (Contributor to AGG), Spencer Garrett [ctb] (Contributor to AGG), Posit Software, PBC [cph, fnd] (ROR: )", @@ -7541,7 +7545,7 @@ }, "renv": { "Package": "renv", - "Version": "1.1.7", + "Version": "1.1.8", "Source": "Repository", "Type": "Package", "Title": "Project Environments", @@ -7585,11 +7589,11 @@ "Encoding": "UTF-8", "RoxygenNote": "7.3.3", "VignetteBuilder": "knitr", + "NeedsCompilation": "yes", "Config/Needs/website": "tidyverse/tidytemplate", "Config/testthat/edition": "3", "Config/testthat/parallel": "true", "Config/testthat/start-first": "bioconductor,python,install,restore,snapshot,retrieve,remotes", - "NeedsCompilation": "no", "Author": "Kevin Ushey [aut, cre] (ORCID: ), Hadley Wickham [aut] (ORCID: ), Posit Software, PBC [cph, fnd]", "Maintainer": "Kevin Ushey ", "Repository": "CRAN" @@ -8317,7 +8321,7 @@ }, "shinyWidgets": { "Package": "shinyWidgets", - "Version": "0.9.0", + "Version": "0.9.1", "Source": "Repository", "Title": "Custom Inputs Widgets for Shiny", "Authors@R": "c( person(\"Victor\", \"Perrier\", email = \"victor.perrier@dreamrs.fr\", role = c(\"aut\", \"cre\", \"cph\")), person(\"Fanny\", \"Meyer\", role = \"aut\"), person(\"David\", \"Granjon\", role = \"aut\"), person(\"Ian\", \"Fellows\", role = \"ctb\", comment = \"Methods for mutating vertical tabs & updateMultiInput\"), person(\"Wil\", \"Davis\", role = \"ctb\", comment = \"numericRangeInput function\"), person(\"Spencer\", \"Matthews\", role = \"ctb\", comment = \"autoNumeric methods\"), person(family = \"JavaScript and CSS libraries authors\", role = c(\"ctb\", \"cph\"), comment = \"All authors are listed in LICENSE.md\") )", @@ -8327,7 +8331,7 @@ "License": "GPL-3", "Encoding": "UTF-8", "LazyData": "true", - "RoxygenNote": "7.3.2", + "RoxygenNote": "7.3.3", "Depends": [ "R (>= 3.1.0)" ], @@ -8624,7 +8628,7 @@ }, "systemfonts": { "Package": "systemfonts", - "Version": "1.3.1", + "Version": "1.3.2", "Source": "Repository", "Type": "Package", "Title": "System Native Font Finding", @@ -8672,7 +8676,7 @@ }, "textshaping": { "Package": "textshaping", - "Version": "1.0.4", + "Version": "1.0.5", "Source": "Repository", "Title": "Bindings to the 'HarfBuzz' and 'Fribidi' Libraries for Text Shaping", "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", @@ -9513,21 +9517,23 @@ }, "xtable": { "Package": "xtable", - "Version": "1.8-4", + "Version": "1.8-8", "Source": "Repository", - "Date": "2019-04-08", + "Date": "2026-02-20", "Title": "Export Tables to LaTeX or HTML", "Authors@R": "c(person(\"David B.\", \"Dahl\", role=\"aut\"), person(\"David\", \"Scott\", role=c(\"aut\",\"cre\"), email=\"d.scott@auckland.ac.nz\"), person(\"Charles\", \"Roosen\", role=\"aut\"), person(\"Arni\", \"Magnusson\", role=\"aut\"), person(\"Jonathan\", \"Swinton\", role=\"aut\"), person(\"Ajay\", \"Shah\", role=\"ctb\"), person(\"Arne\", \"Henningsen\", role=\"ctb\"), person(\"Benno\", \"Puetz\", role=\"ctb\"), person(\"Bernhard\", \"Pfaff\", role=\"ctb\"), person(\"Claudio\", \"Agostinelli\", role=\"ctb\"), person(\"Claudius\", \"Loehnert\", role=\"ctb\"), person(\"David\", \"Mitchell\", role=\"ctb\"), person(\"David\", \"Whiting\", role=\"ctb\"), person(\"Fernando da\", \"Rosa\", role=\"ctb\"), person(\"Guido\", \"Gay\", role=\"ctb\"), person(\"Guido\", \"Schulz\", role=\"ctb\"), person(\"Ian\", \"Fellows\", role=\"ctb\"), person(\"Jeff\", \"Laake\", role=\"ctb\"), person(\"John\", \"Walker\", role=\"ctb\"), person(\"Jun\", \"Yan\", role=\"ctb\"), person(\"Liviu\", \"Andronic\", role=\"ctb\"), person(\"Markus\", \"Loecher\", role=\"ctb\"), person(\"Martin\", \"Gubri\", role=\"ctb\"), person(\"Matthieu\", \"Stigler\", role=\"ctb\"), person(\"Robert\", \"Castelo\", role=\"ctb\"), person(\"Seth\", \"Falcon\", role=\"ctb\"), person(\"Stefan\", \"Edwards\", role=\"ctb\"), person(\"Sven\", \"Garbade\", role=\"ctb\"), person(\"Uwe\", \"Ligges\", role=\"ctb\"))", "Maintainer": "David Scott ", "Imports": [ "stats", - "utils" + "utils", + "methods" ], "Suggests": [ "knitr", - "plm", "zoo", - "survival" + "survival", + "glue", + "tinytex" ], "VignetteBuilder": "knitr", "Description": "Coerce data to LaTeX and HTML tables.", From 7394a6753feb6309e88e95ad7f361749c4019883 Mon Sep 17 00:00:00 2001 From: Andreas Gammelgaard Damsbo Date: Thu, 12 Mar 2026 13:49:57 +0100 Subject: [PATCH 14/15] rerender all --- CITATION.cff | 2 +- DESCRIPTION | 2 +- NEWS.md | 4 ++++ R/app_version.R | 2 +- R/hosted_version.R | 2 +- R/sysdata.rda | Bin 2671 -> 2645 bytes SESSION.md | 28 ++++++++++++++-------------- app_docker/app.R | 6 +++--- app_docker/renv.lock | 12 ++++++------ renv.lock | 12 ++++++------ 10 files changed, 37 insertions(+), 33 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 3baa4bf4..f7e2ec6a 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -8,7 +8,7 @@ message: 'To cite package "FreesearchR" in publications use:' type: software license: AGPL-3.0-or-later title: 'FreesearchR: Easy data analysis for clinicians' -version: 26.3.3 +version: 26.3.4 doi: 10.5281/zenodo.14527429 identifiers: - type: url diff --git a/DESCRIPTION b/DESCRIPTION index e47380cb..3e2cc6ab 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: FreesearchR Title: Easy data analysis for clinicians -Version: 26.3.3 +Version: 26.3.4 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 b05d8909..f08ae0b2 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,7 @@ +# FreesearchR 26.3.4 + + + # FreesearchR 26.3.3 *NEW* option to pass global settings when running as docker or launching from R. Support for INCLUDE_GLOBALENV, DATA_LIMIT_DEFAULT, DATA_LIMIT_UPPER and DATA_LIMIT_LOWER. Described in the README. diff --git a/R/app_version.R b/R/app_version.R index dccdf7c4..c6d7307c 100644 --- a/R/app_version.R +++ b/R/app_version.R @@ -1 +1 @@ -app_version <- function()'26.3.3' +app_version <- function()'26.3.4' diff --git a/R/hosted_version.R b/R/hosted_version.R index b15a5737..f0c656d1 100644 --- a/R/hosted_version.R +++ b/R/hosted_version.R @@ -1 +1 @@ -hosted_version <- function()'v26.3.3-260312' +hosted_version <- function()'v26.3.4-260312' diff --git a/R/sysdata.rda b/R/sysdata.rda index 7ab55e91eff8121f1805d27dc695bbd323b19233..f8b0df59c674b9d09f2de1dbfadcfb9a132325b6 100644 GIT binary patch delta 2644 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 CFzo{X delta 2670 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 diff --git a/SESSION.md b/SESSION.md index 2f9f27b9..1bd978b0 100644 --- a/SESSION.md +++ b/SESSION.md @@ -15,7 +15,7 @@ |rstudio |2026.01.1+403 Apple Blossom (desktop) | |pandoc |3.6.4 @ /opt/homebrew/bin/ (via rmarkdown) | |quarto |1.7.30 @ /usr/local/bin/quarto | -|FreesearchR |26.3.3.260312 | +|FreesearchR |26.3.4.260312 | -------------------------------------------------------------------------------- @@ -32,7 +32,7 @@ |bit |4.6.0 |2025-03-06 |CRAN (R 4.5.0) | |bit64 |4.6.0-1 |2025-01-16 |CRAN (R 4.5.0) | |bitops |1.0-9 |2024-10-03 |CRAN (R 4.5.0) | -|boot |1.3-32 |2025-08-29 |CRAN (R 4.5.2) | +|boot |1.3-32 |2025-08-29 |CRAN (R 4.5.0) | |broom |1.0.12 |2026-01-27 |CRAN (R 4.5.2) | |broom.helpers |1.22.0 |2025-09-17 |CRAN (R 4.5.0) | |bsicons |0.1.2 |2023-11-04 |CRAN (R 4.5.0) | @@ -44,11 +44,11 @@ |caTools |1.18.3 |2024-09-04 |CRAN (R 4.5.0) | |cellranger |1.1.0 |2016-07-27 |CRAN (R 4.5.0) | |checkmate |2.3.4 |2026-02-03 |CRAN (R 4.5.2) | -|class |7.3-23 |2025-01-01 |CRAN (R 4.5.2) | +|class |7.3-23 |2025-01-01 |CRAN (R 4.5.0) | |classInt |0.4-11 |2025-01-08 |CRAN (R 4.5.0) | |cli |3.6.5 |2025-04-23 |CRAN (R 4.5.0) | |cluster |2.1.8.2 |2026-02-05 |CRAN (R 4.5.2) | -|codetools |0.2-20 |2024-03-31 |CRAN (R 4.5.2) | +|codetools |0.2-20 |2024-03-31 |CRAN (R 4.5.0) | |colorspace |2.1-2 |2025-09-22 |CRAN (R 4.5.0) | |commonmark |2.0.0 |2025-07-07 |CRAN (R 4.5.0) | |crayon |1.5.3 |2024-06-20 |CRAN (R 4.5.0) | @@ -79,9 +79,9 @@ |fontquiver |0.2.1 |2017-02-01 |CRAN (R 4.5.0) | |forcats |1.0.1 |2025-09-25 |CRAN (R 4.5.0) | |foreach |1.5.2 |2022-02-02 |CRAN (R 4.5.0) | -|foreign |0.8-90 |2025-03-31 |CRAN (R 4.5.2) | +|foreign |0.8-91 |2026-01-29 |CRAN (R 4.5.2) | |Formula |1.2-5 |2023-02-24 |CRAN (R 4.5.0) | -|FreesearchR |26.3.3 |NA |NA | +|FreesearchR |26.3.4 |NA |NA | |fs |1.6.7 |2026-03-06 |CRAN (R 4.5.2) | |gdtools |0.5.0 |2026-02-09 |CRAN (R 4.5.2) | |generics |0.1.4 |2025-05-09 |CRAN (R 4.5.0) | @@ -109,25 +109,25 @@ |iterators |1.0.14 |2022-02-05 |CRAN (R 4.5.0) | |jquerylib |0.1.4 |2021-04-26 |CRAN (R 4.5.0) | |jsonlite |2.0.0 |2025-03-27 |CRAN (R 4.5.0) | -|KernSmooth |2.23-26 |2025-01-01 |CRAN (R 4.5.2) | +|KernSmooth |2.23-26 |2025-01-01 |CRAN (R 4.5.0) | |keyring |1.4.1 |2025-06-15 |CRAN (R 4.5.0) | |knitr |1.51 |2025-12-20 |CRAN (R 4.5.2) | -|later |1.4.6 |2026-03-05 |CRAN (R 4.5.2) | +|later |1.4.8 |2026-03-05 |CRAN (R 4.5.2) | |lattice |0.22-7 |2025-04-02 |CRAN (R 4.5.2) | |lifecycle |1.0.5 |2026-01-08 |CRAN (R 4.5.2) | |lme4 |2.0-1 |2026-03-05 |CRAN (R 4.5.2) | |lubridate |1.9.5 |2026-02-04 |CRAN (R 4.5.2) | |magrittr |2.0.4 |2025-09-12 |CRAN (R 4.5.0) | |MASS |7.3-65 |2025-02-28 |CRAN (R 4.5.0) | -|Matrix |1.7-4 |2025-08-28 |CRAN (R 4.5.2) | +|Matrix |1.7-4 |2025-08-28 |CRAN (R 4.5.0) | |memoise |2.0.1 |2021-11-26 |CRAN (R 4.5.0) | |mime |0.13 |2025-03-17 |CRAN (R 4.5.0) | |minqa |1.2.8 |2024-08-17 |CRAN (R 4.5.0) | |mvtnorm |1.3-5 |2026-03-11 |CRAN (R 4.5.2) | |NHANES |2.1.0 |2015-07-02 |CRAN (R 4.5.0) | -|nlme |3.1-168 |2025-03-31 |CRAN (R 4.5.2) | +|nlme |3.1-168 |2025-03-31 |CRAN (R 4.5.0) | |nloptr |2.2.1 |2025-03-17 |CRAN (R 4.5.0) | -|nnet |7.3-20 |2025-01-01 |CRAN (R 4.5.2) | +|nnet |7.3-20 |2025-01-01 |CRAN (R 4.5.0) | |officer |0.7.3 |2026-01-16 |CRAN (R 4.5.2) | |opdisDownsampling |1.0.1 |2024-04-15 |CRAN (R 4.5.0) | |openssl |2.3.5 |2026-02-26 |CRAN (R 4.5.2) | @@ -170,14 +170,14 @@ |reformulas |0.4.4 |2026-02-02 |CRAN (R 4.5.2) | |remotes |2.5.0 |2024-03-17 |CRAN (R 4.5.0) | |rempsyc |0.2.0 |2025-09-15 |CRAN (R 4.5.0) | -|renv |1.1.7 |2026-03-05 |CRAN (R 4.5.2) | +|renv |1.1.8 |2026-03-05 |CRAN (R 4.5.2) | |reshape2 |1.4.5 |2025-11-12 |CRAN (R 4.5.0) | |rio |1.2.4 |2025-09-26 |CRAN (R 4.5.0) | |rlang |1.1.7 |2026-01-09 |CRAN (R 4.5.2) | |rmarkdown |2.30 |2025-09-28 |CRAN (R 4.5.0) | |robustbase |0.99-7 |2026-02-05 |CRAN (R 4.5.2) | |roxygen2 |7.3.3 |2025-09-03 |CRAN (R 4.5.0) | -|rpart |4.1.24 |2025-01-07 |CRAN (R 4.5.2) | +|rpart |4.1.24 |2025-01-07 |CRAN (R 4.5.0) | |rprojroot |2.1.1 |2025-08-26 |CRAN (R 4.5.0) | |rsconnect |1.7.0 |2025-12-06 |CRAN (R 4.5.2) | |rstudioapi |0.18.0 |2026-01-16 |CRAN (R 4.5.2) | @@ -217,6 +217,6 @@ |writexl |1.5.4 |2025-04-15 |CRAN (R 4.5.0) | |xfun |0.56 |2026-01-18 |CRAN (R 4.5.2) | |xml2 |1.5.2 |2026-01-17 |CRAN (R 4.5.2) | -|xtable |1.8-4 |2026-02-22 |CRAN (R 4.5.2) | +|xtable |1.8-8 |2026-02-22 |CRAN (R 4.5.2) | |yaml |2.3.12 |2025-12-10 |CRAN (R 4.5.2) | |zip |2.3.3 |2025-05-13 |CRAN (R 4.5.0) | diff --git a/app_docker/app.R b/app_docker/app.R index f50e462a..63a9e442 100644 --- a/app_docker/app.R +++ b/app_docker/app.R @@ -1,7 +1,7 @@ ######## -#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//RtmpmhqokQ/file1a1412a8be28.R +#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//Rtmp6ipYJe/file24f61644daa6.R ######## i18n_path <- here::here("translations") @@ -64,7 +64,7 @@ i18n$set_translation_language("en") #### Current file: /Users/au301842/FreesearchR/R//app_version.R ######## -app_version <- function()'26.3.3' +app_version <- function()'26.3.4' ######## @@ -4514,7 +4514,7 @@ data_types <- function() { #### Current file: /Users/au301842/FreesearchR/R//hosted_version.R ######## -hosted_version <- function()'v26.3.3-260312' +hosted_version <- function()'v26.3.4-260312' ######## diff --git a/app_docker/renv.lock b/app_docker/renv.lock index 11ae7b52..ca300008 100644 --- a/app_docker/renv.lock +++ b/app_docker/renv.lock @@ -3405,10 +3405,10 @@ }, "foreign": { "Package": "foreign", - "Version": "0.8-90", + "Version": "0.8-91", "Source": "Repository", "Priority": "recommended", - "Date": "2025-03-31", + "Date": "2026-01-29", "Title": "Read Data Stored by 'Minitab', 'S', 'SAS', 'SPSS', 'Stata', 'Systat', 'Weka', 'dBase', ...", "Depends": [ "R (>= 4.0.0)" @@ -3429,7 +3429,7 @@ "MailingList": "R-help@r-project.org", "URL": "https://svn.r-project.org/R-packages/trunk/foreign/", "NeedsCompilation": "yes", - "Author": "R Core Team [aut, cph, cre] (02zz1nj61), Roger Bivand [ctb, cph], Vincent J. Carey [ctb, cph], Saikat DebRoy [ctb, cph], Stephen Eglen [ctb, cph], Rajarshi Guha [ctb, cph], Swetlana Herbrandt [ctb], Nicholas Lewin-Koh [ctb, cph], Mark Myatt [ctb, cph], Michael Nelson [ctb], Ben Pfaff [ctb], Brian Quistorff [ctb], Frank Warmerdam [ctb, cph], Stephen Weigand [ctb, cph], Free Software Foundation, Inc. [cph]", + "Author": "R Core Team [aut, cph, cre] (ROR: ), Roger Bivand [ctb, cph], Vincent J. Carey [ctb, cph], Saikat DebRoy [ctb, cph], Stephen Eglen [ctb, cph], Rajarshi Guha [ctb, cph], Swetlana Herbrandt [ctb], Nicholas Lewin-Koh [ctb, cph], Mark Myatt [ctb, cph], Michael Nelson [ctb], Ben Pfaff [ctb], Brian Quistorff [ctb], Frank Warmerdam [ctb, cph], Stephen Weigand [ctb, cph], Free Software Foundation, Inc. [cph]", "Maintainer": "R Core Team ", "Repository": "CRAN" }, @@ -5462,14 +5462,14 @@ }, "mgcv": { "Package": "mgcv", - "Version": "1.9-3", + "Version": "1.9-4", "Source": "Repository", "Authors@R": "person(given = \"Simon\", family = \"Wood\", role = c(\"aut\", \"cre\"), email = \"simon.wood@r-project.org\")", "Title": "Mixed GAM Computation Vehicle with Automatic Smoothness Estimation", - "Description": "Generalized additive (mixed) models, some of their extensions and other generalized ridge regression with multiple smoothing parameter estimation by (Restricted) Marginal Likelihood, Generalized Cross Validation and similar, or using iterated nested Laplace approximation for fully Bayesian inference. See Wood (2017) for an overview. Includes a gam() function, a wide variety of smoothers, 'JAGS' support and distributions beyond the exponential family.", + "Description": "Generalized additive (mixed) models, some of their extensions and other generalized ridge regression with multiple smoothing parameter estimation by (Restricted) Marginal Likelihood, Cross Validation and similar, or using iterated nested Laplace approximation for fully Bayesian inference. See Wood (2025) for an overview. Includes a gam() function, a wide variety of smoothers, 'JAGS' support and distributions beyond the exponential family.", "Priority": "recommended", "Depends": [ - "R (>= 3.6.0)", + "R (>= 4.4.0)", "nlme (>= 3.1-64)" ], "Imports": [ diff --git a/renv.lock b/renv.lock index 11ae7b52..ca300008 100644 --- a/renv.lock +++ b/renv.lock @@ -3405,10 +3405,10 @@ }, "foreign": { "Package": "foreign", - "Version": "0.8-90", + "Version": "0.8-91", "Source": "Repository", "Priority": "recommended", - "Date": "2025-03-31", + "Date": "2026-01-29", "Title": "Read Data Stored by 'Minitab', 'S', 'SAS', 'SPSS', 'Stata', 'Systat', 'Weka', 'dBase', ...", "Depends": [ "R (>= 4.0.0)" @@ -3429,7 +3429,7 @@ "MailingList": "R-help@r-project.org", "URL": "https://svn.r-project.org/R-packages/trunk/foreign/", "NeedsCompilation": "yes", - "Author": "R Core Team [aut, cph, cre] (02zz1nj61), Roger Bivand [ctb, cph], Vincent J. Carey [ctb, cph], Saikat DebRoy [ctb, cph], Stephen Eglen [ctb, cph], Rajarshi Guha [ctb, cph], Swetlana Herbrandt [ctb], Nicholas Lewin-Koh [ctb, cph], Mark Myatt [ctb, cph], Michael Nelson [ctb], Ben Pfaff [ctb], Brian Quistorff [ctb], Frank Warmerdam [ctb, cph], Stephen Weigand [ctb, cph], Free Software Foundation, Inc. [cph]", + "Author": "R Core Team [aut, cph, cre] (ROR: ), Roger Bivand [ctb, cph], Vincent J. Carey [ctb, cph], Saikat DebRoy [ctb, cph], Stephen Eglen [ctb, cph], Rajarshi Guha [ctb, cph], Swetlana Herbrandt [ctb], Nicholas Lewin-Koh [ctb, cph], Mark Myatt [ctb, cph], Michael Nelson [ctb], Ben Pfaff [ctb], Brian Quistorff [ctb], Frank Warmerdam [ctb, cph], Stephen Weigand [ctb, cph], Free Software Foundation, Inc. [cph]", "Maintainer": "R Core Team ", "Repository": "CRAN" }, @@ -5462,14 +5462,14 @@ }, "mgcv": { "Package": "mgcv", - "Version": "1.9-3", + "Version": "1.9-4", "Source": "Repository", "Authors@R": "person(given = \"Simon\", family = \"Wood\", role = c(\"aut\", \"cre\"), email = \"simon.wood@r-project.org\")", "Title": "Mixed GAM Computation Vehicle with Automatic Smoothness Estimation", - "Description": "Generalized additive (mixed) models, some of their extensions and other generalized ridge regression with multiple smoothing parameter estimation by (Restricted) Marginal Likelihood, Generalized Cross Validation and similar, or using iterated nested Laplace approximation for fully Bayesian inference. See Wood (2017) for an overview. Includes a gam() function, a wide variety of smoothers, 'JAGS' support and distributions beyond the exponential family.", + "Description": "Generalized additive (mixed) models, some of their extensions and other generalized ridge regression with multiple smoothing parameter estimation by (Restricted) Marginal Likelihood, Cross Validation and similar, or using iterated nested Laplace approximation for fully Bayesian inference. See Wood (2025) for an overview. Includes a gam() function, a wide variety of smoothers, 'JAGS' support and distributions beyond the exponential family.", "Priority": "recommended", "Depends": [ - "R (>= 3.6.0)", + "R (>= 4.4.0)", "nlme (>= 3.1-64)" ], "Imports": [ From 507982c51b9c78d72249c1a092f4517781daf76f Mon Sep 17 00:00:00 2001 From: Andreas Gammelgaard Damsbo Date: Thu, 12 Mar 2026 14:19:15 +0100 Subject: [PATCH 15/15] updated renv.lock --- app_docker/app.R | 2 +- app_docker/renv.lock | 15 +++++++-------- renv.lock | 15 +++++++-------- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/app_docker/app.R b/app_docker/app.R index 63a9e442..1355da88 100644 --- a/app_docker/app.R +++ b/app_docker/app.R @@ -1,7 +1,7 @@ ######## -#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//Rtmp6ipYJe/file24f61644daa6.R +#### Current file: /var/folders/9l/xbc19wxx0g79jdd2sf_0v291mhwh7f/T//RtmpZZ6Yua/file58174f49b1bf.R ######## i18n_path <- here::here("translations") diff --git a/app_docker/renv.lock b/app_docker/renv.lock index ca300008..96709a25 100644 --- a/app_docker/renv.lock +++ b/app_docker/renv.lock @@ -2819,11 +2819,11 @@ }, "emmeans": { "Package": "emmeans", - "Version": "2.0.2", + "Version": "2.0.1", "Source": "Repository", "Type": "Package", "Title": "Estimated Marginal Means, aka Least-Squares Means", - "Date": "2026-02-20", + "Date": "2025-12-10", "Authors@R": "c(person(\"Russell V.\", \"Lenth\", role = c(\"aut\", \"cph\"), email = \"russell-lenth@uiowa.edu\"), person(\"Julia\", \"Piaskowski\", role = c(\"cre\", \"aut\"), email = \"julia.piask@gmail.com\"), person(\"Balazs\", \"Banfai\", role = \"ctb\"), person(\"Ben\", \"Bolker\", role = \"ctb\"), person(\"Paul\", \"Buerkner\", role = \"ctb\"), person(\"Iago\", \"Giné-Vázquez\", role = \"ctb\"), person(\"Maxime\", \"Hervé\", role = \"ctb\"), person(\"Maarten\", \"Jung\", role = \"ctb\"), person(\"Jonathon\", \"Love\", role = \"ctb\"), person(\"Fernando\", \"Miguez\", role = \"ctb\"), person(\"Hannes\", \"Riebl\", role = \"ctb\"), person(\"Henrik\", \"Singmann\", role = \"ctb\"))", "Maintainer": "Julia Piaskowski ", "Depends": [ @@ -2886,7 +2886,7 @@ "sommer", "survival" ], - "URL": "https://rvlenth.github.io/emmeans/, https://github.com/rvlenth/emmeans/", + "URL": "https://rvlenth.github.io/emmeans/,https://rvlenth.github.io/emmeans/", "BugReports": "https://github.com/rvlenth/emmeans/issues", "LazyData": "yes", "ByteCompile": "yes", @@ -5675,10 +5675,10 @@ }, "mvtnorm": { "Package": "mvtnorm", - "Version": "1.3-5", + "Version": "1.3-2", "Source": "Repository", "Title": "Multivariate Normal and t Distributions", - "Date": "2026-03-10", + "Date": "2024-11-04", "Authors@R": "c(person(\"Alan\", \"Genz\", role = \"aut\"), person(\"Frank\", \"Bretz\", role = \"aut\"), person(\"Tetsuhisa\", \"Miwa\", role = \"aut\"), person(\"Xuefei\", \"Mi\", role = \"aut\"), person(\"Friedrich\", \"Leisch\", role = \"ctb\"), person(\"Fabian\", \"Scheipl\", role = \"ctb\"), person(\"Bjoern\", \"Bornkamp\", role = \"ctb\", comment = c(ORCID = \"0000-0002-6294-8185\")), person(\"Martin\", \"Maechler\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Torsten\", \"Hothorn\", role = c(\"aut\", \"cre\"), email = \"Torsten.Hothorn@R-project.org\", comment = c(ORCID = \"0000-0001-8301-0471\")))", "Description": "Computes multivariate normal and t probabilities, quantiles, random deviates, and densities. Log-likelihoods for multivariate Gaussian models and Gaussian copulae parameterised by Cholesky factors of covariance or precision matrices are implemented for interval-censored and exact data, or a mix thereof. Score functions for these log-likelihoods are available. A class representing multiple lower triangular matrices and corresponding methods are part of this package.", "Imports": [ @@ -5689,13 +5689,12 @@ ], "Suggests": [ "qrng", - "numDeriv", - "bibtex" + "numDeriv" ], "License": "GPL-2", "URL": "http://mvtnorm.R-forge.R-project.org", "NeedsCompilation": "yes", - "Author": "Alan Genz [aut], Frank Bretz [aut], Tetsuhisa Miwa [aut], Xuefei Mi [aut], Friedrich Leisch [ctb], Fabian Scheipl [ctb], Bjoern Bornkamp [ctb] (ORCID: ), Martin Maechler [ctb] (ORCID: ), Torsten Hothorn [aut, cre] (ORCID: )", + "Author": "Alan Genz [aut], Frank Bretz [aut], Tetsuhisa Miwa [aut], Xuefei Mi [aut], Friedrich Leisch [ctb], Fabian Scheipl [ctb], Bjoern Bornkamp [ctb] (), Martin Maechler [ctb] (), Torsten Hothorn [aut, cre] ()", "Maintainer": "Torsten Hothorn ", "Repository": "CRAN" }, diff --git a/renv.lock b/renv.lock index ca300008..96709a25 100644 --- a/renv.lock +++ b/renv.lock @@ -2819,11 +2819,11 @@ }, "emmeans": { "Package": "emmeans", - "Version": "2.0.2", + "Version": "2.0.1", "Source": "Repository", "Type": "Package", "Title": "Estimated Marginal Means, aka Least-Squares Means", - "Date": "2026-02-20", + "Date": "2025-12-10", "Authors@R": "c(person(\"Russell V.\", \"Lenth\", role = c(\"aut\", \"cph\"), email = \"russell-lenth@uiowa.edu\"), person(\"Julia\", \"Piaskowski\", role = c(\"cre\", \"aut\"), email = \"julia.piask@gmail.com\"), person(\"Balazs\", \"Banfai\", role = \"ctb\"), person(\"Ben\", \"Bolker\", role = \"ctb\"), person(\"Paul\", \"Buerkner\", role = \"ctb\"), person(\"Iago\", \"Giné-Vázquez\", role = \"ctb\"), person(\"Maxime\", \"Hervé\", role = \"ctb\"), person(\"Maarten\", \"Jung\", role = \"ctb\"), person(\"Jonathon\", \"Love\", role = \"ctb\"), person(\"Fernando\", \"Miguez\", role = \"ctb\"), person(\"Hannes\", \"Riebl\", role = \"ctb\"), person(\"Henrik\", \"Singmann\", role = \"ctb\"))", "Maintainer": "Julia Piaskowski ", "Depends": [ @@ -2886,7 +2886,7 @@ "sommer", "survival" ], - "URL": "https://rvlenth.github.io/emmeans/, https://github.com/rvlenth/emmeans/", + "URL": "https://rvlenth.github.io/emmeans/,https://rvlenth.github.io/emmeans/", "BugReports": "https://github.com/rvlenth/emmeans/issues", "LazyData": "yes", "ByteCompile": "yes", @@ -5675,10 +5675,10 @@ }, "mvtnorm": { "Package": "mvtnorm", - "Version": "1.3-5", + "Version": "1.3-2", "Source": "Repository", "Title": "Multivariate Normal and t Distributions", - "Date": "2026-03-10", + "Date": "2024-11-04", "Authors@R": "c(person(\"Alan\", \"Genz\", role = \"aut\"), person(\"Frank\", \"Bretz\", role = \"aut\"), person(\"Tetsuhisa\", \"Miwa\", role = \"aut\"), person(\"Xuefei\", \"Mi\", role = \"aut\"), person(\"Friedrich\", \"Leisch\", role = \"ctb\"), person(\"Fabian\", \"Scheipl\", role = \"ctb\"), person(\"Bjoern\", \"Bornkamp\", role = \"ctb\", comment = c(ORCID = \"0000-0002-6294-8185\")), person(\"Martin\", \"Maechler\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Torsten\", \"Hothorn\", role = c(\"aut\", \"cre\"), email = \"Torsten.Hothorn@R-project.org\", comment = c(ORCID = \"0000-0001-8301-0471\")))", "Description": "Computes multivariate normal and t probabilities, quantiles, random deviates, and densities. Log-likelihoods for multivariate Gaussian models and Gaussian copulae parameterised by Cholesky factors of covariance or precision matrices are implemented for interval-censored and exact data, or a mix thereof. Score functions for these log-likelihoods are available. A class representing multiple lower triangular matrices and corresponding methods are part of this package.", "Imports": [ @@ -5689,13 +5689,12 @@ ], "Suggests": [ "qrng", - "numDeriv", - "bibtex" + "numDeriv" ], "License": "GPL-2", "URL": "http://mvtnorm.R-forge.R-project.org", "NeedsCompilation": "yes", - "Author": "Alan Genz [aut], Frank Bretz [aut], Tetsuhisa Miwa [aut], Xuefei Mi [aut], Friedrich Leisch [ctb], Fabian Scheipl [ctb], Bjoern Bornkamp [ctb] (ORCID: ), Martin Maechler [ctb] (ORCID: ), Torsten Hothorn [aut, cre] (ORCID: )", + "Author": "Alan Genz [aut], Frank Bretz [aut], Tetsuhisa Miwa [aut], Xuefei Mi [aut], Friedrich Leisch [ctb], Fabian Scheipl [ctb], Bjoern Bornkamp [ctb] (), Martin Maechler [ctb] (), Torsten Hothorn [aut, cre] ()", "Maintainer": "Torsten Hothorn ", "Repository": "CRAN" },