From e4633421aacf487f5943080ff9577817651467a8 Mon Sep 17 00:00:00 2001 From: Andreas Gammelgaard Damsbo Date: Tue, 17 Dec 2024 11:30:17 +0100 Subject: [PATCH] new working version with major updates --- DESCRIPTION | 1 - NAMESPACE | 46 + R/cut-variable-dates.R | 54 +- inst/apps/data_analysis_modules/server.R | 46 +- inst/apps/data_analysis_modules/ui.R | 40 +- inst/apps/data_analysis_modules/www/docs.html | 69 + inst/apps/data_analysis_modules/www/docs.md | 34 + inst/apps/data_analysis_modules/www/docs.qmd | 45 + inst/apps/data_analysis_modules/www/intro.md | 22 +- man/cut-variable.Rd | 60 + man/cut.Rd | 55 + man/is_any_class.Rd | 24 + man/is_datetime.Rd | 20 + man/redcap_read_shiny_module.Rd | 6 +- renv.lock | 1208 ++++++++++++++++- webResearch.Rproj | 1 + 16 files changed, 1662 insertions(+), 69 deletions(-) create mode 100644 inst/apps/data_analysis_modules/www/docs.html create mode 100644 inst/apps/data_analysis_modules/www/docs.md create mode 100644 inst/apps/data_analysis_modules/www/docs.qmd create mode 100644 man/cut-variable.Rd create mode 100644 man/cut.Rd create mode 100644 man/is_any_class.Rd create mode 100644 man/is_datetime.Rd diff --git a/DESCRIPTION b/DESCRIPTION index d52d41a..1f96b7e 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -43,7 +43,6 @@ Imports: datamods, toastui, webshot, - matPkg, lubridate Suggests: styler, diff --git a/NAMESPACE b/NAMESPACE index 4c55412..43a9398 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,17 +1,23 @@ # Generated by roxygen2: do not edit by hand +S3method(cut,hms) S3method(regression_table,default) S3method(regression_table,list) export(argsstring2list) export(baseline_table) +export(cut_variable_server) +export(cut_variable_ui) export(default_format_arguments) export(factorize) export(format_writer) export(getfun) export(index_embed) +export(is_any_class) +export(is_datetime) export(m_datafileUI) export(m_redcap_readServer) export(m_redcap_readUI) +export(modal_cut_variable) export(modify_qmd) export(read_input) export(regression_model) @@ -20,5 +26,45 @@ export(regression_table) export(shiny_webResearch) export(specify_qmd_format) export(tbl_merge) +export(winbox_cut_variable) export(write_quarto) +importFrom(classInt,classIntervals) +importFrom(graphics,abline) +importFrom(graphics,axis) +importFrom(graphics,hist) +importFrom(graphics,par) +importFrom(graphics,plot.new) +importFrom(graphics,plot.window) +importFrom(htmltools,tagList) +importFrom(rlang,"%||%") +importFrom(rlang,call2) +importFrom(rlang,expr) +importFrom(rlang,set_names) +importFrom(rlang,syms) +importFrom(shiny,NS) +importFrom(shiny,bindEvent) +importFrom(shiny,checkboxInput) +importFrom(shiny,column) +importFrom(shiny,fluidRow) +importFrom(shiny,modalDialog) +importFrom(shiny,moduleServer) +importFrom(shiny,numericInput) +importFrom(shiny,observeEvent) +importFrom(shiny,plotOutput) +importFrom(shiny,reactive) +importFrom(shiny,renderPlot) +importFrom(shiny,req) +importFrom(shiny,showModal) +importFrom(shiny,textInput) +importFrom(shiny,uiOutput) +importFrom(shinyWidgets,WinBox) +importFrom(shinyWidgets,noUiSliderInput) +importFrom(shinyWidgets,updateVirtualSelect) +importFrom(shinyWidgets,virtualSelectInput) +importFrom(shinyWidgets,wbControls) +importFrom(shinyWidgets,wbOptions) importFrom(stats,as.formula) +importFrom(toastui,datagrid) +importFrom(toastui,datagridOutput2) +importFrom(toastui,grid_colorbar) +importFrom(toastui,renderDatagrid2) diff --git a/R/cut-variable-dates.R b/R/cut-variable-dates.R index 78b07f7..2bd877d 100644 --- a/R/cut-variable-dates.R +++ b/R/cut-variable-dates.R @@ -90,7 +90,7 @@ library(shiny) #' #' @rdname cut #' -#' @return +#' @return factor #' @export #' #' @examples @@ -114,7 +114,11 @@ cut.hms <- function(x, breaks, ...) { #' @rdname cut #' @param x an object inheriting from class "POSIXt" or "Date" -cut.POSIXt <- function(x, breaks, right = FALSE, include.lowest = TRUE, ...) { +#' +#' @examples +#' readr::parse_datetime(c("1992-02-01 01:00:20", "1992-02-06 03:00:20", "1992-05-01 01:20:20", "1992-09-01 08:20:20", "1999-02-01 21:20:20", "1992-12-01 03:02:20")) |> cut(2) +#' readr::parse_datetime(c("1992-02-01 01:00:20", "1992-02-06 03:00:20", "1992-05-01 01:20:20", "1992-09-01 08:20:20", "1999-02-01 21:20:20", "1992-12-01 03:02:20")) |> cut(breaks="weekday") +cut.POSIXt <- function(x, breaks, right = FALSE, include.lowest = TRUE, start.on.monday=TRUE, ...) { breaks_o <- breaks # browser() if (is.numeric(breaks)) { @@ -127,14 +131,22 @@ cut.POSIXt <- function(x, breaks, right = FALSE, include.lowest = TRUE, ...) { ) } + if(identical(breaks,"weekday")){ + days <- c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", + "Sunday") + if (!start.on.monday){ + days <- days[c(7,1:6)] + } + out <- factor(weekdays(x),levels=days) |> forcats::fct_drop() + } else { ## Doesn't really work very well for breaks other than the special character cases as right border is excluded out <- base::cut.POSIXt(x, breaks=breaks,right=right,...) |> forcats::fct_drop() # browser() - +} l <- levels(out) if (is.numeric(breaks_o)) { l <- breaks - } else if (is.character(breaks) && length(breaks) == 1) { + } else if (is.character(breaks) && length(breaks) == 1 && !identical(breaks,"weekday")) { if (include.lowest) { if (right) { l <- c(l, min(as.character(x))) @@ -154,12 +166,34 @@ cut.POSIXt <- function(x, breaks, right = FALSE, include.lowest = TRUE, ...) { #' @param x an object inheriting from class "POSIXct" cut.POSIXct <- cut.POSIXt +#' @rdname cut +#' @param x an object inheriting from class "POSIXct" +#' +#' @examples +#' as.Date(c("1992-02-01 01:00:20", "1992-02-06 03:00:20", "1992-05-01 01:20:20", "1992-09-01 08:20:20", "1999-02-01 21:20:20", "1992-12-01 03:02:20")) |> cut(2) +#' as.Date(c("1992-02-01 01:00:20", "1992-02-06 03:00:20", "1992-05-01 01:20:20", "1992-09-01 08:20:20", "1999-02-01 21:20:20", "1992-12-01 03:02:20")) |> cut(breaks="weekday") +cut.Date <- function(x,breaks,start.on.monday=TRUE,...){ + if(identical(breaks,"weekday")){ + days <- c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", + "Sunday") + if (!start.on.monday){ + days <- days[c(7,1:6)] + } + out <- factor(weekdays(x),levels=days) |> forcats::fct_drop() + } else { + ## Doesn't really work very well for breaks other than the special character cases as right border is excluded + out <- base::cut.Date(x, breaks=breaks,...) |> forcats::fct_drop() + # browser() + } + out +} + #' Test class #' #' @param data data #' @param class.vec vector of class names to test #' -#' @return +#' @return factor #' @export #' #' @examples @@ -174,7 +208,7 @@ is_any_class <- function(data, class.vec) { #' #' @param data data #' -#' @return +#' @return factor #' @export #' #' @examples @@ -200,7 +234,6 @@ is_datetime <- function(data) { #' #' @name cut-variable #' -#' @example examples/cut_variable.R cut_variable_ui <- function(id) { ns <- NS(id) tagList( @@ -343,7 +376,9 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) { choices <- c(choices, "hour") } else if (any(c("POSIXt","Date") %in% class(data[[variable]]))) { choices <- c( - choices, "day", + choices, + "day", + "weekday", "week", "month", "quarter", @@ -412,6 +447,7 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) { } } else if (input$method %in% c( "day", + "weekday", "week", "month", "quarter", @@ -447,7 +483,7 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) { variable <- req(input$variable) data[[paste0(variable, "_cut")]] <- cut( x = data[[variable]], - breaks = if (input$method %in% c("day", "week", "month", "quarter", "year", "hour")) input$method else breaks_r()$brks, + breaks = if (input$method %in% c("day", "weekday", "week", "month", "quarter", "year", "hour")) input$method else breaks_r()$brks, include.lowest = input$include_lowest, right = input$right ) diff --git a/inst/apps/data_analysis_modules/server.R b/inst/apps/data_analysis_modules/server.R index 07da214..75fc89d 100644 --- a/inst/apps/data_analysis_modules/server.R +++ b/inst/apps/data_analysis_modules/server.R @@ -31,15 +31,19 @@ library(IDEAFilter) # } # library(webResearch) -if (file.exists(here::here("functions.R"))) { - source(here::here("functions.R")) -} +source(here::here("functions.R")) server <- function(input, output, session) { ## Listing files in www in session start to keep when ending and removing ## everything else. files.to.keep <- list.files("www/") + output$docs_file <- renderUI({ + # shiny::includeHTML("www/docs.html") + HTML(readLines("www/docs.html")) + }) + + rv <- shiny::reactiveValues( list = NULL, ds = NULL, @@ -193,7 +197,7 @@ server <- function(input, output, session) { ) output$original_str <- renderPrint({ - str(ds()) + str(rv$data_original) }) output$modified_str <- renderPrint({ @@ -290,25 +294,25 @@ server <- function(input, output, session) { ## Have a look at column filters at some point ## There should be a way to use the filtering the filter data for further analyses ## Disabled for now, as the JS is apparently not isolated - output$data_table <- - DT::renderDT( - { - DT::datatable(ds()[base_vars()]) - }, - server = FALSE - ) - - output$data.classes <- gt::render_gt({ - shiny::req(input$file) - data.frame(matrix(sapply(ds(), \(.x){ - class(.x)[1] - }), nrow = 1)) |> - stats::setNames(names(ds())) |> - gt::gt() - }) + # output$data_table <- + # DT::renderDT( + # { + # DT::datatable(ds()[base_vars()]) + # }, + # server = FALSE + # ) + # + # output$data.classes <- gt::render_gt({ + # shiny::req(input$file) + # data.frame(matrix(sapply(ds(), \(.x){ + # class(.x)[1] + # }), nrow = 1)) |> + # stats::setNames(names(ds())) |> + # gt::gt() + # }) shiny::observeEvent(input$act_start, { - bslib::nav_select(id = "main_panel", selected = "Overview and modifications") + bslib::nav_select(id = "main_panel", selected = "Modifications") }) shiny::observeEvent( diff --git a/inst/apps/data_analysis_modules/ui.R b/inst/apps/data_analysis_modules/ui.R index b756cff..1b6a5f0 100644 --- a/inst/apps/data_analysis_modules/ui.R +++ b/inst/apps/data_analysis_modules/ui.R @@ -30,17 +30,22 @@ ui_elements <- list( shinyWidgets::radioGroupButtons( inputId = "source", # label = "Choice: ", - choices = c("File upload" = "file", "REDCap server" = "redcap","Sample data"="env"), - checkIcon = list( - yes = icon("square-check"), - no = icon("square") - ) + choices = c( + "File upload" = "file", + "REDCap server" = "redcap", + "Sample data" = "env" + ), + # checkIcon = list( + # yes = icon("square-check"), + # no = icon("square") + # ), + width = "100%" ), shiny::conditionalPanel( condition = "input.source=='file'", datamods::import_file_ui("file_import", - title = "Choose a datafile to upload", - file_extensions = c(".csv", ".txt", ".xls", ".xlsx", ".rds", ".fst", ".sas7bdat", ".sav", ".ods", ".dta") + title = "Choose a datafile to upload", + file_extensions = c(".csv", ".txt", ".xls", ".xlsx", ".rds", ".fst", ".sas7bdat", ".sav", ".ods", ".dta") ) ), shiny::conditionalPanel( @@ -57,13 +62,7 @@ ui_elements <- list( ), column( width = 6, - shiny::markdown(" - # Welcome - - This is the ***freesearchR*** web data analysis tool. An opiniotaed tool for easy data analysis at the hands of the clinician. - - By intention, this is a focused app, with only few data modification tools included to keep the workflow streamlined. - ") + shiny::markdown(readLines("www/intro.md")) ) ), shiny::conditionalPanel( @@ -79,10 +78,10 @@ ui_elements <- list( ######### ############################################################################## "overview" = - # bslib::nav_panel_hidden( + # bslib::nav_panel_hidden( bslib::nav_panel( # value = "overview", - title = "Overview and modifications", + title = "Modifications", bslib::navset_bar( fillable = TRUE, # bslib::nav_panel( @@ -170,7 +169,7 @@ ui_elements <- list( ######### ############################################################################## "analyze" = - # bslib::nav_panel_hidden( + # bslib::nav_panel_hidden( bslib::nav_panel( # value = "analyze", title = "Analyses", @@ -230,8 +229,8 @@ ui_elements <- list( icon = shiny::icon("pencil", lib = "glyphicon"), label_busy = "Working...", icon_busy = fontawesome::fa_i("arrows-rotate", - class = "fa-spin", - "aria-hidden" = "true" + class = "fa-spin", + "aria-hidden" = "true" ), type = "primary", auto_reset = TRUE @@ -260,7 +259,8 @@ ui_elements <- list( ############################################################################## "docs" = bslib::nav_panel( title = "Documentation", - shiny::markdown(readLines(here::here("inst/apps/data_analysis_modules/www/intro.md"))), + # shiny::tags$iframe("www/docs.html", height=600, width=535), + shiny::htmlOutput("docs_file"), shiny::br() ) ) diff --git a/inst/apps/data_analysis_modules/www/docs.html b/inst/apps/data_analysis_modules/www/docs.html new file mode 100644 index 0000000..8e610fb --- /dev/null +++ b/inst/apps/data_analysis_modules/www/docs.html @@ -0,0 +1,69 @@ + + + + + + + + + +freesearcheR platform documentation + + + + + + + + + + +
+

freesearcheR platform documentation

+ +
+ + +

Welcome!

+

So glad to see you here! Welcome to test this early concept of a platform to easily explore, manipulate and analyse clinical data.

+

Below will be a more detailed description of the included features and possibilities, as well as the planned and possible feature additions.

+

Contribute

+

Contributions are very welcome. If you find anything odd, or you think of features to add or remove, please share and report on the project page on GitHub.

+

Roadmap

+ + + + + + + \ No newline at end of file diff --git a/inst/apps/data_analysis_modules/www/docs.md b/inst/apps/data_analysis_modules/www/docs.md new file mode 100644 index 0000000..652850a --- /dev/null +++ b/inst/apps/data_analysis_modules/www/docs.md @@ -0,0 +1,34 @@ +# Documentation on the freesearcheR platform + +Welcome! So glad to see you here! Welcome to test this early concept of a platform to easily explore, manipulate and analyse clinical data. + +Below will be a more detailed description of the included features and possibilities, as well as the planned and possible feature additions. + + +## Roadmap + +- [ ] Stratified analyses + +- Additional study designs: + + - [x] Cross-sectional data analyses + + - [ ] Longitudinal data analyses + + - [ ] Survival analysis + +- More detailed variable browser + + - [ ] Add histograms for datadistribution + + - [ ] Option to edit labels + +- [ ] Plot regression analyses results + +- [ ] Export modified data + +- [ ] Include reproducible code for all steps + +- [ ] Modify factor levels + +- [ ] More options for date/datetime/time grouping/factoring diff --git a/inst/apps/data_analysis_modules/www/docs.qmd b/inst/apps/data_analysis_modules/www/docs.qmd new file mode 100644 index 0000000..be633f4 --- /dev/null +++ b/inst/apps/data_analysis_modules/www/docs.qmd @@ -0,0 +1,45 @@ +--- +title: "***freesearcheR*** platform documentation" +format: + html: + self-contained: true + minimal: true +--- + +# Welcome! + +So glad to see you here! Welcome to test this early concept of a platform to easily explore, manipulate and analyse clinical data. + +Below will be a more detailed description of the included features and possibilities, as well as the planned and possible feature additions. + +## Contribute + +Contributions are very welcome. If you find anything odd, or you think of features to add or remove, please [share and report on the project page on GitHub](https://github.com/agdamsbo/webResearch/issues). + +## Roadmap + +- [ ] Stratified analyses + +- Additional study designs: + + - [x] Cross-sectional data analyses + + - [ ] Longitudinal data analyses + + - [ ] Survival analysis + +- More detailed variable browser + + - [ ] Add histograms for data distribution + + - [ ] Option to edit variable labels for nicer tables + +- [ ] Plot regression analyses results + +- [ ] Export modified data + +- [ ] Include reproducible code for all steps + +- [ ] Modify factor levels (including naming, order, collapsing, removing) + +- [ ] More options for date/datetime/time grouping/factoring diff --git a/inst/apps/data_analysis_modules/www/intro.md b/inst/apps/data_analysis_modules/www/intro.md index 329b5e5..fbb31ce 100644 --- a/inst/apps/data_analysis_modules/www/intro.md +++ b/inst/apps/data_analysis_modules/www/intro.md @@ -1,3 +1,21 @@ -# Intro to webResearch/freesearcheR/VOICE +# Welcome -This is just placeholder text. +This is the ***freesearchR*** web data analysis tool. The ***freesearchR*** is an opinioated tool for easy data evaluation and analysis at the hands of the clinician. We intend it to be a powerful to, that is easy and secure to use. + +By intention, this tool has been designed to be simple to use with a minimum of mandatory options to keep the workflow streamlined, while also including a few options to go even further. + +There are four simple steps to go through: + +1. Import data (this can be a spreadsheet on your machine or direct export from a REDCap server) + +2. A *optional* step of data modification (change variable classes and creating categorical variables (factors) from numeric or time data) + +3. Data analysis of cross-sectionally designed studies + + - Classic baseline charactieristics (options to stratify and compare variables) + + - Linear, dichotomous or ordinal logistic regression will be used depending on specified outcome variable + + - Evaluation of model assumptions + +4. Export the the analyses results as .docx or .odt. diff --git a/man/cut-variable.Rd b/man/cut-variable.Rd new file mode 100644 index 0000000..1c034b1 --- /dev/null +++ b/man/cut-variable.Rd @@ -0,0 +1,60 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/cut-variable-dates.R +\name{cut-variable} +\alias{cut-variable} +\alias{cut_variable_ui} +\alias{cut_variable_server} +\alias{modal_cut_variable} +\alias{winbox_cut_variable} +\title{Module to Convert Numeric to Factor} +\usage{ +cut_variable_ui(id) + +cut_variable_server(id, data_r = reactive(NULL)) + +modal_cut_variable( + id, + title = i18n("Convert Numeric to Factor"), + easyClose = TRUE, + size = "l", + footer = NULL +) + +winbox_cut_variable( + id, + title = i18n("Convert Numeric to Factor"), + options = shinyWidgets::wbOptions(), + controls = shinyWidgets::wbControls() +) +} +\arguments{ +\item{id}{Module ID.} + +\item{data_r}{A \code{\link[shiny:reactive]{shiny::reactive()}} function returning a \code{data.frame}.} + +\item{title}{An optional title for the dialog.} + +\item{easyClose}{If \code{TRUE}, the modal dialog can be dismissed by +clicking outside the dialog box, or be pressing the Escape key. If +\code{FALSE} (the default), the modal dialog can't be dismissed in those +ways; instead it must be dismissed by clicking on a \code{modalButton()}, or +from a call to \code{\link[shiny:removeModal]{removeModal()}} on the server.} + +\item{size}{One of \code{"s"} for small, \code{"m"} (the default) for medium, +\code{"l"} for large, or \code{"xl"} for extra large. Note that \code{"xl"} only +works with Bootstrap 4 and above (to opt-in to Bootstrap 4+, +pass \code{\link[bslib:bs_theme]{bslib::bs_theme()}} to the \code{theme} argument of a page container +like \code{\link[shiny:fluidPage]{fluidPage()}}).} + +\item{footer}{UI for footer. Use \code{NULL} for no footer.} + +\item{options}{List of options, see \code{\link[shinyWidgets:wbOptions]{wbOptions()}}.} + +\item{controls}{List of controls, see \code{\link[shinyWidgets:wbControls]{wbControls()}}.} +} +\value{ +A \code{\link[shiny:reactive]{shiny::reactive()}} function returning the data. +} +\description{ +This module contain an interface to cut a numeric into several intervals. +} diff --git a/man/cut.Rd b/man/cut.Rd new file mode 100644 index 0000000..4a5b566 --- /dev/null +++ b/man/cut.Rd @@ -0,0 +1,55 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/cut-variable-dates.R +\name{cut.hms} +\alias{cut.hms} +\alias{cut.POSIXt} +\alias{cut.POSIXct} +\alias{cut.Date} +\title{Title} +\usage{ +\method{cut}{hms}(x, breaks, ...) + +\method{cut}{POSIXt}( + x, + breaks, + right = FALSE, + include.lowest = TRUE, + start.on.monday = TRUE, + ... +) + +\method{cut}{POSIXct}( + x, + breaks, + right = FALSE, + include.lowest = TRUE, + start.on.monday = TRUE, + ... +) + +\method{cut}{Date}(x, breaks, start.on.monday = TRUE, ...) +} +\arguments{ +\item{x}{an object inheriting from class "POSIXct"} + +\item{...}{passed on} +} +\value{ +factor +} +\description{ +Title +} +\examples{ +readr::parse_time(c("01:00:20", "03:00:20", "01:20:20", "08:20:20", "21:20:20", "03:02:20")) |> cut(2) +readr::parse_time(c("01:00:20", "03:00:20", "01:20:20", "08:20:20", "21:20:20", "03:02:20")) |> cut("min") +readr::parse_time(c("01:00:20", "03:00:20", "01:20:20", "08:20:20", "21:20:20", "03:02:20")) |> cut(breaks = "hour") +readr::parse_time(c("01:00:20", "03:00:20", "01:20:20", "08:20:20", "21:20:20", "03:02:20")) |> cut(breaks = hms::as_hms(c("01:00:00", "03:01:20", "9:20:20"))) +d_t <- readr::parse_time(c("01:00:20", "03:00:20", "01:20:20", "03:02:20", NA)) +f <- d_t |> cut(2) +readr::parse_time(c("01:00:20", "03:00:20", "01:20:20", "03:02:20", NA)) |> cut(breaks = lubridate::as_datetime(c(hms::as_hms(levels(f)), hms::as_hms(max(d_t, na.rm = TRUE) + 1))), right = FALSE) +readr::parse_datetime(c("1992-02-01 01:00:20", "1992-02-06 03:00:20", "1992-05-01 01:20:20", "1992-09-01 08:20:20", "1999-02-01 21:20:20", "1992-12-01 03:02:20")) |> cut(2) +readr::parse_datetime(c("1992-02-01 01:00:20", "1992-02-06 03:00:20", "1992-05-01 01:20:20", "1992-09-01 08:20:20", "1999-02-01 21:20:20", "1992-12-01 03:02:20")) |> cut(breaks="weekday") +as.Date(c("1992-02-01 01:00:20", "1992-02-06 03:00:20", "1992-05-01 01:20:20", "1992-09-01 08:20:20", "1999-02-01 21:20:20", "1992-12-01 03:02:20")) |> cut(2) +as.Date(c("1992-02-01 01:00:20", "1992-02-06 03:00:20", "1992-05-01 01:20:20", "1992-09-01 08:20:20", "1999-02-01 21:20:20", "1992-12-01 03:02:20")) |> cut(breaks="weekday") +} diff --git a/man/is_any_class.Rd b/man/is_any_class.Rd new file mode 100644 index 0000000..6aa32b3 --- /dev/null +++ b/man/is_any_class.Rd @@ -0,0 +1,24 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/cut-variable-dates.R +\name{is_any_class} +\alias{is_any_class} +\title{Test class} +\usage{ +is_any_class(data, class.vec) +} +\arguments{ +\item{data}{data} + +\item{class.vec}{vector of class names to test} +} +\value{ +factor +} +\description{ +Test class +} +\examples{ +vapply(REDCapCAST::redcapcast_data, \(.x){ + is_any_class(.x, c("hms", "Date", "POSIXct", "POSIXt")) +}, logical(1)) +} diff --git a/man/is_datetime.Rd b/man/is_datetime.Rd new file mode 100644 index 0000000..02fb994 --- /dev/null +++ b/man/is_datetime.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/cut-variable-dates.R +\name{is_datetime} +\alias{is_datetime} +\title{Test is date/datetime/time} +\usage{ +is_datetime(data) +} +\arguments{ +\item{data}{data} +} +\value{ +factor +} +\description{ +Test is date/datetime/time +} +\examples{ +vapply(REDCapCAST::redcapcast_data, is_datetime, logical(1)) +} diff --git a/man/redcap_read_shiny_module.Rd b/man/redcap_read_shiny_module.Rd index 3456743..226abfb 100644 --- a/man/redcap_read_shiny_module.Rd +++ b/man/redcap_read_shiny_module.Rd @@ -5,13 +5,15 @@ \alias{m_redcap_readServer} \title{Shiny module to browser and export REDCap data} \usage{ -m_redcap_readUI(id) +m_redcap_readUI(id, include_title = TRUE) -m_redcap_readServer(id, output.format = "df") +m_redcap_readServer(id, output.format = c("df", "teal", "list")) } \arguments{ \item{id}{Namespace id} +\item{include_title}{logical to include title} + \item{output.format}{data.frame ("df") or teal data object ("teal")} } \value{ diff --git a/renv.lock b/renv.lock index 004d128..bf6c7be 100644 --- a/renv.lock +++ b/renv.lock @@ -57,6 +57,55 @@ ], "Hash": "64ff3427f559ce3f2597a4fe13255cb6" }, + "Deriv": { + "Package": "Deriv", + "Version": "4.1.6", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "methods" + ], + "Hash": "cd52c065c9e687c60c56b51f10f7bcd3" + }, + "Formula": { + "Package": "Formula", + "Version": "1.2-5", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "stats" + ], + "Hash": "7a29697b75e027767a53fde6c903eca7" + }, + "IDEAFilter": { + "Package": "IDEAFilter", + "Version": "0.2.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "RColorBrewer", + "crayon", + "ggplot2", + "pillar", + "purrr", + "shiny", + "shinyTime" + ], + "Hash": "515977d035ab72c1e6334a732fc58923" + }, + "KernSmooth": { + "Package": "KernSmooth", + "Version": "2.23-24", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "stats" + ], + "Hash": "9f33a1ee37bbe8919eb2ec4b9f2473a5" + }, "MASS": { "Package": "MASS", "Version": "7.3-61", @@ -89,6 +138,19 @@ ], "Hash": "5122bb14d8736372411f955e1b16bc8a" }, + "MatrixModels": { + "Package": "MatrixModels", + "Version": "0.5-3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "Matrix", + "R", + "methods", + "stats" + ], + "Hash": "0776bf7526869e0286b0463cb72fb211" + }, "PKI": { "Package": "PKI", "Version": "0.1-14", @@ -100,6 +162,60 @@ ], "Hash": "f5b9c6b2f62f1fa3dd53fd1ddccbb241" }, + "R.cache": { + "Package": "R.cache", + "Version": "0.16.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R.methodsS3", + "R.oo", + "R.utils", + "digest", + "utils" + ], + "Hash": "fe539ca3f8efb7410c3ae2cf5fe6c0f8" + }, + "R.methodsS3": { + "Package": "R.methodsS3", + "Version": "1.8.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "utils" + ], + "Hash": "278c286fd6e9e75d0c2e8f731ea445c8" + }, + "R.oo": { + "Package": "R.oo", + "Version": "1.27.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R.methodsS3", + "methods", + "utils" + ], + "Hash": "6ac79ff194202248cf946fe3a5d6d498" + }, + "R.utils": { + "Package": "R.utils", + "Version": "2.12.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R.methodsS3", + "R.oo", + "methods", + "tools", + "utils" + ], + "Hash": "3dc2829b790254bfba21e60965787651" + }, "R6": { "Package": "R6", "Version": "2.5.1", @@ -122,7 +238,7 @@ }, "REDCapCAST": { "Package": "REDCapCAST", - "Version": "24.11.2", + "Version": "24.12.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -134,6 +250,7 @@ "forcats", "glue", "gt", + "gtsummary", "haven", "here", "keyring", @@ -148,7 +265,7 @@ "vctrs", "zip" ], - "Hash": "86814281365527b3983f58228d190ef4" + "Hash": "d0925e579ddfbedeb536c5cbf65fc42f" }, "REDCapR": { "Package": "REDCapR", @@ -208,6 +325,20 @@ ], "Hash": "a9e2118c664c2cd694f03de074e8d4b3" }, + "SparseM": { + "Package": "SparseM", + "Version": "1.84-2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "graphics", + "methods", + "stats", + "utils" + ], + "Hash": "e78499cbcbbca98200254bd171379165" + }, "V8": { "Package": "V8", "Version": "6.0.0", @@ -221,6 +352,18 @@ ], "Hash": "6603bfcbc7883a5fed41fb13042a3899" }, + "abind": { + "Package": "abind", + "Version": "1.4-8", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "methods", + "utils" + ], + "Hash": "2288423bb0f20a457800d7fc47f6aa54" + }, "ape": { "Package": "ape", "Version": "5.8", @@ -308,13 +451,13 @@ }, "bit": { "Package": "bit", - "Version": "4.5.0", + "Version": "4.5.0.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R" ], - "Hash": "5dc7b2677d65d0e874fc4aaf0e879987" + "Hash": "f89f074e0e49bf1dbe3eba0a15a91476" }, "bit64": { "Package": "bit64", @@ -339,7 +482,7 @@ }, "boot": { "Package": "boot", - "Version": "1.3-30", + "Version": "1.3-31", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -347,7 +490,7 @@ "graphics", "stats" ], - "Hash": "96abeed416a286d4a0f52e550b612343" + "Hash": "de2a4646c18661d6a0a08ec67f40b7ed" }, "broom": { "Package": "broom", @@ -435,6 +578,54 @@ ], "Hash": "cd9a672193789068eb5a2aad65a0dedf" }, + "callr": { + "Package": "callr", + "Version": "3.7.6", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "processx", + "utils" + ], + "Hash": "d7e13f49c19103ece9e58ad2d83a7354" + }, + "car": { + "Package": "car", + "Version": "3.1-3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "Formula", + "MASS", + "R", + "abind", + "carData", + "grDevices", + "graphics", + "lme4", + "mgcv", + "nlme", + "nnet", + "pbkrtest", + "quantreg", + "scales", + "stats", + "utils" + ], + "Hash": "82067bf302d1440b730437693a86406a" + }, + "carData": { + "Package": "carData", + "Version": "3.0-5", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "ac6cdb8552c61bd36b0e54d07cf2aab7" + }, "cards": { "Package": "cards", "Version": "0.4.0", @@ -492,6 +683,35 @@ ], "Hash": "0e14e01ce07e7c88fd25de6d4260d26b" }, + "class": { + "Package": "class", + "Version": "7.3-22", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "MASS", + "R", + "stats", + "utils" + ], + "Hash": "f91f6b29f38b8c280f2b9477787d4bb2" + }, + "classInt": { + "Package": "classInt", + "Version": "0.4-10", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "KernSmooth", + "R", + "class", + "e1071", + "grDevices", + "graphics", + "stats" + ], + "Hash": "f5a40793b1ae463a7ffb3902a95bf864" + }, "cli": { "Package": "cli", "Version": "3.6.3", @@ -560,15 +780,32 @@ ], "Hash": "8b6512d8f60685736ee3bafdc292190d" }, + "cowplot": { + "Package": "cowplot", + "Version": "1.1.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "ggplot2", + "grDevices", + "grid", + "gtable", + "methods", + "rlang", + "scales" + ], + "Hash": "8ef2084dd7d28847b374e55440e4f8cb" + }, "cpp11": { "Package": "cpp11", - "Version": "0.5.0", + "Version": "0.5.1", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R" ], - "Hash": "91570bba75d0c9d3f1040c835cee8fba" + "Hash": "9df43854f1c84685d095ed6270b52387" }, "crayon": { "Package": "crayon", @@ -607,14 +844,40 @@ }, "data.table": { "Package": "data.table", - "Version": "1.16.2", + "Version": "1.16.4", "Source": "Repository", "Repository": "CRAN", "Requirements": [ "R", "methods" ], - "Hash": "2e00b378fc3be69c865120d9f313039a" + "Hash": "38bbf05fc2503143db4c734a7e5cab66" + }, + "datamods": { + "Package": "datamods", + "Version": "1.5.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "bslib", + "classInt", + "data.table", + "htmltools", + "phosphoricons", + "reactable", + "readxl", + "rio", + "rlang", + "shiny", + "shinyWidgets", + "shinybusy", + "tibble", + "toastui", + "tools", + "writexl" + ], + "Hash": "d60f340d79847514abe3e79ac919b74b" }, "datawizard": { "Package": "datawizard", @@ -640,6 +903,30 @@ ], "Hash": "33698c4b3127fc9f506654607fb73676" }, + "doBy": { + "Package": "doBy", + "Version": "4.6.24", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "Deriv", + "MASS", + "Matrix", + "R", + "boot", + "broom", + "cowplot", + "dplyr", + "ggplot2", + "methods", + "microbenchmark", + "modelr", + "rlang", + "tibble", + "tidyr" + ], + "Hash": "8ddf795104defe53c5392a588888ec68" + }, "doParallel": { "Package": "doParallel", "Version": "1.0.17", @@ -677,6 +964,22 @@ ], "Hash": "fedd9d00c2944ff00a0e2696ccf048ec" }, + "e1071": { + "Package": "e1071", + "Version": "1.7-16", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "class", + "grDevices", + "graphics", + "methods", + "proxy", + "stats", + "utils" + ], + "Hash": "27a09ca40266a1066d62ef5402dd51d6" + }, "easystats": { "Package": "easystats", "Version": "0.7.3", @@ -701,7 +1004,7 @@ }, "effectsize": { "Package": "effectsize", - "Version": "0.8.9", + "Version": "1.0.0", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -714,7 +1017,35 @@ "stats", "utils" ], - "Hash": "7aceb5e07b6d48171c6b56714cc305ea" + "Hash": "b289af101f62cb7b46c53d1a45ed5198" + }, + "emmeans": { + "Package": "emmeans", + "Version": "1.10.5", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "estimability", + "graphics", + "methods", + "mvtnorm", + "numDeriv", + "stats", + "utils" + ], + "Hash": "5c42da2936ccaa3802b4893a65553dc4" + }, + "estimability": { + "Package": "estimability", + "Version": "1.5.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "stats" + ], + "Hash": "21ec52af13afbcab1cb317567b639b0a" }, "evaluate": { "Package": "evaluate", @@ -762,6 +1093,50 @@ ], "Hash": "192053c276525c8495ccfd523aa8f2d1" }, + "flextable": { + "Package": "flextable", + "Version": "0.9.7", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "data.table", + "gdtools", + "grDevices", + "graphics", + "grid", + "htmltools", + "knitr", + "officer", + "ragg", + "rlang", + "rmarkdown", + "stats", + "utils", + "uuid", + "xml2" + ], + "Hash": "e3201bd3a94311654ff35cf2ddc3343e" + }, + "fontBitstreamVera": { + "Package": "fontBitstreamVera", + "Version": "0.1.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "f6068021eff4aba735a9b2353516636c" + }, + "fontLiberation": { + "Package": "fontLiberation", + "Version": "0.1.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "f918c5e723f86f409912104d5b7a71d6" + }, "fontawesome": { "Package": "fontawesome", "Version": "0.5.3", @@ -774,6 +1149,18 @@ ], "Hash": "bd1297f9b5b1fc1372d19e2c4cd82215" }, + "fontquiver": { + "Package": "fontquiver", + "Version": "0.2.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "fontBitstreamVera", + "fontLiberation" + ], + "Hash": "fc0f4226379e451057d55419fd31761e" + }, "forcats": { "Package": "forcats", "Version": "1.0.0", @@ -803,6 +1190,35 @@ ], "Hash": "618609b42c9406731ead03adf5379850" }, + "foreign": { + "Package": "foreign", + "Version": "0.8-87", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "methods", + "stats", + "utils" + ], + "Hash": "81fc09bdeab0077a73927ed1243404b6" + }, + "formatters": { + "Package": "formatters", + "Version": "0.5.9", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "checkmate", + "grid", + "htmltools", + "lifecycle", + "methods", + "stringi" + ], + "Hash": "8be2fff2bd140e59cc3bc32fa761de26" + }, "fs": { "Package": "fs", "Version": "1.6.5", @@ -839,6 +1255,21 @@ ], "Hash": "779651ac2943370c5453c2d907429fc9" }, + "gdtools": { + "Package": "gdtools", + "Version": "0.4.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "Rcpp", + "fontquiver", + "htmltools", + "systemfonts", + "tools" + ], + "Hash": "169e77416ce3f7ac73fc975909dd5455" + }, "generics": { "Package": "generics", "Version": "0.1.3", @@ -871,6 +1302,25 @@ ], "Hash": "14b3b3b923944afb9542dbef4c68bf4b" }, + "ggmosaic": { + "Package": "ggmosaic", + "Version": "0.3.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "dplyr", + "ggplot2", + "ggrepel", + "plotly", + "productplots", + "purrr", + "rlang", + "scales", + "tidyr" + ], + "Hash": "9c716443a2b821aa997c5675386bd34b" + }, "ggplot2": { "Package": "ggplot2", "Version": "3.5.1", @@ -896,6 +1346,22 @@ ], "Hash": "44c6a2f8202d5b7e878ea274b1092426" }, + "ggrepel": { + "Package": "ggrepel", + "Version": "0.9.6", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "Rcpp", + "ggplot2", + "grid", + "rlang", + "scales", + "withr" + ], + "Hash": "3d4156850acc1161f2f24bc61c9217c1" + }, "glue": { "Package": "glue", "Version": "1.8.0", @@ -907,6 +1373,20 @@ ], "Hash": "5899f1eaa825580172bb56c08266f37c" }, + "gridExtra": { + "Package": "gridExtra", + "Version": "2.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "grDevices", + "graphics", + "grid", + "gtable", + "utils" + ], + "Hash": "7d7f283939f563670a697165b2cf5560" + }, "gt": { "Package": "gt", "Version": "0.11.1", @@ -955,7 +1435,7 @@ }, "gtsummary": { "Package": "gtsummary", - "Version": "2.0.3", + "Version": "2.0.4", "Source": "Repository", "Repository": "CRAN", "Requirements": [ @@ -970,7 +1450,7 @@ "tidyr", "vctrs" ], - "Hash": "cd4d593e8ce0ad4e5c2c0acc50ce7330" + "Hash": "a6cb3a1251d2a86c14ccc3e9977437dc" }, "haven": { "Package": "haven", @@ -1307,6 +1787,30 @@ ], "Hash": "c6fafa6cccb1e1dfe7f7d122efd6e6a7" }, + "logger": { + "Package": "logger", + "Version": "0.4.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "utils" + ], + "Hash": "f25d781d5bc7757e08cf38c741a5ad1c" + }, + "lubridate": { + "Package": "lubridate", + "Version": "1.9.4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "generics", + "methods", + "timechange" + ], + "Hash": "be38bc740fc51783a78edb5a157e4104" + }, "magrittr": { "Package": "magrittr", "Version": "2.0.3", @@ -1358,6 +1862,18 @@ ], "Hash": "110ee9d83b496279960e162ac97764ce" }, + "microbenchmark": { + "Package": "microbenchmark", + "Version": "1.5.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "graphics", + "stats" + ], + "Hash": "f9d226d88d4087d817d4e616626ce8e5" + }, "mime": { "Package": "mime", "Version": "0.12", @@ -1409,6 +1925,24 @@ ], "Hash": "f519814037d08eee1343c2e7b5992cc4" }, + "modelr": { + "Package": "modelr", + "Version": "0.1.11", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "broom", + "magrittr", + "purrr", + "rlang", + "tibble", + "tidyr", + "tidyselect", + "vctrs" + ], + "Hash": "4f50122dc256b1b6996a4703fecea821" + }, "munsell": { "Package": "munsell", "Version": "0.5.1", @@ -1420,6 +1954,17 @@ ], "Hash": "4fd8900853b746af55b81fda99da7695" }, + "mvtnorm": { + "Package": "mvtnorm", + "Version": "1.3-2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "stats" + ], + "Hash": "9e8405eacb262c0a939e121650247f4b" + }, "nlme": { "Package": "nlme", "Version": "3.1-166", @@ -1441,6 +1986,48 @@ "Repository": "CRAN", "Hash": "27550641889a3abf3aec4d91186311ec" }, + "nnet": { + "Package": "nnet", + "Version": "7.3-19", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "stats", + "utils" + ], + "Hash": "2c797b46eea7fb58ede195bc0b1f1138" + }, + "numDeriv": { + "Package": "numDeriv", + "Version": "2016.8-1.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "df58958f293b166e4ab885ebcad90e02" + }, + "officer": { + "Package": "officer", + "Version": "0.6.7", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R6", + "cli", + "grDevices", + "graphics", + "openssl", + "ragg", + "stats", + "utils", + "uuid", + "xml2", + "zip" + ], + "Hash": "d6c0a4e796301a5d252de42c92a9a8b9" + }, "opdisDownsampling": { "Package": "opdisDownsampling", "Version": "1.0.1", @@ -1536,6 +2123,24 @@ ], "Hash": "e23fb9ecb1258207bcb763d78d513439" }, + "pbkrtest": { + "Package": "pbkrtest", + "Version": "0.5.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "MASS", + "Matrix", + "R", + "broom", + "doBy", + "dplyr", + "lme4", + "methods", + "numDeriv" + ], + "Hash": "938e6bbc4ac57534f8b43224506a8966" + }, "pbmcapply": { "Package": "pbmcapply", "Version": "1.5.1", @@ -1562,6 +2167,17 @@ ], "Hash": "64e61921ea6b2a4d76c81290d5ecce25" }, + "phosphoricons": { + "Package": "phosphoricons", + "Version": "0.2.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "htmltools" + ], + "Hash": "707ea26830bf7a2630955559dada2f72" + }, "pillar": { "Package": "pillar", "Version": "1.9.0", @@ -1669,6 +2285,17 @@ ], "Hash": "0c90a7d71988856bad2a2a45dd871bb9" }, + "productplots": { + "Package": "productplots", + "Version": "0.1.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "ggplot2", + "plyr" + ], + "Hash": "75630cc31052ba299a52bb1adbf59fae" + }, "progress": { "Package": "progress", "Version": "1.2.3", @@ -1699,6 +2326,18 @@ ], "Hash": "c84fd4f75ea1f5434735e08b7f50fbca" }, + "proxy": { + "Package": "proxy", + "Version": "0.4-27", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "stats", + "utils" + ], + "Hash": "e0ef355c12942cf7a6b91a6cfaea8b3e" + }, "ps": { "Package": "ps", "Version": "1.8.1", @@ -1770,6 +2409,24 @@ ], "Hash": "a22b3777f51fd005a7cd4c2bccc385ae" }, + "quantreg": { + "Package": "quantreg", + "Version": "5.99.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "MASS", + "Matrix", + "MatrixModels", + "R", + "SparseM", + "graphics", + "methods", + "stats", + "survival" + ], + "Hash": "c48844cd7961de506a1b4d22b2e082c7" + }, "quarto": { "Package": "quarto", "Version": "1.4.4", @@ -1790,6 +2447,17 @@ ], "Hash": "af456d7a181750812bd8b2bfedb3ea4e" }, + "ragg": { + "Package": "ragg", + "Version": "1.3.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "systemfonts", + "textshaping" + ], + "Hash": "0595fe5e47357111f29ad19101c7d271" + }, "rappdirs": { "Package": "rappdirs", "Version": "0.3.3", @@ -1878,6 +2546,21 @@ ], "Hash": "9de96463d2117f6ac49980577939dfb3" }, + "readxl": { + "Package": "readxl", + "Version": "1.4.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cellranger", + "cpp11", + "progress", + "tibble", + "utils" + ], + "Hash": "8cf9c239b96df1bbb133b74aef77ad0a" + }, "rematch": { "Package": "rematch", "Version": "2.0.0", @@ -1914,6 +2597,29 @@ ], "Hash": "244b87e40159d58b8c84cb019e5bd16c" }, + "rio": { + "Package": "rio", + "Version": "1.2.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R.utils", + "curl", + "data.table", + "foreign", + "haven", + "lifecycle", + "readr", + "readxl", + "stats", + "tibble", + "tools", + "utils", + "writexl" + ], + "Hash": "baaf90aab11c061de79399519f537442" + }, "rlang": { "Package": "rlang", "Version": "1.1.4", @@ -2003,6 +2709,24 @@ "Repository": "CRAN", "Hash": "5f90cd73946d706cfe26024294236113" }, + "rtables": { + "Package": "rtables", + "Version": "0.6.10", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "checkmate", + "formatters", + "htmltools", + "lifecycle", + "magrittr", + "methods", + "stats", + "stringi" + ], + "Hash": "1907d8ff958d4e8d62549fcc0a0c7985" + }, "sass": { "Package": "sass", "Version": "0.4.9", @@ -2092,6 +2816,104 @@ ], "Hash": "6a293995a66e12c48d13aa1f957d09c7" }, + "shinyTime": { + "Package": "shinyTime", + "Version": "1.0.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "htmltools", + "shiny" + ], + "Hash": "836c3464fb0f2ea865ed4c35dcdc1eda" + }, + "shinyTree": { + "Package": "shinyTree", + "Version": "0.3.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "htmlwidgets", + "jsonlite", + "methods", + "promises", + "shiny", + "stringr" + ], + "Hash": "0493a0d70f834cb251fe4523eb17b82c" + }, + "shinyWidgets": { + "Package": "shinyWidgets", + "Version": "0.8.7", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "bslib", + "grDevices", + "htmltools", + "jsonlite", + "rlang", + "sass", + "shiny" + ], + "Hash": "fd8239886f70daa85c36596214958451" + }, + "shinybusy": { + "Package": "shinybusy", + "Version": "0.3.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "htmltools", + "htmlwidgets", + "jsonlite", + "shiny" + ], + "Hash": "7dc8feb4207741ff581422a04fc8f3ea" + }, + "shinycssloaders": { + "Package": "shinycssloaders", + "Version": "1.1.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "digest", + "glue", + "grDevices", + "htmltools", + "shiny" + ], + "Hash": "2b45a467a30d6a88a1892a738c0900cf" + }, + "shinyjs": { + "Package": "shinyjs", + "Version": "2.1.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "digest", + "jsonlite", + "shiny" + ], + "Hash": "802e4786b353a4bb27116957558548d5" + }, + "shinyvalidate": { + "Package": "shinyvalidate", + "Version": "0.1.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "glue", + "htmltools", + "rlang", + "shiny" + ], + "Hash": "fe6e75a1c1722b2d23cb4d4dbe1006df" + }, "sodium": { "Package": "sodium", "Version": "1.3.2", @@ -2109,6 +2931,17 @@ ], "Hash": "5f5a7629f956619d519205ec475fe647" }, + "sparkline": { + "Package": "sparkline", + "Version": "2.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "htmltools", + "htmlwidgets" + ], + "Hash": "06e5e4017ecb00fd142bada4b380c59a" + }, "stringi": { "Package": "stringi", "Version": "1.8.4", @@ -2139,6 +2972,41 @@ ], "Hash": "960e2ae9e09656611e0b8214ad543207" }, + "styler": { + "Package": "styler", + "Version": "1.10.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R.cache", + "cli", + "magrittr", + "purrr", + "rlang", + "rprojroot", + "tools", + "vctrs", + "withr" + ], + "Hash": "93a2b1beac2437bdcc4724f8bf867e2c" + }, + "survival": { + "Package": "survival", + "Version": "3.7-0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "Matrix", + "R", + "graphics", + "methods", + "splines", + "stats", + "utils" + ], + "Hash": "5aaa9cbaf4aba20f8e06fdea1850a398" + }, "sys": { "Package": "sys", "Version": "3.4.3", @@ -2158,6 +3026,269 @@ ], "Hash": "213b6b8ed5afbf934843e6c3b090d418" }, + "teal": { + "Package": "teal", + "Version": "0.15.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "checkmate", + "jsonlite", + "lifecycle", + "logger", + "magrittr", + "methods", + "rlang", + "shiny", + "shinyjs", + "stats", + "teal.code", + "teal.data", + "teal.logger", + "teal.reporter", + "teal.slice", + "teal.widgets", + "utils" + ], + "Hash": "c9e4b15461b0fc175a386cf28f474644" + }, + "teal.code": { + "Package": "teal.code", + "Version": "0.5.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "checkmate", + "grDevices", + "lifecycle", + "methods", + "rlang" + ], + "Hash": "b10128cf6d4ac18bb77463f4958ff29d" + }, + "teal.data": { + "Package": "teal.data", + "Version": "0.6.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "checkmate", + "lifecycle", + "methods", + "rlang", + "stats", + "teal.code", + "utils" + ], + "Hash": "22dd132d65fb21b8efa739855cb632a8" + }, + "teal.logger": { + "Package": "teal.logger", + "Version": "0.3.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "glue", + "lifecycle", + "logger", + "methods", + "shiny", + "utils", + "withr" + ], + "Hash": "b5d3366368999eb2262c2a646a1f0c87" + }, + "teal.modules.general": { + "Package": "teal.modules.general", + "Version": "0.3.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "DT", + "R", + "checkmate", + "dplyr", + "forcats", + "ggmosaic", + "ggplot2", + "grid", + "logger", + "scales", + "shiny", + "shinyTree", + "shinyWidgets", + "shinyjs", + "shinyvalidate", + "stats", + "stringr", + "teal", + "teal.code", + "teal.data", + "teal.logger", + "teal.reporter", + "teal.transform", + "teal.widgets", + "tern", + "tibble", + "tidyr", + "tools", + "utils" + ], + "Hash": "f54d7bc27cd048cec3a842f980c74e9b" + }, + "teal.reporter": { + "Package": "teal.reporter", + "Version": "0.3.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R6", + "bslib", + "checkmate", + "flextable", + "grid", + "htmltools", + "knitr", + "lifecycle", + "rmarkdown", + "shiny", + "shinyWidgets", + "shinybusy", + "yaml", + "zip" + ], + "Hash": "b09a5fb625dc8bff3965f58ba69e8fb3" + }, + "teal.slice": { + "Package": "teal.slice", + "Version": "0.5.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "bslib", + "checkmate", + "dplyr", + "grDevices", + "htmltools", + "jsonlite", + "lifecycle", + "logger", + "methods", + "plotly", + "shiny", + "shinyWidgets", + "shinycssloaders", + "shinyjs", + "teal.data", + "teal.logger", + "teal.widgets", + "utils" + ], + "Hash": "a29de94bc89bad9a12a914c17e8269f1" + }, + "teal.transform": { + "Package": "teal.transform", + "Version": "0.5.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "checkmate", + "dplyr", + "lifecycle", + "logger", + "methods", + "rlang", + "shiny", + "shinyjs", + "shinyvalidate", + "stats", + "teal.data", + "teal.logger", + "teal.widgets", + "tidyr", + "tidyselect" + ], + "Hash": "988a30f3f0f20b2633b41103a8eb4e56" + }, + "teal.widgets": { + "Package": "teal.widgets", + "Version": "0.4.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "bslib", + "checkmate", + "ggplot2", + "grDevices", + "graphics", + "htmltools", + "lifecycle", + "methods", + "rtables", + "shiny", + "shinyWidgets", + "shinyjs", + "styler" + ], + "Hash": "46a99bbdcd97f8f25070ad23c3b23ad9" + }, + "tern": { + "Package": "tern", + "Version": "0.9.6", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "MASS", + "R", + "Rdpack", + "broom", + "car", + "checkmate", + "cowplot", + "dplyr", + "emmeans", + "forcats", + "formatters", + "ggplot2", + "grid", + "gridExtra", + "gtable", + "labeling", + "lifecycle", + "magrittr", + "methods", + "rlang", + "rtables", + "scales", + "stats", + "survival", + "tibble", + "tidyr", + "utils" + ], + "Hash": "35fe86bc358b15525217e775f5318d33" + }, + "textshaping": { + "Package": "textshaping", + "Version": "0.4.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cpp11", + "lifecycle", + "systemfonts" + ], + "Hash": "573e0d015b7fc3e555f83e254cad7533" + }, "tibble": { "Package": "tibble", "Version": "3.2.1", @@ -2216,6 +3347,17 @@ ], "Hash": "829f27b9c4919c16b593794a6344d6c0" }, + "timechange": { + "Package": "timechange", + "Version": "0.3.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cpp11" + ], + "Hash": "c5f3c201b931cd6474d17d8700ccb1c8" + }, "tinytex": { "Package": "tinytex", "Version": "0.54", @@ -2226,6 +3368,24 @@ ], "Hash": "3ec7e3ddcacc2d34a9046941222bf94d" }, + "toastui": { + "Package": "toastui", + "Version": "0.3.4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "htmltools", + "htmlwidgets", + "magrittr", + "phosphoricons", + "rlang", + "shiny", + "shinyWidgets", + "utils" + ], + "Hash": "cb55e4feb9d21e6b9504fda11b418aa3" + }, "twosamples": { "Package": "twosamples", "Version": "2.0.1", @@ -2317,6 +3477,19 @@ ], "Hash": "390f9315bc0025be03012054103d227c" }, + "webshot": { + "Package": "webshot", + "Version": "0.5.5", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "callr", + "jsonlite", + "magrittr" + ], + "Hash": "16858ee1aba97f902d24049d4a44ef16" + }, "withr": { "Package": "withr", "Version": "3.0.2", @@ -2329,6 +3502,13 @@ ], "Hash": "cc2d62c76458d425210d1eb1478b30b4" }, + "writexl": { + "Package": "writexl", + "Version": "1.5.1", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "3eb948ad9591d7b34987772d44e4be12" + }, "xfun": { "Package": "xfun", "Version": "0.49", diff --git a/webResearch.Rproj b/webResearch.Rproj index 69fafd4..235efdc 100644 --- a/webResearch.Rproj +++ b/webResearch.Rproj @@ -1,4 +1,5 @@ Version: 1.0 +ProjectId: 88756fd6-a799-4963-955c-8216834cd504 RestoreWorkspace: No SaveWorkspace: No