diff --git a/.Rbuildignore b/.Rbuildignore index b4df5dc3..12c38f4a 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -14,7 +14,7 @@ README.md ^docs$ ^pkgdown$ ^codecov\.yml$ -inst/shiny-examples/SCD-effect-sizes/rsconnect +inst/shiny-examples/SCD-effect-sizes/rsconnect/shinyapps.io/jepusto/SCD-effect-sizes.dcf ^CRAN-SUBMISSION$ ^init.R$ ^run.R$ diff --git a/DESCRIPTION b/DESCRIPTION index 8ecca44d..b056bad6 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -6,8 +6,7 @@ Authors@R: c( person(c("James","E."), "Pustejovsky", email = "jepusto@gmail.com", role = c("aut", "cre")), person("Man", "Chen", email = "manchen9005@gmail.com", role = "aut"), person(c("Daniel","M."), "Swan", email = "dms031000@gmail.com", role = "aut"), - person("Paulina", "Grekov", email = "grekov.paulina@gmail.com", role = "ctb"), - person("Amy", "Cai", email = "amycai2023@gmail.com", role = "ctb") + person("Paulina", "Grekov", email = "grekov.paulina@gmail.com", role = "ctb") ) Description: Provides R functions for calculating basic effect size indices for @@ -20,8 +19,6 @@ Description: URL: https://jepusto.github.io/SingleCaseES/ BugReports: https://github.com/jepusto/SingleCaseES/issues License: GPL-3 -Depends: - R (>= 4.1.0) Imports: stats, purrr, @@ -36,6 +33,7 @@ Suggests: shinytest2 (>= 0.5.0), stringr, rvest, + xml2, ggplot2, purrrlyr, testthat, diff --git a/R/calculate-effect-sizes.R b/R/calculate-effect-sizes.R index 5086b04d..41fc3f84 100644 --- a/R/calculate-effect-sizes.R +++ b/R/calculate-effect-sizes.R @@ -456,46 +456,62 @@ batch_calc_ES <- function(dat, if (utils::packageVersion("dplyr") >= '1.1.0') { dat |> dplyr::group_by(!!!rlang::syms(c(grouping, aggregate))) |> - dplyr::reframe( - calc_ES( - condition = .data[[condition]], - outcome = .data[[outcome]], - baseline_phase = baseline_phase, - intervention_phase = intervention_phase, - ES = ES_names, - improvement = .data[[improvement]], - scale = .data[[scale]], - intervals = .data[[intervals]], - observation_length = .data[[observation_length]], - goal = if ("PoGO" %in% ES_names) .data[[goal]] else NULL, - confidence = confidence, - format = "long", - ..., - warn = warn + dplyr::reframe( + tryCatch( + calc_ES( + condition = .data[[condition]], + outcome = .data[[outcome]], + baseline_phase = baseline_phase, + intervention_phase = intervention_phase, + ES = ES_names, + improvement = .data[[improvement]], + scale = .data[[scale]], + intervals = .data[[intervals]], + observation_length = .data[[observation_length]], + goal = if ("PoGO" %in% ES_names) .data[[goal]] else NULL, + confidence = confidence, + format = "long", + ..., + warn = warn + ), + error = function(e) { + stop( + paste0("Effect size calculation failed: ", conditionMessage(e)), + call. = FALSE + ) + } + ) ) - ) } else { dat |> - dplyr::group_by(!!!rlang::syms(c(grouping, aggregate))) |> - dplyr::summarise( - calc_ES( - condition = .data[[condition]], - outcome = .data[[outcome]], - baseline_phase = baseline_phase, - intervention_phase = intervention_phase, - ES = ES_names, - improvement = .data[[improvement]], - scale = .data[[scale]], - intervals = .data[[intervals]], - observation_length = .data[[observation_length]], - goal = if ("PoGO" %in% ES_names) .data[[goal]] else NULL, - confidence = confidence, - format = "long", - ..., - warn = warn - ), - .groups = "drop" - ) + dplyr::group_by(!!!rlang::syms(c(grouping, aggregate))) |> + dplyr::summarise( + tryCatch( + calc_ES( + condition = .data[[condition]], + outcome = .data[[outcome]], + baseline_phase = baseline_phase, + intervention_phase = intervention_phase, + ES = ES_names, + improvement = .data[[improvement]], + scale = .data[[scale]], + intervals = .data[[intervals]], + observation_length = .data[[observation_length]], + goal = if ("PoGO" %in% ES_names) .data[[goal]] else NULL, + confidence = confidence, + format = "long", + ..., + warn = warn + ), + error = function(e) { + stop( + paste0("Effect size calculation failed: ", conditionMessage(e)), + call. = FALSE + ) + } + ), + .groups = "drop" + ) } ES_long_names <- names(ES_ests_long) @@ -548,15 +564,24 @@ batch_calc_ES <- function(dat, n_weights <- dat |> dplyr::filter(!!rlang::sym(condition) %in% c(baseline_phase, intervention_phase)) |> - dplyr::mutate(!!rlang::sym(condition) := ifelse(!!rlang::sym(condition) == baseline_phase, "A", "B")) |> + dplyr::mutate( + !!rlang::sym(condition) := ifelse( + !!rlang::sym(condition) == baseline_phase, + "A", + "B" + ) + ) |> dplyr::group_by(!!!rlang::syms(c(grouping, aggregate, condition))) |> dplyr::summarise(n = dplyr::n(), .groups = "drop") |> - tidyr::pivot_wider(names_from = !!rlang::sym(condition), values_from = n) |> + tidyr::pivot_wider( + names_from = !!rlang::sym(condition), + values_from = n + ) |> dplyr::ungroup() |> dplyr::mutate( weights = calc_ES_weights(weighting, A = A, B = B) ) |> - dplyr::select(-c(A,B)) + dplyr::select(-dplyr::any_of(c("A", "B"))) ES_weights <- ES_ests_long |> diff --git a/inst/shiny-examples/SCD-effect-sizes/server.R b/inst/shiny-examples/SCD-effect-sizes/app.R similarity index 57% rename from inst/shiny-examples/SCD-effect-sizes/server.R rename to inst/shiny-examples/SCD-effect-sizes/app.R index 9bd2acb6..26676cb7 100644 --- a/inst/shiny-examples/SCD-effect-sizes/server.R +++ b/inst/shiny-examples/SCD-effect-sizes/app.R @@ -1,1025 +1,1323 @@ -library(markdown, warn.conflicts = FALSE, quietly = TRUE) -library(ggplot2, warn.conflicts = FALSE, quietly = TRUE) -library(tidyr, warn.conflicts = FALSE, quietly = TRUE) -library(dplyr, warn.conflicts = FALSE, quietly = TRUE) -library(SingleCaseES, warn.conflicts = FALSE, quietly = TRUE) -library(rlang, warn.conflicts = FALSE, quietly = TRUE) -library(Kendall, warn.conflicts = FALSE, quietly = TRUE) - -source("mappings.R") -source("helper-functions.R", local = TRUE) - -statistical_indices <- c("NAP", "Tau", "Tau_BC", "SMD", "LRRi", "LRRd", "LOR", "LRM", "PoGO") - -full_names <- list(IRD = "Robust Improvement Rate Difference", - NAP = "Non-overlap of All Pairs", - PAND = "Percentage of All Non-overlapping Data", - PEM = "Percent Exceeding the Median", - PND = "Percentage of Non-overlapping Data", - Tau = "Tau", - Tau_BC = "Tau-BC", - Tau_U = "Tau-U", - LOR = "Log Odds Ratio", - LRRd = "Log Response Ratio (decreasing)", - LRRi = "Log Response Ratio (increasing)", - LRM = "Log Ratio of Medians", - PoGO = "Percent of Goal Obtained", - SMD = "Standardized Mean Difference (within-case)") - - -shinyServer(function(input, output, session) { - - f <- function(x) { - y <- as.numeric(unlist(strsplit(x, split = "\\s|\\t|\\n|,"))) - y[!is.na(y)] - } - - dat <- reactive({ - dat_strings <- list(A = input$A_dat, B = input$B_dat) - dat <- lapply(dat_strings, f) - dat$compute <- all(sapply(dat, function(x) sum(!is.na(x)) >= 3)) - dat - }) - - output$SCDplot <- renderPlot({ - - if (input$toggleSinglePlot & dat()$compute) { - A_dat <- dat()$A - B_dat <- dat()$B - m <- length(A_dat) - n <- length(B_dat) - dat <- data.frame(session = 1:(m + n), - phase = c(rep("A",m), rep("B",n)), - outcome = c(A_dat, B_dat)) - ggplot(dat, aes(session, outcome, color = phase)) + - geom_point(size = 2) + geom_line() + - geom_vline(xintercept = m + 0.5, linetype = "dashed") + - scale_color_brewer(type = "qual", palette = 2) + - theme_minimal() + theme(legend.position = "bottom") - } else { - ggplot() + - geom_text(aes(x = 0, y = 0, label = single_series_min_data_points_msg), size = 6) + - theme_void() - } - }) - - ES <- reactive({ - index <- c("Non-overlap" = input$NOM_ES, "Parametric" = input$parametric_ES)[[input$ES_family]] - - if (input$tau_calculation == "Kendall") { - Kendall <- TRUE - } else { - Kendall <- FALSE - } - - if (input$baseline_check == "No") { - pretest_trend <- FALSE - } else { - pretest_trend <- input$significance_level - } - - arg_vals <- list(A_data = dat()$A, - B_data = dat()$B, - ES = index, - improvement = input$improvement, - std_dev = substr(input$SMD_denom, 1, nchar(input$SMD_denom) - 3), - confidence = (input$confidence/100), - pct_change = input$pct_change, - scale = input$outScale, - observation_length = input$obslength, - intervals = input$intervals, - goal = input$goal_level, - D_const = input$lrrfloor, - # options for Tau_BC - Kendall = Kendall, - pretest_trend = pretest_trend, - warn = FALSE, - report_correction = TRUE - ) - - est <- tryCatch(do.call(calc_ES, arg_vals), warning = function(w) w, error = function(e) e) - - if (index %in% c("LRRi", "LRRd", "LOR")) { - validate( - need(all(c(dat()$A, dat()$B) >= 0), message = "For the log response or log odds ratio, all data must be greater than or equal to zero. ") - ) - } - - if (index == "LRM") { - validate( - need(all(c(median(dat()$A), median(dat()$B)) > 0), message = "For the log ratio of medians, medians of phase A or B must be greater than zero. ") - ) - } - - if (input$ES_family == "Parametric" & input$parametric_ES %in% c("LOR", "LRRi", "LRRd") & input$outScale == "percentage") { - validate( - need(all(c(dat()$A, dat()$B) >= 0) & all(c(dat()$A, dat()$B) <= 100), message = "For percentage scale, values must be between 0 and 100.") - ) - } - - if (input$ES_family == "Parametric" & input$parametric_ES %in% c("LOR", "LRRi", "LRRd") & input$outScale == "proportion") { - validate( - need(all(c(dat()$A, dat()$B) >= 0) & all(c(dat()$A, dat()$B) <= 1), message = "For proportion scale, values must be between 0 and 1.") - ) - } - - if (index %in% c("LOR")) { - validate( - need(input$outScale %in% c("proportion", "percentage"), message = "For the log odds ratio, only proportion or percentage scale data is accepted.") - ) - } - - list(index = index, est = est) - }) - - output$ES_name <- renderText({ - index <- c("Non-overlap" = input$NOM_ES, "Parametric" = input$parametric_ES)[[input$ES_family]] - full_names[[index]] - }) - - output$result <- renderText({ - index <- ES()$index[1] - - if (dat()$compute) { - fmt <- function(x) formatC(x, digits = input$digits, format = "f") - pct <- function(x) formatC(x, digits = input$digits - 2, format = "f") - est <- ES()$est - - if (ES()$index %in% statistical_indices) { - - Est_txt <- paste("Effect size estimate:", fmt(est$Est[1])) - SE_txt <- paste("Standard error:", fmt(est$SE[1])) - CI_txt <- paste0(input$confidence,"% CI: [", fmt(est$CI_lower[1]), ", ", fmt(est$CI_upper[1]), "]") - - note_SMD_no_variation <- NULL - pct_txt <- NULL - - if (ES()$index == "SMD" & input$SMD_denom == "baseline SD") { - if (sd(dat()$A) == 0) { - Est_txt <- SE_txt <- CI_txt <- SD_txt <- NULL - note_SMD_no_variation <- strong(style="color:red", "The baseline SD is zero. Please try the pooled SD or use other effect size metrics.") - } else { - SD_txt <- paste("Baseline SD:", fmt(est$`baseline_SD`[1])) - } - - } else if (ES()$index == "SMD" & input$SMD_denom == "pooled SD") { - if (all(c(sd(dat()$A), sd(dat()$B)) == 0)) { - Est_txt <- SE_txt <- CI_txt <- SD_txt <- NULL - note_SMD_no_variation <- strong(style ="color:red", "The pooled SD is zero. The SMD is not an appropriate effect size metric for these data.") - } else { - SD_txt <- paste("Pooled SD:", fmt(est$`pooled_SD`[1])) - } - - } else { - SD_txt <- NULL - - if (nrow(est) > 1) { - pct_est <- paste("
Percentage change:", pct(est$Est[2])) - pct_CI <- paste0(input$confidence,"% CI: [", pct(est$CI_lower[2]), ", ", pct(est$CI_upper[2]), "]") - pct_txt <- paste(pct_est, pct_CI, sep = "
") - } - } - - note_txt_TauBC <- NULL - if (ES()$index == "Tau_BC" & input$baseline_check == "Yes") { - - if (ES()$est$pval_slope_A > input$significance_level) { - if (input$tau_calculation == "Kendall") { - note_txt_TauBC <- strong(style="color:red", "The baseline trend is not statistically significant. Kendall rank correlation is calculated without trend correction.") - } else if (input$tau_calculation == "Nlap") { - note_txt_TauBC <- strong(style="color:red", "The baseline trend is not statistically significant. Tau (non-overlap) is calculated without trend correction.") - } - } - - } - - note_txt <- "
Note: SE and CI are based on the assumption that measurements are mutually independent (i.e., not auto-correlated)." - - HTML(paste(Est_txt, SE_txt, CI_txt, SD_txt, pct_txt, note_txt_TauBC, note_SMD_no_variation, note_txt, sep = "
")) - - } else { - Est_txt <- paste("Effect size estimate:", fmt(est$Est)) - HTML(Est_txt) - } - } else { - HTML(single_series_min_data_points_msg) - } - }) - - sheetname <- reactive({ - if (input$dat_type == "xlsx") { - inFile <- input$xlsx - if (is.null(inFile)) return(NULL) - sheetnames <- readxl::excel_sheets(inFile$datapath) - } - }) - - observe({ - sheets <- sheetname() - updateSelectInput(session, "inSelect", label = "Select a sheet", - choices = sheets, - selected = sheets[1]) - }) - - datFile <- reactive({ - - if (input$dat_type == "example") { - dat <- get(input$example) - - dat - - } else if (input$dat_type == "dat") { - - inFile <- input$dat - - if (is.null(inFile)) return(NULL) - - read.table(inFile$datapath, header=input$header, - sep=input$sep, quote=input$quote, - stringsAsFactors = FALSE, check.names = FALSE) |> - janitor::clean_names(case = "parsed") - - } else if (input$dat_type == "xlsx") { - - inFile <- input$xlsx - - if (is.null(inFile) || is.null(input$inSelect) || nchar(input$inSelect) == 0) return(NULL) - - readxl::read_xlsx(inFile$datapath, col_names = input$col_names, sheet = input$inSelect) |> - janitor::clean_names(case = "parsed") |> - as.data.frame() - - } - }) - - - output$filtervarMapping <- renderUI({ - - var_names <- names(datFile()) - list( - selectizeInput("filters", label = "Filtering variables", choices = var_names, selected = NULL, multiple = TRUE) - ) - - }) - - output$filterMapping <- renderUI({ - - filter_vars <- input$filters - filter_vals <- lapply(filter_vars, function(x) levels(as.factor(datFile()[,x]))) - names(filter_vals) <- filter_vars - header <- strong("Please select values for each filtering variable.") - - filter_selects <- lapply(filter_vars, function(x) - selectizeInput(paste0("filter_",x), label = x, choices = filter_vals[[x]], - selected = filter_vals[[x]][1], multiple = TRUE)) - - if (length(filter_vars) > 0) { - filter_selects <- list(header, column(12, br()), filter_selects) - } - - filter_selects - - }) - - datClean <- reactive({ - - if (input$dat_type == "example") { - data(list = input$example) - dat <- get(input$example) - } else { - dat <- datFile() - } - - if (!is.null(input$filters)) { - subset_vals <- sapply(input$filters, function(x) datFile()[[x]] %in% input[[paste0("filter_",x)]]) - dat <- dat[apply(subset_vals, 1, all),] - dat <- droplevels(dat) - } - - return(dat) - - }) - - output$datview <- renderTable(datClean()) - - - # variables tab - output$clusterPhase <- renderUI({ - - var_names <- names(datClean()) - if (input$dat_type == "dat" || input$dat_type == "xlsx") { - - b_clu_agg_choices <- if (input$calcPhasePair) { - c(var_names, "phase_pair_calculated") - } else { - var_names - } - - list( - selectizeInput("b_clusters", label = "Select all variables uniquely identifying cases (e.g. pseudonym, study, behavior).", - choices = b_clu_agg_choices, selected = NULL, multiple = TRUE), - selectizeInput("b_aggregate", label = "Select all variables to average across after calculating effect size estimates.", - choices = b_clu_agg_choices, selected = NULL, multiple = TRUE), - selectInput("b_phase", label = "Phase indicator", choices = var_names, selected = var_names[3]) - ) - - } else { - - curMap <- exampleMapping[[input$example]] - - list( - selectizeInput("b_clusters", label = "Select all variables uniquely identifying cases (e.g. pseudonym, study, behavior).", - choices = var_names, - selected = curMap$cluster_vars, multiple = TRUE), - selectizeInput("b_aggregate", label = "Select all variables to average across after calculating effect size estimates.", - choices = var_names, - selected = curMap$aggregate_vars, multiple = TRUE), - selectInput("b_phase", label = "Phase indicator", choices = var_names, selected = curMap$condition) - ) - - } - }) - - - output$baseDefine <- renderUI({ - - phase_choices <- if (!is.null(input$b_phase)) unique(datClean()[[input$b_phase]]) else c("A","B") - - if (input$dat_type == "dat" || input$dat_type == "xlsx") { - selectInput("b_base", label = "Baseline phase value", choices = phase_choices) - } else { - curMap <- exampleMapping[[input$example]] - selectInput("b_base", label = "Baseline phase value", choices = phase_choices, selected = curMap$phase_vals[1]) - } - }) - - output$treatDefine <- renderUI({ - - phase_choices <- if (!is.null(input$b_phase)) unique(datClean()[[input$b_phase]]) else c("A","B") - trt_choices <- setdiff(phase_choices, input$b_base) - - if (input$dat_type == "dat" || input$dat_type == "xlsx") { - selectInput("b_treat", label = "Treatment phase value", choices = trt_choices) - } else { - curMap <- exampleMapping[[input$example]] - selectInput("b_treat", label = "Treatment phase value", choices = trt_choices, selected = curMap$phase_vals[2]) - } - }) - - - output$outOrderImp <- renderUI({ - - var_names <- names(datClean()) - - if (input$dat_type == "dat" || input$dat_type == "xlsx") { - list( - selectInput("session_number", label = "Session number", choices = var_names, selected = var_names[5]), - selectInput("b_out", label = "Outcome", choices = var_names, selected = var_names[4]), - selectInput("bimprovement", label = "Direction of improvement", choices = c("all increase" = "increase", "all decrease" = "decrease", "by series" = "series")) - ) - } else { - curMap <- exampleMapping[[input$example]] - list( - selectInput("session_number", label = "Session number", choices = var_names, selected = curMap$session_num), - selectInput("b_out", label = "Outcome", choices = var_names, selected = curMap$outcome), - selectInput("bimprovement", label = "Direction of improvement", choices = c("all increase" = "increase", "all decrease" = "decrease", "by series" = "series"), - selected = curMap$direction) - ) - } - - }) - - output$improvementVar <- renderUI({ - var_names <- names(datClean()) - - if (input$dat_type == "dat" || input$dat_type == "xlsx") { - list(selectInput("bseldir", label = "Select variable identifying improvement direction", choices = var_names, selected = var_names[5])) - } else { - curMap <- exampleMapping[[input$example]] - list(selectInput("bseldir", label = "Select variable identifying improvement direction", choices = var_names, selected = curMap$direction_var)) - } - }) - - # Measurement details taken out of the following function - might be useful later - # selectInput("bmeasurementProcedure", label = "Measurement Procedure", - # choices = c("all continuous recording", "all interval recording", "all event counting", "all other", "by series" = "series")), - # conditionalPanel(condition = "input.bmeasurementProcedure == 'series'", - # selectInput("bmeasurementvar", "Select variable identifying measurement procedure", - # choices = var_names)), - # conditionalPanel(condition = "input.bmeasurementProcedure == 'series' | input.bmeasurementProcedure == 'all continuous recording'", - # textInput("bfloor", label = "Optional floor for log-prevalence odds-ratio", value = NA)), - - output$measurementProc <- renderUI({ - - var_names <- names(datClean()) - - if (input$dat_type == "dat" || input$dat_type == "xlsx") { - - list( - selectInput("boutScale", label = "Outcome Scale", - choices = c("all percentage" = "percentage", "all proportion" = "proportion", "all count" = "count", "all rate" = "rate", "all other" = "other", "by series" = "series")), - conditionalPanel(condition = "input.boutScale == 'series'", - selectInput("bscalevar", "Select variable identifying outcome scale", - choices = var_names)), - selectInput("bintervals", label = "Optionally, a variable identifying the number of intervals per observation session.", - choices = c(NA, var_names), selected = NA), - selectInput("bobslength", label = "Optionally, a variable identifying the length of each observation session.", - choices = c(NA, var_names), selected = NA), - numericInput("blrrfloor", label = "Optionally, provide a floor for the log-response or log-odds ratio? Must be greater than or equal to 0.", - value = NA, min = 0) - ) - - } else { - - curMap <- exampleMapping[[input$example]] - list( - selectInput("boutScale", label = "Outcome Scale", - choices = c("all percentage" = "percentage", "all proportion" = "proportion", "all count" = "count", "all rate" = "rate", "all other" = "other", "by series" = "series"), - selected = curMap$scale), - conditionalPanel(condition = "input.boutScale == 'series'", - selectInput("bscalevar", "Select variable identifying outcome scale", - choices = var_names, - selected = (if(!is.null(curMap$scale_var)){curMap$scale_var}else{NA}))), - selectInput("bintervals", label = "Optionally, a variable identifying the number of intervals per observation session.", - choices = c(NA, var_names), selected = curMap$intervals), - selectInput("bobslength", label = "Optionally, a variable identifying the length of each observation session.", - choices = c(NA, var_names), selected = curMap$observation_length), - numericInput("blrrfloor", label = "Optionally, provide a floor for the log-response or log-odds ratio? Must be greater than or equal to 0.", - value = NA, min = 0) - ) - - } - }) - - output$goalLevel <- renderUI({ - - var_names <- names(datClean()) - - if (input$dat_type == "dat" || input$dat_type == "xlsx") { - - list( - selectInput("bgoalLevel", "Set the goal level for PoGO.", - choices = c("common goal" = "commonGoal", "different goals across series" = "goals")), - conditionalPanel(condition = "input.bgoalLevel == 'commonGoal'", - numericInput("bcomgoal", label = "Provide a common goal level across series.", - value = NULL)), - conditionalPanel(condition = "input.bgoalLevel == 'goals'", - selectInput("bgoalvar", "Select variable identifying goal level", - choices = var_names)) - ) - - } else { - - numericInput("bcomgoal", label = "Provide a common goal level across series.", value = NULL) - - } - - }) - - - datClean2 <- reactive({ - dat <- datClean() - - if (input$calcPhasePair) { - grouping_vars <- setdiff(input$b_clusters, "phase_pair_calculated") - session_var <- input$session_number - phase_var <- input$b_phase - - dat <- - dat |> - dplyr::group_by(!!!rlang::syms(grouping_vars)) |> - dplyr::mutate( - phase_pair_calculated = calc_phase_pairs(!!rlang::sym(phase_var), session = !!rlang::sym(session_var)) - ) |> - dplyr::ungroup() |> - as.data.frame() - } - - return(dat) - - }) - - output$datview2 <- renderTable(datClean2()) - - # warning message for outcome scale types - - output$outcomeScale <- renderUI({ - - req(input$boutScale) - - if (input$boutScale == "series") { - scales <- c("count", "rate", "proportion", "percentage", "other") - scale_type <- tolower(unique(datClean2()[[input$bscalevar]])) - wrong_scale_type <- setdiff(scale_type, scales) - - if (length(wrong_scale_type) > 0) { - warning <- paste0("The scale variable contains non-acceptable types: ", paste(wrong_scale_type, collapse = ", "), - ". The acceptable scale types are: count, rate, proportion, percentage, or other.") - list( - strong(style="color:red", warning), - br("") - ) - } else { - NULL - } - } - - }) - - # warning message for improvement direction - - output$improvementDir <- renderUI({ - - req(input$bimprovement) - req(input$bseldir) - - if (input$bimprovement == "series") { - valence_allowed <- c("increase", "decrease") - valence_input <- tolower(unique(datClean2()[[input$bseldir]])) - wrong_valence <- setdiff(valence_input, valence_allowed) - - if (length(wrong_valence) > 0) { - warning <- paste0("The improvement direction variable contains non-acceptable types: ", paste(wrong_valence, collapse = ", "), - ". The acceptable improvement directions are: increase or decrease.") - list( - strong(style="color:red", warning), - br("") - ) - } else { - NULL - } - } - - }) - - # Plot - - output$facetSelector <- renderUI({ - grouping_vars <- input$b_clusters - aggregating_vars <- input$b_aggregate - facet_vars <- c("None", grouping_vars, aggregating_vars) - selectizeInput("bfacetSelector", label = "Display plots for each value of this variable.", - choices = facet_vars, selected = NULL, multiple = FALSE) - }) - - grouping_vars <- reactive({ - setdiff(c(input$b_clusters, input$b_aggregate), input$bfacetSelector) - }) - - output$graph_filters <- renderUI({ - - if (length(grouping_vars()) > 0) { - - grouping_vals <- lapply(grouping_vars(), function(x) sort(unique(datClean2()[[x]]))) - names(grouping_vals) <- grouping_vars() - - header <- strong("Select a value for each grouping variable.") - - grouping_selects <- lapply(grouping_vars(), function(x) - selectizeInput(paste("grouping",x, sep = "_"), label = x, choices = grouping_vals[[x]], - selected = grouping_vals[[x]][1], multiple = FALSE)) - - grouping_selects <- list(header, column(12, br()), grouping_selects) - - grouping_selects - - } - - }) - - # vector of selected filter variables - grouping_selected <- reactive({ - if (length(grouping_vars()) > 0) { - lapply(grouping_vars(), \(x) input[[paste("grouping", x, sep = "_")]]) - } - }) - - # update the filter variable inputs - observeEvent(grouping_selected(), { - n_grouping <- length(grouping_vars()) - if (n_grouping > 0) { - dat <- datClean2() - for (i in 1:n_grouping) { - grp_var <- grouping_vars()[i] - inputId <- paste("grouping", grp_var, sep = "_") - grp_val <- grouping_selected()[[i]] - grouping_vals <- sort(unique(dat[[grp_var]])) - selected_val <- if (!is.null(grp_val) && grp_val %in% grouping_vals) grp_val else grouping_vals[1] - subset_vals <- dat[[grp_var]] == selected_val - dat <- dat[subset_vals,] - if (inputId %in% names(input)) { - updateSelectizeInput(session, inputId = inputId, choices = grouping_vals, selected = selected_val) - } - } - } - }) - - datGraph <- reactive({ - - dat <- datClean2() - - if (!is.null(input$b_clusters) | !is.null(input$b_aggregate)) { - - if (length(grouping_vars()) > 0) { - subset_vals <- sapply(grouping_vars(), function(x) datClean2()[[x]] %in% input[[paste0("grouping_",x)]]) - dat <- dat[apply(subset_vals, 1, all),] - } - - } - - return(dat) - - }) - - - heightPlot <- reactive({ - if (is.null(input$bfacetSelector) || input$bfacetSelector == "None") { - height <- 300 - } else { - height <- 180 * (length(unique(datGraph()[[input$bfacetSelector]]))) - } - }) - - output$batchPlot <- renderPlot({ - - dat <- datGraph() - session_dat <- dat[[input$session_number]] - outcome_dat <- dat[[input$b_out]] - phase_dat <- dat[[input$b_phase]] - phase_code <- if (!is.null(input$b_phase)) unique(phase_dat) else c("A","B") - - if (is.null(input$bfacetSelector) || input$bfacetSelector == "None"){ - - dat_graph <- - data.frame(session = session_dat, outcome = outcome_dat, phase = as.factor(phase_dat)) |> - dplyr::filter(phase %in% c(input$b_base, input$b_treat)) - - phase_change <- - dat_graph |> - dplyr::filter(phase == phase_code[2]) |> - dplyr::mutate(treat_change = suppressWarnings(min(session)) - 0.5) |> - dplyr::select(treat_change) |> - unique() - - } else { - - facet_dat <- dat[[input$bfacetSelector]] - - dat_graph <- - data.frame(facet = facet_dat, session = session_dat, outcome = outcome_dat, phase = as.factor(phase_dat)) |> - dplyr::filter(phase %in% c(input$b_base, input$b_treat)) - - phase_change <- - dat_graph |> - group_by(facet) |> - dplyr::filter(phase == phase_code[2]) |> - dplyr::mutate(treat_change = suppressWarnings(min(session)) - 0.5) |> - dplyr::select(facet, treat_change) |> - unique() - - } - - ggplot(dat_graph, aes(session, outcome, color = phase)) + - geom_point(size = 2) + geom_line() + - {if ("facet" %in% names(dat_graph)) facet_grid(facet ~ .)} + - geom_vline(data = phase_change, aes(xintercept = treat_change), linetype = "dashed") + - scale_color_brewer(type = "qual", palette = 2) + - theme_bw() + theme(legend.position = "bottom") - - }, height = function() heightPlot(), width = function() 700) - - - batchModel <- eventReactive(input$batchest, { - - if (any(input$bESpar %in% c("LRRi", "LRRd", "LOR"))) { - if (input$boutScale == "series") { - scale_val <- as.symbol(input$bscalevar) - } else{ - scale_val <- input$boutScale - } - - intervals <- if (input$bintervals == "NA") NA else input$bintervals - obslength <- if (input$bobslength == "NA") NA else input$bobslength - D_const <- if (is.null(input$blrrfloor)) NA else input$blrrfloor - - } else { - scale_val <- "other" - intervals <- obslength <- D_const <- NA - } - - - if ("PoGO" %in% input$bESpar) { - - if (input$dat_type %in% c("dat", "xlsx")) { - if (input$bgoalLevel == "goals") goal_val <- as.symbol(input$bgoalvar) else goal_val <- input$bcomgoal - } else { - goal_val <- input$bcomgoal - } - - } else { - goal_val <- NULL - } - - - if(input$bimprovement == "series") { - improvement <- as.symbol(input$bseldir) - } else { - improvement <- input$bimprovement - } - - if (input$btau_calculation == "Kendall") { - Kendall <- TRUE - } else { - Kendall <- FALSE - } - - if (input$bbaseline_check == "No") { - pretest_trend <- FALSE - } else { - pretest_trend <- input$bsignificance_level - } - - if (is.null(input$b_aggregate)) { - - batch_calc_ES(dat = datClean2(), - grouping = input$b_clusters, - condition = input$b_phase, - outcome = input$b_out, - session_number = input$session_number, - baseline_phase = input$b_base, - intervention_phase = input$b_treat, - ES = c(input$bESno, input$bESpar), - improvement = improvement, - pct_change = input$b_pct_change, - scale = scale_val, - intervals = intervals, - observation_length = obslength, - D_const = D_const, - goal = goal_val, - std_dev = input$bSMD_denom, - confidence = input$bconfidence / 100, - Kendall = Kendall, - pretest_trend = pretest_trend, - warn = FALSE, - format = input$resultsformat) - - } else{ - - batch_calc_ES(dat = datClean2(), - grouping = input$b_clusters, - condition = input$b_phase, - outcome = input$b_out, - aggregate = input$b_aggregate, - weighting = input$weighting_scheme, - session_number = input$session_number, - baseline_phase = input$b_base, - intervention_phase = input$b_treat, - ES = c(input$bESno, input$bESpar), - improvement = improvement, - pct_change = input$b_pct_change, - scale = scale_val, - intervals = intervals, - observation_length = obslength, - D_const = D_const, - goal = goal_val, - std_dev = input$bSMD_denom, - confidence = input$bconfidence / 100, - Kendall = Kendall, - pretest_trend = pretest_trend, - warn = FALSE, - format = input$resultsformat) - - } - - - - - }) - - output$batchTable <- renderTable(batchModel(), na = "-", digits = function() input$bdigits) - - output$downloadES <- downloadHandler( - filename = "SCD effect size estimates.csv", - content = function(file) { - dat <- batchModel() - write.csv(dat, file, row.names=FALSE, na = "") - }, - contentType = "text/csv" - ) - - #------------------------------ - # Syntax for replication in R - #------------------------------ - - batch_syntax <- reactive({ - header_res <- c( - '# Load packages', - 'library(SingleCaseES)', - '' - ) - - # read in data - if (input$dat_type == "example") { - read_res <- c( - parse_code_chunk("load-example", args = list(example_name = input$example)), - '' - ) - } else if (input$dat_type == "dat") { - inFile <- input$dat - read_res <- c( - parse_code_chunk("load-data", args = list(user_path = inFile$name, user_header = input$header, - user_sep = input$sep, user_quote = input$quote)), - '' - ) - } else if (input$dat_type == "xlsx") { - inFile <- input$xlsx - read_res <- c( - parse_code_chunk("load-excel", args = list(user_path = inFile$name, user_sheet = input$inSelect)), - '' - ) - } - - # filter the data - - filter_vars <- input$filters - filter_vals <- if(length(filter_vars) > 0) lapply(paste0("filter_", filter_vars), - function(x) paste0('"', input[[x]], '"', collapse = ",")) else NULL - filter_vals <- paste0("%in% c(", filter_vals, ")") - filter_string <- paste(input$filters, filter_vals, collapse = " & ") - - if (!is.null(input$filters)) { - clean_dat <- c( - parse_code_chunk("dat-filter", args = list(user_filterString = filter_string)), - '' - ) - } else { - clean_dat <- c() - } - - # clean the data - if (input$calcPhasePair) { - grouping_vars <- setdiff(input$b_clusters, "phase_pair_calculated") - grouping <- paste(grouping_vars, collapse=', ') - - condition <- input$b_phase - session_number <- input$session_number - - clean_dat <- c(clean_dat, - parse_code_chunk("dat-clean", - args = list(user_grouping = grouping, - user_condition = condition, - user_session_number = session_number)), - '' - ) - } - - - # batch calculation - if (any(input$bESpar %in% c("LRRi", "LRRd", "LOR"))) { - - scale_val <- switch(input$boutScale, - "series" = paste0("\n scale = ", as.symbol(input$bscalevar), ","), - "percentage" = '\n scale = "percentage",', - "proportion" = '\n scale = "proportion",', - "count" = '\n scale = "count",', - "rate" = '\n scale = "rate",', - "other" = '\n scale = "other",', - c() - ) - - intervals <- if (input$bintervals == "NA") NA else input$bintervals - obslength <- if (input$bobslength == "NA") NA else input$bobslength - D_const <- if (is.null(input$blrrfloor)) NA else input$blrrfloor - - } else { - # scale_val <- "other" - scale_val <- '\n scale = "other",' - intervals <- obslength <- D_const <- NA - } - - - if ("PoGO" %in% input$bESpar) { - if (input$dat_type %in% c("dat", "xlsx")) { - goal_val <- switch(input$bgoalLevel, - "goals" = paste0(as.symbol(input$bgoalvar)), - "commonGoal" = input$bcomgoal, - c()) - } else { - goal_val <- input$bcomgoal - } - - } else { - goal_val <- "NULL" - - } - - - improvement <- switch(input$bimprovement, - "series" = paste0("\n improvement = ", as.symbol(input$bseldir), ","), - "increase" = '\n improvement = "increase",', - "decrease" = '\n improvement = "decrease",', - c() - ) - - if (input$btau_calculation == "Kendall") { - Kendall <- TRUE - } else { - Kendall <- FALSE - } - - if (input$bbaseline_check == "No") { - pretest_trend <- FALSE - } else { - pretest_trend <- input$bsignificance_level - } - - grouping <- paste0('c(', paste(input$b_clusters, collapse=', '), ')') - condition <- input$b_phase - outcome <- input$b_out - aggregate <- paste0('c(', paste(input$b_aggregate, collapse=', '), ')') - weighting <- input$weighting_scheme - session_number <- input$session_number - baseline_phase <- input$b_base - intervention_phase <- input$b_treat - ES <- paste0('c("', paste(c(input$bESno, input$bESpar), collapse='", "'), '")') - pct_change <- input$b_pct_change - intervals <- intervals - obslength <- obslength - D_const <- D_const - goal <- goal_val - std_dev <- input$bSMD_denom - confidence <- input$bconfidence / 100 - Kendall <- Kendall - pretest_trend <- pretest_trend - format <- input$resultsformat - - if (is.null(input$b_aggregate)) { - output_res <- - c( - parse_code_chunk("bcalc-noaggregate-inputdata", - args = list(user_grouping = grouping, - user_condition = condition, - user_outcome = outcome, - user_session_number = session_number, - user_baseline_phase = baseline_phase, - user_intervention_phase = intervention_phase, - user_ES = ES, - user_improvement = improvement, - user_pct_change = pct_change, - user_scale = scale_val, - user_intervals = intervals, - user_obslength = obslength, - user_D_const = D_const, - user_goal = goal, - user_std_dev = std_dev, - user_confidence = confidence, - user_Kendall = Kendall, - user_pretest_trend = pretest_trend, - user_format = format)), - '') - } else { - output_res <- - c( - parse_code_chunk("bcalc-aggregate-inputdata", - args = list(user_grouping = grouping, - user_condition = condition, - user_outcome = outcome, - user_aggregate = aggregate, - user_weighting = weighting, - user_session_number = session_number, - user_baseline_phase = baseline_phase, - user_intervention_phase = intervention_phase, - user_ES = ES, - user_improvement = improvement, - user_pct_change = pct_change, - user_scale = scale_val, - user_intervals = intervals, - user_obslength = obslength, - user_D_const = D_const, - user_goal = goal, - user_std_dev = std_dev, - user_confidence = confidence, - user_Kendall = Kendall, - user_pretest_trend = pretest_trend, - user_format = format)), - '') - } - - res <- c(header_res, '', read_res, '', clean_dat, '', output_res) - paste(res, collapse = "\n") - }) - - output$syntax <- renderPrint({ - cat(batch_syntax(), sep = "\n") - }) - - output$clip <- renderUI({ - rclipboard::rclipButton("clipbtn", "Copy", batch_syntax(), modal = FALSE, icon = icon("clipboard"), - tooltip = "Click me to copy the code to your clipboard!",) - }) - - session$onSessionEnded(function() { - stopApp() - }) - -}) +library(markdown, warn.conflicts = FALSE, quietly = TRUE) +library(ggplot2, warn.conflicts = FALSE, quietly = TRUE) +library(tidyr, warn.conflicts = FALSE, quietly = TRUE) +library(dplyr, warn.conflicts = FALSE, quietly = TRUE) +library(SingleCaseES, warn.conflicts = FALSE, quietly = TRUE) +library(rlang, warn.conflicts = FALSE, quietly = TRUE) +library(Kendall, warn.conflicts = FALSE, quietly = TRUE) + +source("mappings.R") +source("helper-functions.R", local = TRUE) + +statistical_indices <- c("NAP", "Tau", "Tau_BC", "SMD", "LRRi", "LRRd", "LOR", "LRM", "PoGO") + +full_names <- list(IRD = "Robust Improvement Rate Difference", + NAP = "Non-overlap of All Pairs", + PAND = "Percentage of All Non-overlapping Data", + PEM = "Percent Exceeding the Median", + PND = "Percentage of Non-overlapping Data", + Tau = "Tau", + Tau_BC = "Tau-BC", + Tau_U = "Tau-U", + LOR = "Log Odds Ratio", + LRRd = "Log Response Ratio (decreasing)", + LRRi = "Log Response Ratio (increasing)", + LRM = "Log Ratio of Medians", + PoGO = "Percent of Goal Obtained", + SMD = "Standardized Mean Difference (within-case)") + + +server <- function(input, output, session) { + + f <- function(x) { + y <- as.numeric(unlist(strsplit(x, split = "\\s|\\t|\\n|,"))) + y[!is.na(y)] + } + + dat <- reactive({ + dat_strings <- list(A = input$A_dat, B = input$B_dat) + dat <- lapply(dat_strings, f) + dat$compute <- all(sapply(dat, function(x) sum(!is.na(x)) >= 3)) + dat + }) + + output$SCDplot <- renderPlot({ + + if (input$toggleSinglePlot & dat()$compute) { + A_dat <- dat()$A + B_dat <- dat()$B + m <- length(A_dat) + n <- length(B_dat) + dat <- data.frame(session = 1:(m + n), + phase = c(rep("A",m), rep("B",n)), + outcome = c(A_dat, B_dat)) + ggplot(dat, aes(session, outcome, color = phase)) + + geom_point(size = 2) + geom_line() + + geom_vline(xintercept = m + 0.5, linetype = "dashed") + + scale_color_brewer(type = "qual", palette = 2) + + theme_minimal() + theme(legend.position = "bottom") + } else { + ggplot() + + geom_text(aes(x = 0, y = 0, label = single_series_min_data_points_msg), size = 6) + + theme_void() + } + }) + + ES <- reactive({ + index <- c("Non-overlap" = input$NOM_ES, "Parametric" = input$parametric_ES)[[input$ES_family]] + + if (input$tau_calculation == "Kendall") { + Kendall <- TRUE + } else { + Kendall <- FALSE + } + + if (input$baseline_check == "No") { + pretest_trend <- FALSE + } else { + pretest_trend <- input$significance_level + } + + arg_vals <- list(A_data = dat()$A, + B_data = dat()$B, + ES = index, + improvement = input$improvement, + std_dev = substr(input$SMD_denom, 1, nchar(input$SMD_denom) - 3), + confidence = (input$confidence/100), + pct_change = input$pct_change, + scale = input$outScale, + observation_length = input$obslength, + intervals = input$intervals, + goal = input$goal_level, + D_const = input$lrrfloor, + # options for Tau_BC + Kendall = Kendall, + pretest_trend = pretest_trend, + warn = FALSE, + report_correction = TRUE + ) + + est <- tryCatch(do.call(calc_ES, arg_vals), warning = function(w) w, error = function(e) e) + + if (index %in% c("LRRi", "LRRd", "LOR")) { + validate( + need(all(c(dat()$A, dat()$B) >= 0), message = "For the log response or log odds ratio, all data must be greater than or equal to zero. ") + ) + } + + if (index == "LRM") { + validate( + need(all(c(median(dat()$A), median(dat()$B)) > 0), message = "For the log ratio of medians, medians of phase A or B must be greater than zero. ") + ) + } + + if (input$ES_family == "Parametric" & input$parametric_ES %in% c("LOR", "LRRi", "LRRd") & input$outScale == "percentage") { + validate( + need(all(c(dat()$A, dat()$B) >= 0) & all(c(dat()$A, dat()$B) <= 100), message = "For percentage scale, values must be between 0 and 100.") + ) + } + + if (input$ES_family == "Parametric" & input$parametric_ES %in% c("LOR", "LRRi", "LRRd") & input$outScale == "proportion") { + validate( + need(all(c(dat()$A, dat()$B) >= 0) & all(c(dat()$A, dat()$B) <= 1), message = "For proportion scale, values must be between 0 and 1.") + ) + } + + if (index %in% c("LOR")) { + validate( + need(input$outScale %in% c("proportion", "percentage"), message = "For the log odds ratio, only proportion or percentage scale data is accepted.") + ) + } + + list(index = index, est = est) + }) + + output$ES_name <- renderText({ + index <- c("Non-overlap" = input$NOM_ES, "Parametric" = input$parametric_ES)[[input$ES_family]] + full_names[[index]] + }) + + output$result <- renderText({ + index <- ES()$index[1] + + if (dat()$compute) { + fmt <- function(x) formatC(x, digits = input$digits, format = "f") + pct <- function(x) formatC(x, digits = input$digits - 2, format = "f") + est <- ES()$est + + if (ES()$index %in% statistical_indices) { + + Est_txt <- paste("Effect size estimate:", fmt(est$Est[1])) + SE_txt <- paste("Standard error:", fmt(est$SE[1])) + CI_txt <- paste0(input$confidence,"% CI: [", fmt(est$CI_lower[1]), ", ", fmt(est$CI_upper[1]), "]") + + note_SMD_no_variation <- NULL + pct_txt <- NULL + + if (ES()$index == "SMD" & input$SMD_denom == "baseline SD") { + if (sd(dat()$A) == 0) { + Est_txt <- SE_txt <- CI_txt <- SD_txt <- NULL + note_SMD_no_variation <- strong(style="color:red", "The baseline SD is zero. Please try the pooled SD or use other effect size metrics.") + } else { + SD_txt <- paste("Baseline SD:", fmt(est$`baseline_SD`[1])) + } + + } else if (ES()$index == "SMD" & input$SMD_denom == "pooled SD") { + if (all(c(sd(dat()$A), sd(dat()$B)) == 0)) { + Est_txt <- SE_txt <- CI_txt <- SD_txt <- NULL + note_SMD_no_variation <- strong(style ="color:red", "The pooled SD is zero. The SMD is not an appropriate effect size metric for these data.") + } else { + SD_txt <- paste("Pooled SD:", fmt(est$`pooled_SD`[1])) + } + + } else { + SD_txt <- NULL + + if (nrow(est) > 1) { + pct_est <- paste("
Percentage change:", pct(est$Est[2])) + pct_CI <- paste0(input$confidence,"% CI: [", pct(est$CI_lower[2]), ", ", pct(est$CI_upper[2]), "]") + pct_txt <- paste(pct_est, pct_CI, sep = "
") + } + } + + note_txt_TauBC <- NULL + if (ES()$index == "Tau_BC" & input$baseline_check == "Yes") { + + if (ES()$est$pval_slope_A > input$significance_level) { + if (input$tau_calculation == "Kendall") { + note_txt_TauBC <- strong(style="color:red", "The baseline trend is not statistically significant. Kendall rank correlation is calculated without trend correction.") + } else if (input$tau_calculation == "Nlap") { + note_txt_TauBC <- strong(style="color:red", "The baseline trend is not statistically significant. Tau (non-overlap) is calculated without trend correction.") + } + } + + } + + note_txt <- "
Note: SE and CI are based on the assumption that measurements are mutually independent (i.e., not auto-correlated)." + + HTML(paste(Est_txt, SE_txt, CI_txt, SD_txt, pct_txt, note_txt_TauBC, note_SMD_no_variation, note_txt, sep = "
")) + + } else { + Est_txt <- paste("Effect size estimate:", fmt(est$Est)) + HTML(Est_txt) + } + } else { + HTML(single_series_min_data_points_msg) + } + }) + + sheetname <- reactive({ + if (input$dat_type == "xlsx") { + inFile <- input$xlsx + if (is.null(inFile)) return(NULL) + sheetnames <- readxl::excel_sheets(inFile$datapath) + } + }) + + observe({ + sheets <- sheetname() + updateSelectInput(session, "inSelect", label = "Select a sheet", + choices = sheets, + selected = sheets[1]) + }) + + datFile <- reactive({ + + if (input$dat_type == "example") { + dat <- get(input$example) + + dat + + } else if (input$dat_type == "dat") { + + inFile <- input$dat + + if (is.null(inFile)) return(NULL) + + read.table(inFile$datapath, header=input$header, + sep=input$sep, quote=input$quote, + stringsAsFactors = FALSE, check.names = FALSE) |> + janitor::clean_names(case = "parsed") + + } else if (input$dat_type == "xlsx") { + + inFile <- input$xlsx + + if (is.null(inFile) || is.null(input$inSelect) || nchar(input$inSelect) == 0) return(NULL) + + readxl::read_xlsx(inFile$datapath, col_names = input$col_names, sheet = input$inSelect) |> + janitor::clean_names(case = "parsed") |> + as.data.frame() + + } + }) + + + output$filtervarMapping <- renderUI({ + + var_names <- names(datFile()) + list( + selectizeInput("filters", label = "Filtering variables", choices = var_names, selected = NULL, multiple = TRUE) + ) + + }) + + output$filterMapping <- renderUI({ + + filter_vars <- input$filters + filter_vals <- lapply(filter_vars, function(x) levels(as.factor(datFile()[,x]))) + names(filter_vals) <- filter_vars + header <- strong("Please select values for each filtering variable.") + + filter_selects <- lapply(filter_vars, function(x) + selectizeInput(paste0("filter_",x), label = x, choices = filter_vals[[x]], + selected = filter_vals[[x]][1], multiple = TRUE)) + + if (length(filter_vars) > 0) { + filter_selects <- list(header, column(12, br()), filter_selects) + } + + filter_selects + + }) + + datClean <- reactive({ + + if (input$dat_type == "example") { + data(list = input$example) + dat <- get(input$example) + } else { + dat <- datFile() + } + + if (!is.null(input$filters)) { + subset_vals <- sapply(input$filters, function(x) datFile()[[x]] %in% input[[paste0("filter_",x)]]) + dat <- dat[apply(subset_vals, 1, all),] + dat <- droplevels(dat) + } + + return(dat) + + }) + + output$datview <- renderTable(datClean()) + + + # variables tab + output$clusterPhase <- renderUI({ + + var_names <- names(datClean()) + if (input$dat_type == "dat" || input$dat_type == "xlsx") { + + b_clu_agg_choices <- if (input$calcPhasePair) { + c(var_names, "phase_pair_calculated") + } else { + var_names + } + + list( + selectizeInput("b_clusters", label = "Select all variables uniquely identifying cases (e.g. pseudonym, study, behavior).", + choices = b_clu_agg_choices, selected = NULL, multiple = TRUE), + selectizeInput("b_aggregate", label = "Select all variables to average across after calculating effect size estimates.", + choices = b_clu_agg_choices, selected = NULL, multiple = TRUE), + selectInput("b_phase", label = "Phase indicator", choices = var_names, selected = var_names[3]) + ) + + } else { + + curMap <- exampleMapping[[input$example]] + + list( + selectizeInput("b_clusters", label = "Select all variables uniquely identifying cases (e.g. pseudonym, study, behavior).", + choices = var_names, + selected = curMap$cluster_vars, multiple = TRUE), + selectizeInput("b_aggregate", label = "Select all variables to average across after calculating effect size estimates.", + choices = var_names, + selected = curMap$aggregate_vars, multiple = TRUE), + selectInput("b_phase", label = "Phase indicator", choices = var_names, selected = curMap$condition) + ) + + } + }) + + + output$baseDefine <- renderUI({ + + phase_choices <- if (!is.null(input$b_phase)) unique(datClean()[[input$b_phase]]) else c("A","B") + + if (input$dat_type == "dat" || input$dat_type == "xlsx") { + selectInput("b_base", label = "Baseline phase value", choices = phase_choices) + } else { + curMap <- exampleMapping[[input$example]] + selectInput("b_base", label = "Baseline phase value", choices = phase_choices, selected = curMap$phase_vals[1]) + } + }) + + output$treatDefine <- renderUI({ + + phase_choices <- if (!is.null(input$b_phase)) unique(datClean()[[input$b_phase]]) else c("A","B") + trt_choices <- setdiff(phase_choices, input$b_base) + + if (input$dat_type == "dat" || input$dat_type == "xlsx") { + selectInput("b_treat", label = "Treatment phase value", choices = trt_choices) + } else { + curMap <- exampleMapping[[input$example]] + selectInput("b_treat", label = "Treatment phase value", choices = trt_choices, selected = curMap$phase_vals[2]) + } + }) + + + output$outOrderImp <- renderUI({ + + var_names <- names(datClean()) + + if (input$dat_type == "dat" || input$dat_type == "xlsx") { + list( + selectInput("session_number", label = "Session number", choices = var_names, selected = var_names[5]), + selectInput("b_out", label = "Outcome", choices = var_names, selected = var_names[4]), + selectInput("bimprovement", label = "Direction of improvement", choices = c("all increase" = "increase", "all decrease" = "decrease", "by series" = "series")) + ) + } else { + curMap <- exampleMapping[[input$example]] + list( + selectInput("session_number", label = "Session number", choices = var_names, selected = curMap$session_num), + selectInput("b_out", label = "Outcome", choices = var_names, selected = curMap$outcome), + selectInput("bimprovement", label = "Direction of improvement", choices = c("all increase" = "increase", "all decrease" = "decrease", "by series" = "series"), + selected = curMap$direction) + ) + } + + }) + + output$improvementVar <- renderUI({ + var_names <- names(datClean()) + + if (input$dat_type == "dat" || input$dat_type == "xlsx") { + list(selectInput("bseldir", label = "Select variable identifying improvement direction", choices = var_names, selected = var_names[5])) + } else { + curMap <- exampleMapping[[input$example]] + list(selectInput("bseldir", label = "Select variable identifying improvement direction", choices = var_names, selected = curMap$direction_var)) + } + }) + + # Measurement details taken out of the following function - might be useful later + # selectInput("bmeasurementProcedure", label = "Measurement Procedure", + # choices = c("all continuous recording", "all interval recording", "all event counting", "all other", "by series" = "series")), + # conditionalPanel(condition = "input.bmeasurementProcedure == 'series'", + # selectInput("bmeasurementvar", "Select variable identifying measurement procedure", + # choices = var_names)), + # conditionalPanel(condition = "input.bmeasurementProcedure == 'series' | input.bmeasurementProcedure == 'all continuous recording'", + # textInput("bfloor", label = "Optional floor for log-prevalence odds-ratio", value = NA)), + + output$measurementProc <- renderUI({ + + var_names <- names(datClean()) + + if (input$dat_type == "dat" || input$dat_type == "xlsx") { + + list( + selectInput("boutScale", label = "Outcome Scale", + choices = c("all percentage" = "percentage", "all proportion" = "proportion", "all count" = "count", "all rate" = "rate", "all other" = "other", "by series" = "series")), + conditionalPanel(condition = "input.boutScale == 'series'", + selectInput("bscalevar", "Select variable identifying outcome scale", + choices = var_names)), + selectInput("bintervals", label = "Optionally, a variable identifying the number of intervals per observation session.", + choices = c(NA, var_names), selected = NA), + selectInput("bobslength", label = "Optionally, a variable identifying the length of each observation session.", + choices = c(NA, var_names), selected = NA), + numericInput("blrrfloor", label = "Optionally, provide a floor for the log-response or log-odds ratio? Must be greater than or equal to 0.", + value = NA, min = 0) + ) + + } else { + + curMap <- exampleMapping[[input$example]] + list( + selectInput("boutScale", label = "Outcome Scale", + choices = c("all percentage" = "percentage", "all proportion" = "proportion", "all count" = "count", "all rate" = "rate", "all other" = "other", "by series" = "series"), + selected = curMap$scale), + conditionalPanel(condition = "input.boutScale == 'series'", + selectInput("bscalevar", "Select variable identifying outcome scale", + choices = var_names, + selected = (if(!is.null(curMap$scale_var)){curMap$scale_var}else{NA}))), + selectInput("bintervals", label = "Optionally, a variable identifying the number of intervals per observation session.", + choices = c(NA, var_names), selected = curMap$intervals), + selectInput("bobslength", label = "Optionally, a variable identifying the length of each observation session.", + choices = c(NA, var_names), selected = curMap$observation_length), + numericInput("blrrfloor", label = "Optionally, provide a floor for the log-response or log-odds ratio? Must be greater than or equal to 0.", + value = NA, min = 0) + ) + + } + }) + + output$goalLevel <- renderUI({ + + var_names <- names(datClean()) + + if (input$dat_type == "dat" || input$dat_type == "xlsx") { + + list( + selectInput("bgoalLevel", "Set the goal level for PoGO.", + choices = c("common goal" = "commonGoal", "different goals across series" = "goals")), + conditionalPanel(condition = "input.bgoalLevel == 'commonGoal'", + numericInput("bcomgoal", label = "Provide a common goal level across series.", + value = NULL)), + conditionalPanel(condition = "input.bgoalLevel == 'goals'", + selectInput("bgoalvar", "Select variable identifying goal level", + choices = var_names)) + ) + + } else { + + numericInput("bcomgoal", label = "Provide a common goal level across series.", value = NULL) + + } + + }) + + + datClean2 <- reactive({ + dat <- datClean() + + if (input$calcPhasePair) { + grouping_vars <- setdiff(input$b_clusters, "phase_pair_calculated") + session_var <- input$session_number + phase_var <- input$b_phase + + dat <- + dat |> + dplyr::group_by(!!!rlang::syms(grouping_vars)) |> + dplyr::mutate( + phase_pair_calculated = calc_phase_pairs(!!rlang::sym(phase_var), session = !!rlang::sym(session_var)) + ) |> + dplyr::ungroup() |> + as.data.frame() + } + + return(dat) + + }) + + output$datview2 <- renderTable(datClean2()) + + # warning message for outcome scale types + + output$outcomeScale <- renderUI({ + + req(input$boutScale) + + if (input$boutScale == "series") { + scales <- c("count", "rate", "proportion", "percentage", "other") + scale_type <- tolower(unique(datClean2()[[input$bscalevar]])) + wrong_scale_type <- setdiff(scale_type, scales) + + if (length(wrong_scale_type) > 0) { + warning <- paste0("The scale variable contains non-acceptable types: ", paste(wrong_scale_type, collapse = ", "), + ". The acceptable scale types are: count, rate, proportion, percentage, or other.") + list( + strong(style="color:red", warning), + br("") + ) + } else { + NULL + } + } + + }) + + # warning message for improvement direction + + output$improvementDir <- renderUI({ + + req(input$bimprovement) + req(input$bseldir) + + if (input$bimprovement == "series") { + valence_allowed <- c("increase", "decrease") + valence_input <- tolower(unique(datClean2()[[input$bseldir]])) + wrong_valence <- setdiff(valence_input, valence_allowed) + + if (length(wrong_valence) > 0) { + warning <- paste0("The improvement direction variable contains non-acceptable types: ", paste(wrong_valence, collapse = ", "), + ". The acceptable improvement directions are: increase or decrease.") + list( + strong(style="color:red", warning), + br("") + ) + } else { + NULL + } + } + + }) + + # Plot + + output$facetSelector <- renderUI({ + grouping_vars <- input$b_clusters + aggregating_vars <- input$b_aggregate + facet_vars <- c("None", grouping_vars, aggregating_vars) + selectizeInput("bfacetSelector", label = "Display plots for each value of this variable.", + choices = facet_vars, selected = NULL, multiple = FALSE) + }) + + grouping_vars <- reactive({ + setdiff(c(input$b_clusters, input$b_aggregate), input$bfacetSelector) + }) + + output$graph_filters <- renderUI({ + + if (length(grouping_vars()) > 0) { + + grouping_vals <- lapply(grouping_vars(), function(x) sort(unique(datClean2()[[x]]))) + names(grouping_vals) <- grouping_vars() + + header <- strong("Select a value for each grouping variable.") + + grouping_selects <- lapply(grouping_vars(), function(x) + selectizeInput(paste("grouping",x, sep = "_"), label = x, choices = grouping_vals[[x]], + selected = grouping_vals[[x]][1], multiple = FALSE)) + + grouping_selects <- list(header, column(12, br()), grouping_selects) + + grouping_selects + + } + + }) + + # vector of selected filter variables + grouping_selected <- reactive({ + if (length(grouping_vars()) > 0) { + lapply(grouping_vars(), \(x) input[[paste("grouping", x, sep = "_")]]) + } + }) + + # update the filter variable inputs + observeEvent(grouping_selected(), { + n_grouping <- length(grouping_vars()) + if (n_grouping > 0) { + dat <- datClean2() + for (i in 1:n_grouping) { + grp_var <- grouping_vars()[i] + inputId <- paste("grouping", grp_var, sep = "_") + grp_val <- grouping_selected()[[i]] + grouping_vals <- sort(unique(dat[[grp_var]])) + selected_val <- if (!is.null(grp_val) && grp_val %in% grouping_vals) grp_val else grouping_vals[1] + subset_vals <- dat[[grp_var]] == selected_val + dat <- dat[subset_vals,] + if (inputId %in% names(input)) { + updateSelectizeInput(session, inputId = inputId, choices = grouping_vals, selected = selected_val) + } + } + } + }) + + datGraph <- reactive({ + + dat <- datClean2() + + if (!is.null(input$b_clusters) | !is.null(input$b_aggregate)) { + + if (length(grouping_vars()) > 0) { + subset_vals <- sapply(grouping_vars(), function(x) datClean2()[[x]] %in% input[[paste0("grouping_",x)]]) + dat <- dat[apply(subset_vals, 1, all),] + } + + } + + return(dat) + + }) + + + heightPlot <- reactive({ + if (is.null(input$bfacetSelector) || input$bfacetSelector == "None") { + height <- 300 + } else { + height <- 180 * (length(unique(datGraph()[[input$bfacetSelector]]))) + } + }) + + output$batchPlot <- renderPlot({ + + dat <- datGraph() + session_dat <- dat[[input$session_number]] + outcome_dat <- dat[[input$b_out]] + phase_dat <- dat[[input$b_phase]] + phase_code <- if (!is.null(input$b_phase)) unique(phase_dat) else c("A","B") + + if (is.null(input$bfacetSelector) || input$bfacetSelector == "None"){ + + dat_graph <- + data.frame(session = session_dat, outcome = outcome_dat, phase = as.factor(phase_dat)) |> + dplyr::filter(phase %in% c(input$b_base, input$b_treat)) + + phase_change <- + dat_graph |> + dplyr::filter(phase == phase_code[2]) |> + dplyr::mutate(treat_change = suppressWarnings(min(session)) - 0.5) |> + dplyr::select(treat_change) |> + unique() + + } else { + + facet_dat <- dat[[input$bfacetSelector]] + + dat_graph <- + data.frame(facet = facet_dat, session = session_dat, outcome = outcome_dat, phase = as.factor(phase_dat)) |> + dplyr::filter(phase %in% c(input$b_base, input$b_treat)) + + phase_change <- + dat_graph |> + group_by(facet) |> + dplyr::filter(phase == phase_code[2]) |> + dplyr::mutate(treat_change = suppressWarnings(min(session)) - 0.5) |> + dplyr::select(facet, treat_change) |> + unique() + + } + + ggplot(dat_graph, aes(session, outcome, color = phase)) + + geom_point(size = 2) + geom_line() + + {if ("facet" %in% names(dat_graph)) facet_grid(facet ~ .)} + + geom_vline(data = phase_change, aes(xintercept = treat_change), linetype = "dashed") + + scale_color_brewer(type = "qual", palette = 2) + + theme_bw() + theme(legend.position = "bottom") + + }, height = function() heightPlot(), width = function() 700) + + + batchModel <- eventReactive(input$batchest, { + + if (any(input$bESpar %in% c("LRRi", "LRRd", "LOR"))) { + if (input$boutScale == "series") { + scale_val <- as.symbol(input$bscalevar) + } else{ + scale_val <- input$boutScale + } + + intervals <- if (input$bintervals == "NA") NA else input$bintervals + obslength <- if (input$bobslength == "NA") NA else input$bobslength + D_const <- if (is.null(input$blrrfloor)) NA else input$blrrfloor + + } else { + scale_val <- "other" + intervals <- obslength <- D_const <- NA + } + + + if ("PoGO" %in% input$bESpar) { + + if (input$dat_type %in% c("dat", "xlsx")) { + if (input$bgoalLevel == "goals") goal_val <- as.symbol(input$bgoalvar) else goal_val <- input$bcomgoal + } else { + goal_val <- input$bcomgoal + } + + } else { + goal_val <- NULL + } + + + if(input$bimprovement == "series") { + improvement <- as.symbol(input$bseldir) + } else { + improvement <- input$bimprovement + } + + if (input$btau_calculation == "Kendall") { + Kendall <- TRUE + } else { + Kendall <- FALSE + } + + if (input$bbaseline_check == "No") { + pretest_trend <- FALSE + } else { + pretest_trend <- input$bsignificance_level + } + + if (is.null(input$b_aggregate)) { + + batch_calc_ES(dat = datClean2(), + grouping = input$b_clusters, + condition = input$b_phase, + outcome = input$b_out, + session_number = input$session_number, + baseline_phase = input$b_base, + intervention_phase = input$b_treat, + ES = c(input$bESno, input$bESpar), + improvement = improvement, + pct_change = input$b_pct_change, + scale = scale_val, + intervals = intervals, + observation_length = obslength, + D_const = D_const, + goal = goal_val, + std_dev = input$bSMD_denom, + confidence = input$bconfidence / 100, + Kendall = Kendall, + pretest_trend = pretest_trend, + warn = FALSE, + format = input$resultsformat) + + } else{ + + batch_calc_ES(dat = datClean2(), + grouping = input$b_clusters, + condition = input$b_phase, + outcome = input$b_out, + aggregate = input$b_aggregate, + weighting = input$weighting_scheme, + session_number = input$session_number, + baseline_phase = input$b_base, + intervention_phase = input$b_treat, + ES = c(input$bESno, input$bESpar), + improvement = improvement, + pct_change = input$b_pct_change, + scale = scale_val, + intervals = intervals, + observation_length = obslength, + D_const = D_const, + goal = goal_val, + std_dev = input$bSMD_denom, + confidence = input$bconfidence / 100, + Kendall = Kendall, + pretest_trend = pretest_trend, + warn = FALSE, + format = input$resultsformat) + + } + + + + + }) + + output$batchTable <- renderTable(batchModel(), na = "-", digits = function() input$bdigits) + + output$downloadES <- downloadHandler( + filename = "SCD effect size estimates.csv", + content = function(file) { + dat <- batchModel() + write.csv(dat, file, row.names=FALSE, na = "") + }, + contentType = "text/csv" + ) + + #------------------------------ + # Syntax for replication in R + #------------------------------ + + batch_syntax <- reactive({ + header_res <- c( + '# Load packages', + 'library(SingleCaseES)', + '' + ) + + # read in data + if (input$dat_type == "example") { + read_res <- c( + parse_code_chunk("load-example", args = list(example_name = input$example)), + '' + ) + } else if (input$dat_type == "dat") { + inFile <- input$dat + read_res <- c( + parse_code_chunk("load-data", args = list(user_path = inFile$name, user_header = input$header, + user_sep = input$sep, user_quote = input$quote)), + '' + ) + } else if (input$dat_type == "xlsx") { + inFile <- input$xlsx + read_res <- c( + parse_code_chunk("load-excel", args = list(user_path = inFile$name, user_sheet = input$inSelect)), + '' + ) + } + + # filter the data + + filter_vars <- input$filters + filter_vals <- if(length(filter_vars) > 0) lapply(paste0("filter_", filter_vars), + function(x) paste0('"', input[[x]], '"', collapse = ",")) else NULL + filter_vals <- paste0("%in% c(", filter_vals, ")") + filter_string <- paste(input$filters, filter_vals, collapse = " & ") + + if (!is.null(input$filters)) { + clean_dat <- c( + parse_code_chunk("dat-filter", args = list(user_filterString = filter_string)), + '' + ) + } else { + clean_dat <- c() + } + + # clean the data + if (input$calcPhasePair) { + grouping_vars <- setdiff(input$b_clusters, "phase_pair_calculated") + grouping <- paste(grouping_vars, collapse=', ') + + condition <- input$b_phase + session_number <- input$session_number + + clean_dat <- c(clean_dat, + parse_code_chunk("dat-clean", + args = list(user_grouping = grouping, + user_condition = condition, + user_session_number = session_number)), + '' + ) + } + + + # batch calculation + if (any(input$bESpar %in% c("LRRi", "LRRd", "LOR"))) { + + scale_val <- switch(input$boutScale, + "series" = paste0("\n scale = ", as.symbol(input$bscalevar), ","), + "percentage" = '\n scale = "percentage",', + "proportion" = '\n scale = "proportion",', + "count" = '\n scale = "count",', + "rate" = '\n scale = "rate",', + "other" = '\n scale = "other",', + c() + ) + + intervals <- if (input$bintervals == "NA") NA else input$bintervals + obslength <- if (input$bobslength == "NA") NA else input$bobslength + D_const <- if (is.null(input$blrrfloor)) NA else input$blrrfloor + + } else { + # scale_val <- "other" + scale_val <- '\n scale = "other",' + intervals <- obslength <- D_const <- NA + } + + + if ("PoGO" %in% input$bESpar) { + if (input$dat_type %in% c("dat", "xlsx")) { + goal_val <- switch(input$bgoalLevel, + "goals" = paste0(as.symbol(input$bgoalvar)), + "commonGoal" = input$bcomgoal, + c()) + } else { + goal_val <- input$bcomgoal + } + + } else { + goal_val <- "NULL" + + } + + + improvement <- switch(input$bimprovement, + "series" = paste0("\n improvement = ", as.symbol(input$bseldir), ","), + "increase" = '\n improvement = "increase",', + "decrease" = '\n improvement = "decrease",', + c() + ) + + if (input$btau_calculation == "Kendall") { + Kendall <- TRUE + } else { + Kendall <- FALSE + } + + if (input$bbaseline_check == "No") { + pretest_trend <- FALSE + } else { + pretest_trend <- input$bsignificance_level + } + + grouping <- paste0('c(', paste(input$b_clusters, collapse=', '), ')') + condition <- input$b_phase + outcome <- input$b_out + aggregate <- paste0('c(', paste(input$b_aggregate, collapse=', '), ')') + weighting <- input$weighting_scheme + session_number <- input$session_number + baseline_phase <- input$b_base + intervention_phase <- input$b_treat + ES <- paste0('c("', paste(c(input$bESno, input$bESpar), collapse='", "'), '")') + pct_change <- input$b_pct_change + intervals <- intervals + obslength <- obslength + D_const <- D_const + goal <- goal_val + std_dev <- input$bSMD_denom + confidence <- input$bconfidence / 100 + Kendall <- Kendall + pretest_trend <- pretest_trend + format <- input$resultsformat + + if (is.null(input$b_aggregate)) { + output_res <- + c( + parse_code_chunk("bcalc-noaggregate-inputdata", + args = list(user_grouping = grouping, + user_condition = condition, + user_outcome = outcome, + user_session_number = session_number, + user_baseline_phase = baseline_phase, + user_intervention_phase = intervention_phase, + user_ES = ES, + user_improvement = improvement, + user_pct_change = pct_change, + user_scale = scale_val, + user_intervals = intervals, + user_obslength = obslength, + user_D_const = D_const, + user_goal = goal, + user_std_dev = std_dev, + user_confidence = confidence, + user_Kendall = Kendall, + user_pretest_trend = pretest_trend, + user_format = format)), + '') + } else { + output_res <- + c( + parse_code_chunk("bcalc-aggregate-inputdata", + args = list(user_grouping = grouping, + user_condition = condition, + user_outcome = outcome, + user_aggregate = aggregate, + user_weighting = weighting, + user_session_number = session_number, + user_baseline_phase = baseline_phase, + user_intervention_phase = intervention_phase, + user_ES = ES, + user_improvement = improvement, + user_pct_change = pct_change, + user_scale = scale_val, + user_intervals = intervals, + user_obslength = obslength, + user_D_const = D_const, + user_goal = goal, + user_std_dev = std_dev, + user_confidence = confidence, + user_Kendall = Kendall, + user_pretest_trend = pretest_trend, + user_format = format)), + '') + } + + res <- c(header_res, '', read_res, '', clean_dat, '', output_res) + paste(res, collapse = "\n") + }) + + output$syntax <- renderPrint({ + cat(batch_syntax(), sep = "\n") + }) + + output$clip <- renderUI({ + rclipboard::rclipButton("clipbtn", "Copy", batch_syntax(), modal = FALSE, icon = icon("clipboard"), + tooltip = "Click me to copy the code to your clipboard!",) + }) + + session$onSessionEnded(function() { + stopApp() + }) + +} + +ui <- navbarPage(title = "Single-case effect size calculator", + id = "SCD_es_calculator", + tabPanel("About", + navlistPanel(widths = c(3,9), + tabPanel("About", + includeMarkdown("markdown/About.md")), + tabPanel("Accessing the calculator", + includeMarkdown("markdown/Accessing.md")), + tabPanel("Using the single-series calculator", + includeMarkdown("markdown/using_single_series.md")), + tabPanel("Using the multiple-series calculator", + includeMarkdown("markdown/using_multiple_series.md")), + tabPanel("Example data", + includeMarkdown("markdown/example-data.md")) + )), + tabPanel("Single-Series Calculator", + fluidRow(column(12, + h3("Data input"), + h5("Enter data values, separated by commas, spaces, or tabs.") + ) + ), + fluidRow( + column(4, + textInput("A_dat", label = "Phase A", value = "") + ), + column(4, + textInput("B_dat", label = "Phase B", value = "") + ), + column(4, + checkboxInput("toggleSinglePlot","Show graph", value = FALSE) + ) + ), + conditionalPanel(condition = "input.toggleSinglePlot", + fluidRow( + column(12, + plotOutput('SCDplot', height = "300px") + ) + )), + fluidRow( + hr(), + column(4, + h3("Effect sizes") + ), + column(8, + h3(textOutput("ES_name")) + ) + ), + sidebarLayout( + sidebarPanel(width = 4, + tabsetPanel(id = "ES_family", type = "pills", + tabPanel("Non-overlap", + br(), + selectInput("NOM_ES", + label = "Effect size index", + choices = c("IRD", + "NAP", + "PAND", + "PEM", + "PND", + "Tau", + "Tau-BC" = "Tau_BC", + "Tau-U" = "Tau_U"), + selected = "NAP") + ), + tabPanel("Parametric", + br(), + selectInput("parametric_ES", + label = "Effect size index", + choices = c("LOR", "LRRd", "LRRi", "LRM", "PoGO", "SMD"), + selected = "LRRd"), + conditionalPanel(condition = "input.parametric_ES=='LRRi'|input.parametric_ES=='LRRd'", + checkboxInput("pct_change","Convert LRR to % change")), + conditionalPanel(condition = "input.parametric_ES=='PoGO'", + numericInput("goal_level", + label = "Goal level for the behavior", + value = NULL)) + ) + ), + selectInput("improvement", + label = "Direction of improvement", + choices = c("increase", "decrease")), + conditionalPanel(condition = "input.ES_family=='Non-overlap' & input.NOM_ES == 'Tau_BC'", + radioButtons("tau_calculation", + label = "Choose a method for calculating Tau index", + choices = c("Tau (non-overlap)" = "Nlap", + "Kendall rank correlation" = "Kendall")) + ), + conditionalPanel(condition = "input.ES_family=='Non-overlap' & input.NOM_ES == 'Tau_BC'", + radioButtons("baseline_check", + label = "Test for baseline trend", + choices = c("Always adjust for baseline trend" = "No", + "Pretest for baseline trend, adjust if significant" = "Yes")) + ), + conditionalPanel(condition = "input.ES_family=='Non-overlap' & + input.NOM_ES == 'Tau_BC' & input.baseline_check == 'Yes'", + numericInput("significance_level", + label = "Significance level for the initial baseline trend test", + value = 0.05, step = .01, + min = 0.01, + max = 0.99) + ), + conditionalPanel("input.ES_family=='Parametric'", + conditionalPanel(condition = "input.parametric_ES == 'SMD'", + radioButtons("SMD_denom", + label = "Standardized by", + choices = c("baseline SD","pooled SD"))), + conditionalPanel(condition = "input.parametric_ES=='LOR'|input.parametric_ES=='LRRi'|input.parametric_ES=='LRRd'", + selectInput("outScale", label = "Outcome Scale", + choices = c("percentage", + "proportion", + "count", + "rate", + "other")), + numericInput("intervals", label = "If observed via interval recording, total intervals per session", value = NULL)), + conditionalPanel(condition = "input.parametric_ES=='LRRi'|input.parametric_ES=='LRRd'", + numericInput("obslength", label = "Session length (in minutes)", value = NULL)), + conditionalPanel(condition = "input.parametric_ES=='LOR'|input.parametric_ES=='LRRi'|input.parametric_ES=='LRRd'", + numericInput("lrrfloor", label = "User-specified floor constant",value = NULL)) + ), + conditionalPanel(condition = "input.ES_family=='Parametric'|input.NOM_ES=='NAP'|input.NOM_ES=='Tau'|input.NOM_ES=='Tau_BC'", + numericInput("confidence", + label = "Confidence level", + value = 95, + min = 0, + max = 100) + ), + numericInput("digits","Digits", + value = 2, min = 1, + max = 16, step = 1) + ), + mainPanel(width = 8, + conditionalPanel(condition = "input.ES_family=='Non-overlap' & input.NOM_ES == 'PND'", + includeMarkdown("markdown/PND-message.md")), + htmlOutput("result"), + checkboxInput("explanation", + label = "Show methods and references", + value = FALSE), + conditionalPanel("input.explanation==true", + conditionalPanel("input.ES_family=='Non-overlap'", + conditionalPanel("input.NOM_ES == 'IRD'", withMathJax(includeMarkdown("markdown/IRD.md"))), + conditionalPanel("input.NOM_ES == 'NAP'", withMathJax(includeMarkdown("markdown/NAP.md"))), + conditionalPanel("input.NOM_ES == 'PAND'", withMathJax(includeMarkdown("markdown/PAND.md"))), + conditionalPanel("input.NOM_ES == 'PEM'", withMathJax(includeMarkdown("markdown/PEM.md"))), + conditionalPanel("input.NOM_ES == 'PND'", withMathJax(includeMarkdown("markdown/PND.md"))), + conditionalPanel("input.NOM_ES == 'Tau'", withMathJax(includeMarkdown("markdown/Tau.md"))), + conditionalPanel("input.NOM_ES == 'Tau_BC'", withMathJax(includeMarkdown("markdown/Tau-BC.md"))), + conditionalPanel("input.NOM_ES == 'Tau_U'", withMathJax(includeMarkdown("markdown/Tau-U.md"))) + ), + conditionalPanel("input.ES_family=='Parametric'", + conditionalPanel("input.parametric_ES == 'LRRi'|input.parametric_ES == 'LRRd'", withMathJax(includeMarkdown("markdown/LRR.md"))), + conditionalPanel("input.parametric_ES == 'LRM'", withMathJax(includeMarkdown("markdown/LRM.md"))), + conditionalPanel("input.parametric_ES == 'SMD'", withMathJax(includeMarkdown("markdown/SMD.md"))), + conditionalPanel("input.parametric_ES == 'LOR'", withMathJax(includeMarkdown("markdown/LOR.md"))), + conditionalPanel("input.parametric_ES == 'PoGO'", withMathJax(includeMarkdown("markdown/PoGO.md"))) + ) + ) + ) + + ) + ), + tabPanel("Multiple-Series Calculator", + tabsetPanel( + id = "BatchEntryTabs", + tabPanel("Data", + sidebarLayout(sidebarPanel(radioButtons('dat_type', 'What data do you want to use?', + c("Use an example" = "example", + "Upload data from a .csv or .txt file" = "dat", + "Upload data from a .xlsx file" = "xlsx")), + conditionalPanel( + condition = "input.dat_type == 'example'", + selectInput("example", label = "Choose an example", + choices = example_list) + ), + conditionalPanel( + condition = "input.dat_type == 'dat'", + fileInput('dat', 'Upload a .csv or .txt file', accept=c('text/csv', 'text/comma-separated-values,text/plain', '.csv', '.txt')), + checkboxInput('header', 'File has a header?', TRUE), + radioButtons('sep', 'Data seperator', c(Commas=',', Semicolons=';', Tabs='\t', Spaces=' '), inline = TRUE), + radioButtons('quote', 'Include quotes?', c('No'='', 'Double Quotes'='"', 'Single Quotes'="'"), inline = TRUE) + ), + conditionalPanel( + condition = "input.dat_type == 'xlsx'", + fileInput('xlsx', 'Upload a .xlsx file', accept = c('.xlsx')), + checkboxInput('col_names', 'File has a header?', TRUE), + selectInput("inSelect", "Select a sheet", "") + ), + uiOutput("filtervarMapping"), + uiOutput("filterMapping") + ), + mainPanel(tableOutput("datview"))) + ), + tabPanel("Variables", + sidebarLayout( + sidebarPanel( + style = "max-height: 1200px; overflow-y: auto", + conditionalPanel(condition = "input.dat_type == 'dat' | input.dat_type == 'xlsx'", + checkboxInput("calcPhasePair", "Calculate phase pair numbers for ABAB designs.", value = FALSE)), + uiOutput("clusterPhase"), + uiOutput("baseDefine"), + uiOutput("treatDefine"), + uiOutput("outOrderImp"), + conditionalPanel(condition = "input.bimprovement == 'series'", + uiOutput("improvementVar")), + conditionalPanel(condition = "input.bimprovement == 'series'", + uiOutput("improvementDir")), + br(), + br(), + br() + ), + mainPanel(tableOutput("datview2")) + ) + ), + tabPanel("Plot", + sidebarLayout( + sidebarPanel( + style = "max-height: 800px; overflow-y: auto", + uiOutput("facetSelector"), + uiOutput("graph_filters"), + br(), + br(), + br(), + br() + ), + mainPanel(plotOutput('batchPlot', height = "auto")) + ) + + ), + tabPanel("Estimate", + sidebarLayout( + sidebarPanel( + h4("Select Effect Sizes"), + checkboxGroupInput("bESno", "Non-Overlap Effect Sizes", choices = c("IRD","NAP","PAND","PEM","PND","Tau","Tau-BC" = "Tau_BC","Tau-U" = "Tau_U"), inline = TRUE), + checkboxGroupInput("bESpar", "Parametric Effect Sizes", choices = c("LOR", "LRRd", "LRRi", "LRM", "PoGO", "SMD"), inline = TRUE), + conditionalPanel(condition = "input.bESno.includes('Tau_BC')", + radioButtons("btau_calculation", label = "Choose a method for calculating Tau index", + choices = c("Tau (non-overlap)" = "Nlap", + "Kendall rank correlation" = "Kendall"), + inline = TRUE)), + conditionalPanel(condition = "input.bESno.includes('Tau_BC')", + radioButtons("bbaseline_check", label = "Use baseline trend test for Tau-BC?", + choices = c("Always adjusting for baseline trend" = "No", + "Pretest for baseline trend, adjust if significant" = "Yes"), + inline = FALSE)), + conditionalPanel(condition = "input.bESno.includes('Tau_BC') & input.bbaseline_check == 'Yes'", + numericInput("bsignificance_level", + label = "Significance level for the baseline trend test", + value = 0.05, step = .01, + min = 0.01, + max = 0.99)), + conditionalPanel(condition = "input.bESpar.includes('LRRi') | input.bESpar.includes('LRRd') | input.bESpar.includes('LOR')", + checkboxInput("b_pct_change", "Convert LRR to % change")), + conditionalPanel(condition = "input.bESpar.includes('LOR')", + strong(style="color:orange","LOR will only be calculated for outcomes measured as percentages or proportions."), + br("")), + conditionalPanel(condition = "input.bESpar.includes('SMD')", + radioButtons("bSMD_denom", label = "Standardize SMD ", + choices = c("baseline SD" = "baseline", "pooled SD" = "pool"), inline = TRUE)), + conditionalPanel(condition = "input.bESpar.includes('LRRi') | input.bESpar.includes('LRRd') | input.bESpar.includes('LOR')", + uiOutput("outcomeScale")), + conditionalPanel(condition = "input.bESpar.includes('LRRi') | input.bESpar.includes('LRRd') | input.bESpar.includes('LOR')", + uiOutput("measurementProc")), + conditionalPanel(condition = "input.bESpar.includes('PoGO')", uiOutput("goalLevel")), + conditionalPanel(condition = "input.b_aggregate != ''", + radioButtons('weighting_scheme', + label = "Weighting scheme to use for aggregating.", + choices = c("equal", "1/V", "nA", "nB", "nA*nB", "1/nA + 1/nB")) + ), + numericInput("bconfidence", label = "Confidence level (for any effect size with standard errors)", value = 95, min = 0, max = 100), + numericInput("bdigits","Digits", + value = 2, min = 1, + max = 16, step = 1), + radioButtons("resultsformat", "Long or wide format?", c("Long" = "long", "Wide" = "wide"), inline = TRUE), + conditionalPanel(condition = "input.bESpar.length > 0 || input.bESno.length > 0", + actionButton("batchest", "Estimate")) + ), + + mainPanel( + conditionalPanel(condition = "input.bESno.includes('PND')", + includeMarkdown("markdown/PND-message.md")), + tableOutput("batchTable"), + p(), + conditionalPanel(condition = "input.batchest > 0", + downloadButton("downloadES", label = "Download results")) + ) + ) + + ), + tabPanel("Syntax for R", + rclipboard::rclipboardSetup(), + uiOutput("clip"), + verbatimTextOutput("syntax") + ) + ) + + )) + +shinyApp(ui = ui, server = server) diff --git a/inst/shiny-examples/SCD-effect-sizes/code-chunks/bcalc-aggregate-inputdata.R b/inst/shiny-examples/SCD-effect-sizes/code-chunks/bcalc-aggregate-inputdata.R deleted file mode 100644 index 1ab40495..00000000 --- a/inst/shiny-examples/SCD-effect-sizes/code-chunks/bcalc-aggregate-inputdata.R +++ /dev/null @@ -1,24 +0,0 @@ -# Batch calculation -res <- batch_calc_ES( - dat = dat, - grouping = {user_grouping}, - condition = {user_condition}, - outcome = {user_outcome}, - aggregate = {user_aggregate}, - weighting = "{user_weighting}", - session_number = {user_session_number}, - baseline_phase = "{user_baseline_phase}", - intervention_phase = "{user_intervention_phase}", - ES = {user_ES},{user_improvement} - pct_change = {user_pct_change},{user_scale} - intervals = {user_intervals}, - observation_length = {user_obslength}, - D_const = {user_D_const}, - goal = {user_goal}, - std_dev = "{user_std_dev}", - confidence = {user_confidence}, - Kendall = {user_Kendall}, - pretest_trend = {user_pretest_trend}, - format = "{user_format}" -) - diff --git a/inst/shiny-examples/SCD-effect-sizes/code-chunks/bcalc-noaggregate-inputdata.R b/inst/shiny-examples/SCD-effect-sizes/code-chunks/bcalc-noaggregate-inputdata.R deleted file mode 100644 index eb3e4bbc..00000000 --- a/inst/shiny-examples/SCD-effect-sizes/code-chunks/bcalc-noaggregate-inputdata.R +++ /dev/null @@ -1,21 +0,0 @@ -# Batch calculation -res <- batch_calc_ES( - dat = dat, - grouping = {user_grouping}, - condition = {user_condition}, - outcome = {user_outcome}, - session_number = {user_session_number}, - baseline_phase = "{user_baseline_phase}", - intervention_phase = "{user_intervention_phase}", - ES = {user_ES},{user_improvement} - pct_change = {user_pct_change},{user_scale} - intervals = {user_intervals}, - observation_length = {user_obslength}, - D_const = {user_D_const}, - goal = {user_goal}, - std_dev = "{user_std_dev}", - confidence = {user_confidence}, - Kendall = {user_Kendall}, - pretest_trend = {user_pretest_trend}, - format = "{user_format}" -) diff --git a/inst/shiny-examples/SCD-effect-sizes/code-chunks/dat-clean.R b/inst/shiny-examples/SCD-effect-sizes/code-chunks/dat-clean.R deleted file mode 100644 index 10989aa9..00000000 --- a/inst/shiny-examples/SCD-effect-sizes/code-chunks/dat-clean.R +++ /dev/null @@ -1,11 +0,0 @@ -# clean data -library(dplyr) - -dat <- - dat %>% - group_by({user_grouping}) %>% - mutate( - phase_pair_calculated = calc_phase_pairs({user_condition}, session = {user_session_number}) - ) %>% - ungroup() - diff --git a/inst/shiny-examples/SCD-effect-sizes/code-chunks/dat-filter.R b/inst/shiny-examples/SCD-effect-sizes/code-chunks/dat-filter.R deleted file mode 100644 index 51df96ef..00000000 --- a/inst/shiny-examples/SCD-effect-sizes/code-chunks/dat-filter.R +++ /dev/null @@ -1,2 +0,0 @@ -# filter data -dat <- subset(dat, {user_filterString}) diff --git a/inst/shiny-examples/SCD-effect-sizes/code-chunks/load-data.R b/inst/shiny-examples/SCD-effect-sizes/code-chunks/load-data.R deleted file mode 100644 index 72b32ed5..00000000 --- a/inst/shiny-examples/SCD-effect-sizes/code-chunks/load-data.R +++ /dev/null @@ -1,13 +0,0 @@ -# Load data -library(janitor) - -dat <- - read.table( - "{user_path}", - header = {user_header}, - sep = "{user_sep}", - quote = '{user_quote}', - stringsAsFactors = FALSE, - check.names = FALSE - ) |> # Modify the path to the full location of your file - clean_names(case = "parsed") diff --git a/inst/shiny-examples/SCD-effect-sizes/code-chunks/load-example.R b/inst/shiny-examples/SCD-effect-sizes/code-chunks/load-example.R deleted file mode 100644 index 76b8de03..00000000 --- a/inst/shiny-examples/SCD-effect-sizes/code-chunks/load-example.R +++ /dev/null @@ -1,3 +0,0 @@ -# Load data -data({example_name}) -dat <- {example_name} diff --git a/inst/shiny-examples/SCD-effect-sizes/code-chunks/load-excel.R b/inst/shiny-examples/SCD-effect-sizes/code-chunks/load-excel.R deleted file mode 100644 index 0972cf8b..00000000 --- a/inst/shiny-examples/SCD-effect-sizes/code-chunks/load-excel.R +++ /dev/null @@ -1,7 +0,0 @@ -# Load data -library(readxl) -library(janitor) - -dat <- - read_excel(path = "{user_path}", sheet = "{user_sheet}") |> # Modify the path to the full location of your file - clean_names(case = "parsed") diff --git a/inst/shiny-examples/SCD-effect-sizes/manifest.json b/inst/shiny-examples/SCD-effect-sizes/manifest.json new file mode 100644 index 00000000..b6b0dd64 --- /dev/null +++ b/inst/shiny-examples/SCD-effect-sizes/manifest.json @@ -0,0 +1,2423 @@ +{ + "version": 1, + "locale": "en_US", + "platform": "4.4.2", + "metadata": { + "appmode": "shiny", + "primary_rmd": null, + "primary_html": null, + "content_category": null, + "has_parameters": false + }, + "packages": { + "Kendall": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "Kendall", + "Version": "2.2.2", + "Date": "2011-05-16", + "Title": "Kendall Rank Correlation and Mann-Kendall Trend Test", + "Authors@R": "person(given = \"A.I.\",\n family = \"McLeod\",\n role = c(\"aut\", \"cre\"),\n email = \"aimcleod@uwo.ca\")", + "Depends": "R (>= 2.1.0)", + "Description": "Computes the Kendall rank correlation and Mann-Kendall\n trend test. See documentation for use of block bootstrap when\n there is autocorrelation.", + "Imports": "boot", + "LazyLoad": "yes", + "LazyData": "yes", + "Classification/ACM": "G.3, G.4, I.5.1", + "Classification/MSC": "62M10, 91B84", + "License": "GPL (>= 2)", + "URL": "http://www.stats.uwo.ca/faculty/aim", + "Repository": "CRAN", + "Date/Publication": "2025-12-22 19:42:50 UTC", + "Packaged": "2025-12-22 19:24:29 UTC; hornik", + "NeedsCompilation": "yes", + "Author": "A.I. McLeod [aut, cre]", + "Maintainer": "A.I. McLeod ", + "Built": "R 4.4.3; aarch64-apple-darwin20; 2025-12-23 00:11:43 UTC; unix", + "Archs": "Kendall.so.dSYM" + } + }, + "MASS": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "MASS", + "Priority": "recommended", + "Version": "7.3-61", + "Date": "2024-06-10", + "Revision": "$Rev: 3657 $", + "Depends": "R (>= 4.4.0), grDevices, graphics, stats, utils", + "Imports": "methods", + "Suggests": "lattice, nlme, nnet, survival", + "Authors@R": "c(person(\"Brian\", \"Ripley\", role = c(\"aut\", \"cre\", \"cph\"),\n email = \"ripley@stats.ox.ac.uk\"),\n\t person(\"Bill\", \"Venables\", role = c(\"aut\", \"cph\")),\n\t person(c(\"Douglas\", \"M.\"), \"Bates\", role = \"ctb\"),\n\t person(\"Kurt\", \"Hornik\", role = \"trl\",\n comment = \"partial port ca 1998\"),\n\t person(\"Albrecht\", \"Gebhardt\", role = \"trl\",\n comment = \"partial port ca 1998\"),\n\t person(\"David\", \"Firth\", role = \"ctb\",\n\t comment = \"support functions for polr\"))", + "Description": "Functions and datasets to support Venables and Ripley,\n \"Modern Applied Statistics with S\" (4th edition, 2002).", + "Title": "Support Functions and Datasets for Venables and Ripley's MASS", + "LazyData": "yes", + "ByteCompile": "yes", + "License": "GPL-2 | GPL-3", + "URL": "http://www.stats.ox.ac.uk/pub/MASS4/", + "Contact": "", + "NeedsCompilation": "yes", + "Packaged": "2024-06-13 08:23:32 UTC; ripley", + "Author": "Brian Ripley [aut, cre, cph],\n Bill Venables [aut, cph],\n Douglas M. Bates [ctb],\n Kurt Hornik [trl] (partial port ca 1998),\n Albrecht Gebhardt [trl] (partial port ca 1998),\n David Firth [ctb] (support functions for polr)", + "Maintainer": "Brian Ripley ", + "Repository": "CRAN", + "Date/Publication": "2024-06-13 10:23:32", + "Built": "R 4.4.2; aarch64-apple-darwin20; 2024-11-01 00:59:20 UTC; unix" + } + }, + "Matrix": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "Matrix", + "Version": "1.7-1", + "VersionNote": "do also bump src/version.h, inst/include/Matrix/version.h", + "Date": "2024-10-17", + "Priority": "recommended", + "Title": "Sparse and Dense Matrix Classes and Methods", + "Description": "A rich hierarchy of sparse and dense matrix classes,\n\tincluding general, symmetric, triangular, and diagonal matrices\n\twith numeric, logical, or pattern entries. Efficient methods for\n\toperating on such matrices, often wrapping the 'BLAS', 'LAPACK',\n\tand 'SuiteSparse' libraries.", + "License": "GPL (>= 2) | file LICENCE", + "URL": "https://Matrix.R-forge.R-project.org", + "BugReports": "https://R-forge.R-project.org/tracker/?atid=294&group_id=61", + "Contact": "Matrix-authors@R-project.org", + "Authors@R": "\n\tc(person(\"Douglas\", \"Bates\", role = \"aut\",\n\t comment = c(ORCID = \"0000-0001-8316-9503\")),\n\t person(\"Martin\", \"Maechler\", role = c(\"aut\", \"cre\"),\n\t email = \"mmaechler+Matrix@gmail.com\",\n\t comment = c(ORCID = \"0000-0002-8685-9910\")),\n\t person(\"Mikael\", \"Jagan\", role = \"aut\",\n\t comment = c(ORCID = \"0000-0002-3542-2938\")),\n\t person(\"Timothy A.\", \"Davis\", role = \"ctb\",\n\t comment = c(ORCID = \"0000-0001-7614-6899\",\n\t \"SuiteSparse libraries\",\n\t \"collaborators listed in dir(system.file(\\\"doc\\\", \\\"SuiteSparse\\\", package=\\\"Matrix\\\"), pattern=\\\"License\\\", full.names=TRUE, recursive=TRUE)\")),\n\t person(\"George\", \"Karypis\", role = \"ctb\",\n\t comment = c(ORCID = \"0000-0003-2753-1437\",\n\t \"METIS library\",\n\t \"Copyright: Regents of the University of Minnesota\")),\n\t person(\"Jason\", \"Riedy\", role = \"ctb\",\n\t comment = c(ORCID = \"0000-0002-4345-4200\",\n\t \"GNU Octave's condest() and onenormest()\",\n\t \"Copyright: Regents of the University of California\")),\n\t person(\"Jens\", \"Oehlschlägel\", role = \"ctb\",\n\t comment = \"initial nearPD()\"),\n\t person(\"R Core Team\", role = \"ctb\",\n\t comment = \"base R's matrix implementation\"))", + "Depends": "R (>= 4.4.0), methods", + "Imports": "grDevices, graphics, grid, lattice, stats, utils", + "Suggests": "MASS, datasets, sfsmisc, tools", + "Enhances": "SparseM, graph", + "LazyData": "no", + "LazyDataNote": "not possible, since we use data/*.R and our S4 classes", + "BuildResaveData": "no", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Packaged": "2024-10-17 20:22:00 UTC; maechler", + "Author": "Douglas Bates [aut] (),\n Martin Maechler [aut, cre] (),\n Mikael Jagan [aut] (),\n Timothy A. Davis [ctb] (,\n SuiteSparse libraries, collaborators listed in\n dir(system.file(\"doc\", \"SuiteSparse\", package=\"Matrix\"),\n pattern=\"License\", full.names=TRUE, recursive=TRUE)),\n George Karypis [ctb] (, METIS\n library, Copyright: Regents of the University of Minnesota),\n Jason Riedy [ctb] (, GNU\n Octave's condest() and onenormest(), Copyright: Regents of the\n University of California),\n Jens Oehlschlägel [ctb] (initial nearPD()),\n R Core Team [ctb] (base R's matrix implementation)", + "Maintainer": "Martin Maechler ", + "Repository": "CRAN", + "Date/Publication": "2024-10-18 18:10:02 UTC", + "Built": "R 4.4.2; aarch64-apple-darwin20; 2024-11-01 00:59:25 UTC; unix" + } + }, + "R6": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "R6", + "Title": "Encapsulated Classes with Reference Semantics", + "Version": "2.6.1", + "Authors@R": "c(\n person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Creates classes with reference semantics, similar to R's\n built-in reference classes. Compared to reference classes, R6 classes\n are simpler and lighter-weight, and they are not built on S4 classes\n so they do not require the methods package. These classes allow public\n and private members, and they support inheritance, even when the\n classes are defined in different packages.", + "License": "MIT + file LICENSE", + "URL": "https://r6.r-lib.org, https://github.com/r-lib/R6", + "BugReports": "https://github.com/r-lib/R6/issues", + "Depends": "R (>= 3.6)", + "Suggests": "lobstr, testthat (>= 3.0.0)", + "Config/Needs/website": "tidyverse/tidytemplate, ggplot2, microbenchmark,\nscales", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Packaged": "2025-02-14 21:15:19 UTC; winston", + "Author": "Winston Chang [aut, cre],\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Winston Chang ", + "Repository": "CRAN", + "Date/Publication": "2025-02-15 00:50:02 UTC", + "Built": "R 4.4.1; ; 2025-02-15 00:56:23 UTC; unix" + } + }, + "RColorBrewer": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "RColorBrewer", + "Version": "1.1-3", + "Date": "2022-04-03", + "Title": "ColorBrewer Palettes", + "Authors@R": "c(person(given = \"Erich\", family = \"Neuwirth\", role = c(\"aut\",\n \"cre\"), email = \"erich.neuwirth@univie.ac.at\"))", + "Author": "Erich Neuwirth [aut, cre]", + "Maintainer": "Erich Neuwirth ", + "Depends": "R (>= 2.0.0)", + "Description": "Provides color schemes for maps (and other graphics)\n designed by Cynthia Brewer as described at http://colorbrewer2.org.", + "License": "Apache License 2.0", + "Packaged": "2022-04-03 10:26:20 UTC; neuwirth", + "NeedsCompilation": "no", + "Repository": "CRAN", + "Date/Publication": "2022-04-03 19:20:13 UTC", + "Built": "R 4.4.0; ; 2024-04-05 15:01:01 UTC; unix" + } + }, + "Rcpp": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "Rcpp", + "Title": "Seamless R and C++ Integration", + "Version": "1.0.13-1", + "Date": "2024-11-01", + "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\",\n comment = c(ORCID = \"0000-0001-6419-907X\")),\n person(\"Romain\", \"Francois\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-2444-4226\")),\n person(\"JJ\", \"Allaire\", role = \"aut\",\n comment = c(ORCID = \"0000-0003-0174-9868\")),\n person(\"Kevin\", \"Ushey\", role = \"aut\",\n comment = c(ORCID = \"0000-0003-2880-7407\")),\n person(\"Qiang\", \"Kou\", role = \"aut\",\n comment = c(ORCID = \"0000-0001-6786-5453\")),\n person(\"Nathan\", \"Russell\", role = \"aut\"),\n person(\"Iñaki\", \"Ucar\", role = \"aut\",\n comment = c(ORCID = \"0000-0001-6403-5550\")),\n person(\"Doug\", \"Bates\", role = \"aut\",\n comment = c(ORCID = \"0000-0001-8316-9503\")),\n person(\"John\", \"Chambers\", role = \"aut\"))", + "Description": "The 'Rcpp' package provides R functions as well as C++ classes which\n offer a seamless integration of R and C++. Many R data types and objects can be\n mapped back and forth to C++ equivalents which facilitates both writing of new\n code as well as easier integration of third-party libraries. Documentation\n about 'Rcpp' is provided by several vignettes included in this package, via the\n 'Rcpp Gallery' site at , the paper by Eddelbuettel and\n Francois (2011, ), the book by Eddelbuettel (2013,\n ) and the paper by Eddelbuettel and Balamuta (2018,\n ); see 'citation(\"Rcpp\")' for details.", + "Imports": "methods, utils", + "Suggests": "tinytest, inline, rbenchmark, pkgKitten (>= 0.1.2)", + "URL": "https://www.rcpp.org,\nhttps://dirk.eddelbuettel.com/code/rcpp.html,\nhttps://github.com/RcppCore/Rcpp", + "License": "GPL (>= 2)", + "BugReports": "https://github.com/RcppCore/Rcpp/issues", + "MailingList": "rcpp-devel@lists.r-forge.r-project.org", + "RoxygenNote": "6.1.1", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Packaged": "2024-11-01 13:27:07 UTC; edd", + "Author": "Dirk Eddelbuettel [aut, cre] (),\n Romain Francois [aut] (),\n JJ Allaire [aut] (),\n Kevin Ushey [aut] (),\n Qiang Kou [aut] (),\n Nathan Russell [aut],\n Iñaki Ucar [aut] (),\n Doug Bates [aut] (),\n John Chambers [aut]", + "Maintainer": "Dirk Eddelbuettel ", + "Repository": "CRAN", + "Date/Publication": "2024-11-02 20:10:02 UTC", + "Built": "R 4.4.1; aarch64-apple-darwin20; 2024-11-02 21:19:22 UTC; unix", + "Archs": "Rcpp.so.dSYM" + } + }, + "SingleCaseES": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "SingleCaseES", + "Type": "Package", + "Title": "A Calculator for Single-Case Effect Sizes", + "Version": "0.7.3.9999", + "Authors@R": "c(\n person(c(\"James\",\"E.\"), \"Pustejovsky\", email = \"jepusto@gmail.com\", role = c(\"aut\", \"cre\")),\n person(\"Man\", \"Chen\", email = \"manchen9005@gmail.com\", role = \"aut\"),\n person(c(\"Daniel\",\"M.\"), \"Swan\", email = \"dms031000@gmail.com\", role = \"aut\"),\n person(\"Paulina\", \"Grekov\", email = \"grekov.paulina@gmail.com\", role = \"ctb\")\n )", + "Description": "\n Provides R functions for calculating basic effect size indices for \n single-case designs, including several non-overlap measures and parametric \n effect size measures, and for estimating the gradual effects model developed \n by Swan and Pustejovsky (2018) . \n Standard errors and confidence intervals (based on the assumption that the outcome \n measurements are mutually independent) are provided for the subset of effect sizes \n indices with known sampling distributions.", + "URL": "https://jepusto.github.io/SingleCaseES/", + "BugReports": "https://github.com/jepusto/SingleCaseES/issues", + "License": "GPL-3", + "Imports": "stats, purrr, dplyr, tidyr, rlang, tidyselect, utils", + "Suggests": "spelling, shiny, stringr, rvest, xml2, ggplot2, purrrlyr,\ntestthat, markdown, knitr, rmarkdown, cleanrmd, Kendall,\nkableExtra, covr, readxl, glue, janitor, rclipboard", + "LazyData": "TRUE", + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "Language": "en-US", + "VignetteBuilder": "knitr, rmarkdown, cleanrmd", + "NeedsCompilation": "no", + "Packaged": "2026-02-08 20:37:03 UTC; amycai", + "Author": "James E. Pustejovsky [aut, cre],\n Man Chen [aut],\n Daniel M. Swan [aut],\n Paulina Grekov [ctb]", + "Maintainer": "James E. Pustejovsky ", + "Built": "R 4.4.2; ; 2026-02-08 20:37:03 UTC; unix" + } + }, + "base64enc": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "base64enc", + "Version": "0.1-3", + "Title": "Tools for base64 encoding", + "Author": "Simon Urbanek ", + "Maintainer": "Simon Urbanek ", + "Depends": "R (>= 2.9.0)", + "Enhances": "png", + "Description": "This package provides tools for handling base64 encoding. It is more flexible than the orphaned base64 package.", + "License": "GPL-2 | GPL-3", + "URL": "http://www.rforge.net/base64enc", + "NeedsCompilation": "yes", + "Packaged": "2015-02-04 20:31:00 UTC; svnuser", + "Repository": "CRAN", + "Date/Publication": "2015-07-28 08:03:37", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-04-05 15:01:24 UTC; unix", + "Archs": "base64enc.so.dSYM" + } + }, + "boot": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "boot", + "Priority": "recommended", + "Version": "1.3-31", + "Date": "2024-08-28", + "Authors@R": "c(person(\"Angelo\", \"Canty\", role = \"aut\",\n\t email = \"cantya@mcmaster.ca\", \n comment = \"author of original code for S\"),\n person(\"Brian\", \"Ripley\", role = c(\"aut\", \"trl\"),\n email = \"ripley@stats.ox.ac.uk\",\n\t\t comment = \"conversion to R, maintainer 1999--2022, author of parallel support\"),\n person(\"Alessandra R.\", \"Brazzale\", role = c(\"ctb\", \"cre\"),\n email = \"brazzale@stat.unipd.it\",\n\t\t comment = \"minor bug fixes\"))", + "Maintainer": "Alessandra R. Brazzale ", + "Note": "Maintainers are not available to give advice on using a package\nthey did not author.", + "Description": "Functions and datasets for bootstrapping from the\n book \"Bootstrap Methods and Their Application\" by A. C. Davison and \n D. V. Hinkley (1997, CUP), originally written by Angelo Canty for S.", + "Title": "Bootstrap Functions (Originally by Angelo Canty for S)", + "Depends": "R (>= 3.0.0), graphics, stats", + "Suggests": "MASS, survival", + "LazyData": "yes", + "ByteCompile": "yes", + "License": "Unlimited", + "NeedsCompilation": "no", + "Packaged": "2024-08-28 08:17:05 UTC; brazzale", + "Author": "Angelo Canty [aut] (author of original code for S),\n Brian Ripley [aut, trl] (conversion to R, maintainer 1999--2022, author\n of parallel support),\n Alessandra R. Brazzale [ctb, cre] (minor bug fixes)", + "Repository": "CRAN", + "Date/Publication": "2024-08-28 13:20:02 UTC", + "Built": "R 4.4.2; ; 2024-11-01 01:00:07 UTC; unix" + } + }, + "bslib": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "bslib", + "Title": "Custom 'Bootstrap' 'Sass' Themes for 'shiny' and 'rmarkdown'", + "Version": "0.8.0", + "Authors@R": "c(\n person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"),\n person(\"Garrick\", \"Aden-Buie\", , \"garrick@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-7111-0077\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")),\n person(, \"Bootstrap contributors\", role = \"ctb\",\n comment = \"Bootstrap library\"),\n person(, \"Twitter, Inc\", role = \"cph\",\n comment = \"Bootstrap library\"),\n person(\"Javi\", \"Aguilar\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootstrap colorpicker library\"),\n person(\"Thomas\", \"Park\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootswatch library\"),\n person(, \"PayPal\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootstrap accessibility plugin\")\n )", + "Description": "Simplifies custom 'CSS' styling of both 'shiny' and\n 'rmarkdown' via 'Bootstrap' 'Sass'. Supports 'Bootstrap' 3, 4 and 5 as\n well as their various 'Bootswatch' themes. An interactive widget is\n also provided for previewing themes in real time.", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/bslib/, https://github.com/rstudio/bslib", + "BugReports": "https://github.com/rstudio/bslib/issues", + "Depends": "R (>= 2.10)", + "Imports": "base64enc, cachem, fastmap (>= 1.1.1), grDevices, htmltools\n(>= 0.5.8), jquerylib (>= 0.1.3), jsonlite, lifecycle, memoise\n(>= 2.0.1), mime, rlang, sass (>= 0.4.9)", + "Suggests": "bsicons, curl, fontawesome, future, ggplot2, knitr, magrittr,\nrappdirs, rmarkdown (>= 2.7), shiny (> 1.8.1), testthat,\nthematic, withr", + "Config/Needs/deploy": "BH, chiflights22, colourpicker, commonmark, cpp11,\ncpsievert/chiflights22, cpsievert/histoslider, dplyr, DT,\nggplot2, ggridges, gt, hexbin, histoslider, htmlwidgets,\nlattice, leaflet, lubridate, modelr, plotly, reactable,\nreshape2, rprojroot, rsconnect, rstudio/shiny, scales, styler,\ntibble", + "Config/Needs/routine": "chromote, desc, renv", + "Config/Needs/website": "brio, crosstalk, dplyr, DT, ggplot2, glue,\nhtmlwidgets, leaflet, lorem, palmerpenguins, plotly, purrr,\nrprojroot, rstudio/htmltools, scales, stringr, tidyr, webshot2", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Config/testthat/start-first": "zzzz-bs-sass, fonts, zzz-precompile,\ntheme-*, rmd-*", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "Collate": "'accordion.R' 'breakpoints.R' 'bs-current-theme.R'\n'bs-dependencies.R' 'bs-global.R' 'bs-remove.R'\n'bs-theme-layers.R' 'bs-theme-preset-bootswatch.R'\n'bs-theme-preset-builtin.R' 'bs-theme-preset.R' 'utils.R'\n'bs-theme-preview.R' 'bs-theme-update.R' 'bs-theme.R'\n'bslib-package.R' 'buttons.R' 'card.R' 'deprecated.R' 'files.R'\n'fill.R' 'imports.R' 'input-dark-mode.R' 'input-switch.R'\n'layout.R' 'nav-items.R' 'nav-update.R' 'navs-legacy.R'\n'navs.R' 'onLoad.R' 'page.R' 'popover.R' 'precompiled.R'\n'print.R' 'shiny-devmode.R' 'sidebar.R' 'staticimports.R'\n'tooltip.R' 'utils-deps.R' 'utils-shiny.R' 'utils-tags.R'\n'value-box.R' 'version-default.R' 'versions.R'", + "NeedsCompilation": "no", + "Packaged": "2024-07-29 18:49:12 UTC; cpsievert", + "Author": "Carson Sievert [aut, cre] (),\n Joe Cheng [aut],\n Garrick Aden-Buie [aut] (),\n Posit Software, PBC [cph, fnd],\n Bootstrap contributors [ctb] (Bootstrap library),\n Twitter, Inc [cph] (Bootstrap library),\n Javi Aguilar [ctb, cph] (Bootstrap colorpicker library),\n Thomas Park [ctb, cph] (Bootswatch library),\n PayPal [ctb, cph] (Bootstrap accessibility plugin)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN", + "Date/Publication": "2024-07-29 19:20:02 UTC", + "Built": "R 4.4.0; ; 2024-07-29 20:16:48 UTC; unix" + } + }, + "cachem": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "cachem", + "Version": "1.1.0", + "Title": "Cache R Objects with Automatic Pruning", + "Description": "Key-value stores with automatic pruning. Caches can limit\n either their total size or the age of the oldest object (or both),\n automatically pruning objects to maintain the constraints.", + "Authors@R": "c(\n person(\"Winston\", \"Chang\", , \"winston@posit.co\", c(\"aut\", \"cre\")),\n person(family = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")))", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "ByteCompile": "true", + "URL": "https://cachem.r-lib.org/, https://github.com/r-lib/cachem", + "Imports": "rlang, fastmap (>= 1.2.0)", + "Suggests": "testthat", + "RoxygenNote": "7.2.3", + "Config/Needs/routine": "lobstr", + "Config/Needs/website": "pkgdown", + "NeedsCompilation": "yes", + "Packaged": "2024-05-15 15:54:22 UTC; winston", + "Author": "Winston Chang [aut, cre],\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Winston Chang ", + "Repository": "CRAN", + "Date/Publication": "2024-05-16 09:50:11 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-05-16 11:29:46 UTC; unix", + "Archs": "cachem.so.dSYM" + } + }, + "cellranger": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "cellranger", + "Title": "Translate Spreadsheet Cell Ranges to Rows and Columns", + "Version": "1.1.0", + "Authors@R": "c(\n person(\"Jennifer\", \"Bryan\", , \"jenny@stat.ubc.ca\", c(\"cre\", \"aut\")),\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", \"ctb\")\n )", + "Description": "Helper functions to work with spreadsheets and the \"A1:D10\" style\n of cell range specification.", + "Depends": "R (>= 3.0.0)", + "License": "MIT + file LICENSE", + "LazyData": "true", + "URL": "https://github.com/rsheets/cellranger", + "BugReports": "https://github.com/rsheets/cellranger/issues", + "Suggests": "covr, testthat (>= 1.0.0), knitr, rmarkdown", + "RoxygenNote": "5.0.1.9000", + "VignetteBuilder": "knitr", + "Imports": "rematch, tibble", + "NeedsCompilation": "no", + "Packaged": "2016-07-26 06:50:00 UTC; jenny", + "Author": "Jennifer Bryan [cre, aut],\n Hadley Wickham [ctb]", + "Maintainer": "Jennifer Bryan ", + "Repository": "CRAN", + "Date/Publication": "2016-07-27 03:17:48", + "Built": "R 4.4.0; ; 2024-04-06 09:14:34 UTC; unix" + } + }, + "cli": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "cli", + "Title": "Helpers for Developing Command Line Interfaces", + "Version": "3.6.5", + "Authors@R": "c(\n person(\"Gábor\", \"Csárdi\", , \"gabor@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Hadley\", \"Wickham\", role = \"ctb\"),\n person(\"Kirill\", \"Müller\", role = \"ctb\"),\n person(\"Salim\", \"Brüggemann\", , \"salim-b@pm.me\", role = \"ctb\",\n comment = c(ORCID = \"0000-0002-5329-5987\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "A suite of tools to build attractive command line interfaces\n ('CLIs'), from semantic elements: headings, lists, alerts, paragraphs,\n etc. Supports custom themes via a 'CSS'-like language. It also\n contains a number of lower level 'CLI' elements: rules, boxes, trees,\n and 'Unicode' symbols with 'ASCII' alternatives. It support ANSI\n colors and text styles as well.", + "License": "MIT + file LICENSE", + "URL": "https://cli.r-lib.org, https://github.com/r-lib/cli", + "BugReports": "https://github.com/r-lib/cli/issues", + "Depends": "R (>= 3.4)", + "Imports": "utils", + "Suggests": "callr, covr, crayon, digest, glue (>= 1.6.0), grDevices,\nhtmltools, htmlwidgets, knitr, methods, processx, ps (>=\n1.3.4.9000), rlang (>= 1.0.2.9003), rmarkdown, rprojroot,\nrstudioapi, testthat (>= 3.2.0), tibble, whoami, withr", + "Config/Needs/website": "r-lib/asciicast, bench, brio, cpp11, decor, desc,\nfansi, prettyunits, sessioninfo, tidyverse/tidytemplate,\nusethis, vctrs", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "yes", + "Packaged": "2025-04-22 12:00:18 UTC; gaborcsardi", + "Author": "Gábor Csárdi [aut, cre],\n Hadley Wickham [ctb],\n Kirill Müller [ctb],\n Salim Brüggemann [ctb] (),\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Gábor Csárdi ", + "Repository": "CRAN", + "Date/Publication": "2025-04-23 13:50:02 UTC", + "Built": "R 4.4.1; aarch64-apple-darwin20; 2025-04-23 13:53:05 UTC; unix", + "Archs": "cli.so.dSYM" + } + }, + "colorspace": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "colorspace", + "Version": "2.1-1", + "Date": "2024-07-26", + "Title": "A Toolbox for Manipulating and Assessing Colors and Palettes", + "Authors@R": "c(person(given = \"Ross\", family = \"Ihaka\", role = \"aut\", email = \"ihaka@stat.auckland.ac.nz\"),\n person(given = \"Paul\", family = \"Murrell\", role = \"aut\", email = \"paul@stat.auckland.ac.nz\",\n comment = c(ORCID = \"0000-0002-3224-8858\")),\n person(given = \"Kurt\", family = \"Hornik\", role = \"aut\", email = \"Kurt.Hornik@R-project.org\",\n\t\t comment = c(ORCID = \"0000-0003-4198-9911\")),\n person(given = c(\"Jason\", \"C.\"), family = \"Fisher\", role = \"aut\", email = \"jfisher@usgs.gov\",\n comment = c(ORCID = \"0000-0001-9032-8912\")),\n person(given = \"Reto\", family = \"Stauffer\", role = \"aut\", email = \"Reto.Stauffer@uibk.ac.at\",\n comment = c(ORCID = \"0000-0002-3798-5507\")),\n person(given = c(\"Claus\", \"O.\"), family = \"Wilke\", role = \"aut\", email = \"wilke@austin.utexas.edu\",\n comment = c(ORCID = \"0000-0002-7470-9261\")),\n person(given = c(\"Claire\", \"D.\"), family = \"McWhite\", role = \"aut\", email = \"claire.mcwhite@utmail.utexas.edu\",\n comment = c(ORCID = \"0000-0001-7346-3047\")),\n person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\",\n comment = c(ORCID = \"0000-0003-0918-3766\")))", + "Description": "Carries out mapping between assorted color spaces including RGB, HSV, HLS,\n CIEXYZ, CIELUV, HCL (polar CIELUV), CIELAB, and polar CIELAB.\n\t Qualitative, sequential, and diverging color palettes based on HCL colors\n\t are provided along with corresponding ggplot2 color scales.\n\t Color palette choice is aided by an interactive app (with either a Tcl/Tk\n\t or a shiny graphical user interface) and shiny apps with an HCL color picker and a\n\t color vision deficiency emulator. Plotting functions for displaying\n\t and assessing palettes include color swatches, visualizations of the\n\t HCL space, and trajectories in HCL and/or RGB spectrum. Color manipulation\n\t functions include: desaturation, lightening/darkening, mixing, and\n\t simulation of color vision deficiencies (deutanomaly, protanomaly, tritanomaly).\n\t Details can be found on the project web page at \n\t and in the accompanying scientific paper: Zeileis et al. (2020, Journal of Statistical\n\t Software, ).", + "Depends": "R (>= 3.0.0), methods", + "Imports": "graphics, grDevices, stats", + "Suggests": "datasets, utils, KernSmooth, MASS, kernlab, mvtnorm, vcd,\ntcltk, shiny, shinyjs, ggplot2, dplyr, scales, grid, png, jpeg,\nknitr, rmarkdown, RColorBrewer, rcartocolor, scico, viridis,\nwesanderson", + "VignetteBuilder": "knitr", + "License": "BSD_3_clause + file LICENSE", + "URL": "https://colorspace.R-Forge.R-project.org/, https://hclwizard.org/", + "BugReports": "https://colorspace.R-Forge.R-project.org/contact.html", + "LazyData": "yes", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.1", + "NeedsCompilation": "yes", + "Packaged": "2024-07-26 15:40:41 UTC; zeileis", + "Author": "Ross Ihaka [aut],\n Paul Murrell [aut] (),\n Kurt Hornik [aut] (),\n Jason C. Fisher [aut] (),\n Reto Stauffer [aut] (),\n Claus O. Wilke [aut] (),\n Claire D. McWhite [aut] (),\n Achim Zeileis [aut, cre] ()", + "Maintainer": "Achim Zeileis ", + "Repository": "CRAN", + "Date/Publication": "2024-07-26 17:10:02 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-07-26 20:13:47 UTC; unix", + "Archs": "colorspace.so.dSYM" + } + }, + "commonmark": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "commonmark", + "Type": "Package", + "Title": "High Performance CommonMark and Github Markdown Rendering in R", + "Version": "2.0.0", + "Authors@R": "c(\n person(\"Jeroen\", \"Ooms\", ,\"jeroenooms@gmail.com\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-4035-0289\")),\n person(\"John MacFarlane\", role = \"cph\", comment = \"Author of cmark\"))", + "Description": "The CommonMark specification defines\n a rationalized version of markdown syntax. This package uses the 'cmark' \n reference implementation for converting markdown text into various formats\n including html, latex and groff man. In addition it exposes the markdown\n parse tree in xml format. Also includes opt-in support for GFM extensions\n including tables, autolinks, and strikethrough text.", + "License": "BSD_2_clause + file LICENSE", + "URL": "https://docs.ropensci.org/commonmark/\nhttps://ropensci.r-universe.dev/commonmark", + "BugReports": "https://github.com/r-lib/commonmark/issues", + "Suggests": "curl, testthat, xml2", + "RoxygenNote": "7.3.2", + "Language": "en-US", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Packaged": "2025-07-07 13:20:39 UTC; jeroen", + "Author": "Jeroen Ooms [aut, cre] (ORCID: ),\n John MacFarlane [cph] (Author of cmark)", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN", + "Date/Publication": "2025-07-07 13:40:02 UTC", + "Built": "R 4.4.1; aarch64-apple-darwin20; 2025-07-07 15:07:00 UTC; unix", + "Archs": "commonmark.so.dSYM" + } + }, + "cpp11": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "cpp11", + "Title": "A C++11 Interface for R's C Interface", + "Version": "0.5.1", + "Authors@R": "\n c(\n person(\"Davis\", \"Vaughan\", email = \"davis@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4777-038X\")),\n person(\"Jim\",\"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")),\n person(\"Romain\", \"François\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")),\n person(\"Benjamin\", \"Kietzman\", role = \"ctb\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Provides a header only, C++11 interface to R's C\n interface. Compared to other approaches 'cpp11' strives to be safe\n against long jumps from the C API as well as C++ exceptions, conform\n to normal R function semantics and supports interaction with 'ALTREP'\n vectors.", + "License": "MIT + file LICENSE", + "URL": "https://cpp11.r-lib.org, https://github.com/r-lib/cpp11", + "BugReports": "https://github.com/r-lib/cpp11/issues", + "Depends": "R (>= 4.0.0)", + "Suggests": "bench, brio, callr, cli, covr, decor, desc, ggplot2, glue,\nknitr, lobstr, mockery, progress, rmarkdown, scales, Rcpp,\ntestthat (>= 3.2.0), tibble, utils, vctrs, withr", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/Needs/cpp11/cpp_register": "brio, cli, decor, desc, glue, tibble,\nvctrs", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Packaged": "2024-12-04 14:25:58 UTC; davis", + "Author": "Davis Vaughan [aut, cre] (),\n Jim Hester [aut] (),\n Romain François [aut] (),\n Benjamin Kietzman [ctb],\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Davis Vaughan ", + "Repository": "CRAN", + "Date/Publication": "2024-12-04 15:40:02 UTC", + "Built": "R 4.4.1; ; 2024-12-04 16:20:06 UTC; unix" + } + }, + "crayon": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "crayon", + "Title": "Colored Terminal Output", + "Version": "1.5.3", + "Authors@R": "c(\n person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")),\n person(\"Brodie\", \"Gaslam\", , \"brodie.gaslam@yahoo.com\", role = \"ctb\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "The crayon package is now superseded. Please use the 'cli'\n package for new projects. Colored terminal output on terminals that\n support 'ANSI' color and highlight codes. It also works in 'Emacs'\n 'ESS'. 'ANSI' color support is automatically detected. Colors and\n highlighting can be combined and nested. New styles can also be\n created easily. This package was inspired by the 'chalk' 'JavaScript'\n project.", + "License": "MIT + file LICENSE", + "URL": "https://r-lib.github.io/crayon/, https://github.com/r-lib/crayon", + "BugReports": "https://github.com/r-lib/crayon/issues", + "Imports": "grDevices, methods, utils", + "Suggests": "mockery, rstudioapi, testthat, withr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.1", + "Collate": "'aaa-rstudio-detect.R' 'aaaa-rematch2.R'\n'aab-num-ansi-colors.R' 'aac-num-ansi-colors.R' 'ansi-256.R'\n'ansi-palette.R' 'combine.R' 'string.R' 'utils.R'\n'crayon-package.R' 'disposable.R' 'enc-utils.R' 'has_ansi.R'\n'has_color.R' 'link.R' 'styles.R' 'machinery.R' 'parts.R'\n'print.R' 'style-var.R' 'show.R' 'string_operations.R'", + "NeedsCompilation": "no", + "Packaged": "2024-06-20 11:49:08 UTC; gaborcsardi", + "Author": "Gábor Csárdi [aut, cre],\n Brodie Gaslam [ctb],\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Gábor Csárdi ", + "Repository": "CRAN", + "Date/Publication": "2024-06-20 13:00:02 UTC", + "Built": "R 4.4.0; ; 2024-06-20 13:14:47 UTC; unix" + } + }, + "digest": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "digest", + "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\",\n comment = c(ORCID = \"0000-0001-6419-907X\")),\n person(\"Antoine\", \"Lucas\", role=\"ctb\"),\n person(\"Jarek\", \"Tuszynski\", role=\"ctb\"),\n person(\"Henrik\", \"Bengtsson\", role=\"ctb\", comment = c(ORCID = \"0000-0002-7579-5165\")),\n person(\"Simon\", \"Urbanek\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2297-1732\")),\n person(\"Mario\", \"Frasca\", role=\"ctb\"),\n person(\"Bryan\", \"Lewis\", role=\"ctb\"),\n person(\"Murray\", \"Stokely\", role=\"ctb\"),\n person(\"Hannes\", \"Muehleisen\", role=\"ctb\"),\n person(\"Duncan\", \"Murdoch\", role=\"ctb\"),\n person(\"Jim\", \"Hester\", role=\"ctb\"),\n person(\"Wush\", \"Wu\", role=\"ctb\", comment = c(ORCID = \"0000-0001-5180-0567\")),\n person(\"Qiang\", \"Kou\", role=\"ctb\", comment = c(ORCID = \"0000-0001-6786-5453\")),\n person(\"Thierry\", \"Onkelinx\", role=\"ctb\", comment = c(ORCID = \"0000-0001-8804-4216\")),\n person(\"Michel\", \"Lang\", role=\"ctb\", comment = c(ORCID = \"0000-0001-9754-0393\")),\n person(\"Viliam\", \"Simko\", role=\"ctb\"),\n person(\"Kurt\", \"Hornik\", role=\"ctb\", comment = c(ORCID = \"0000-0003-4198-9911\")),\n person(\"Radford\", \"Neal\", role=\"ctb\", comment = c(ORCID = \"0000-0002-2473-3407\")),\n person(\"Kendon\", \"Bell\", role=\"ctb\", comment = c(ORCID = \"0000-0002-9093-8312\")),\n person(\"Matthew\", \"de Queljoe\", role=\"ctb\"),\n person(\"Dmitry\", \"Selivanov\", role=\"ctb\"),\n person(\"Ion\", \"Suruceanu\", role=\"ctb\"),\n person(\"Bill\", \"Denney\", role=\"ctb\"),\n person(\"Dirk\", \"Schumacher\", role=\"ctb\"),\n person(\"András\", \"Svraka\", role=\"ctb\"),\n person(\"Sergey\", \"Fedorov\", role=\"ctb\"),\n person(\"Will\", \"Landau\", role=\"ctb\", comment = c(ORCID = \"0000-0003-1878-3253\")),\n person(\"Floris\", \"Vanderhaeghe\", role=\"ctb\", comment = c(ORCID = \"0000-0002-6378-6229\")),\n person(\"Kevin\", \"Tappe\", role=\"ctb\"),\n person(\"Harris\", \"McGehee\", role=\"ctb\"),\n person(\"Tim\", \"Mastny\", role=\"ctb\"),\n person(\"Aaron\", \"Peikert\", role=\"ctb\", comment = c(ORCID = \"0000-0001-7813-818X\")),\n person(\"Mark\", \"van der Loo\", role=\"ctb\", comment = c(ORCID = \"0000-0002-9807-4686\")),\n person(\"Chris\", \"Muir\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2555-3878\")),\n person(\"Moritz\", \"Beller\", role=\"ctb\", comment = c(ORCID = \"0000-0003-4852-0526\")),\n person(\"Sebastian\", \"Campbell\", role=\"ctb\"),\n person(\"Winston\", \"Chang\", role=\"ctb\", comment = c(ORCID = \"0000-0002-1576-2126\")),\n person(\"Dean\", \"Attali\", role=\"ctb\", comment = c(ORCID = \"0000-0002-5645-3493\")),\n person(\"Michael\", \"Chirico\", role=\"ctb\", comment = c(ORCID = \"0000-0003-0787-087X\")),\n person(\"Kevin\", \"Ushey\", role=\"ctb\"))", + "Version": "0.6.37", + "Date": "2024-08-19", + "Title": "Create Compact Hash Digests of R Objects", + "Description": "Implementation of a function 'digest()' for the creation of hash\n digests of arbitrary R objects (using the 'md5', 'sha-1', 'sha-256', 'crc32',\n 'xxhash', 'murmurhash', 'spookyhash', 'blake3', 'crc32c', 'xxh3_64', and 'xxh3_128'\n algorithms) permitting easy comparison of R language objects, as well as functions\n such as'hmac()' to create hash-based message authentication code. Please note that\n this package is not meant to be deployed for cryptographic purposes for which more\n comprehensive (and widely tested) libraries such as 'OpenSSL' should be used.", + "URL": "https://github.com/eddelbuettel/digest,\nhttps://dirk.eddelbuettel.com/code/digest.html", + "BugReports": "https://github.com/eddelbuettel/digest/issues", + "Depends": "R (>= 3.3.0)", + "Imports": "utils", + "License": "GPL (>= 2)", + "Suggests": "tinytest, simplermarkdown", + "VignetteBuilder": "simplermarkdown", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Packaged": "2024-08-19 12:16:05 UTC; edd", + "Author": "Dirk Eddelbuettel [aut, cre] (),\n Antoine Lucas [ctb],\n Jarek Tuszynski [ctb],\n Henrik Bengtsson [ctb] (),\n Simon Urbanek [ctb] (),\n Mario Frasca [ctb],\n Bryan Lewis [ctb],\n Murray Stokely [ctb],\n Hannes Muehleisen [ctb],\n Duncan Murdoch [ctb],\n Jim Hester [ctb],\n Wush Wu [ctb] (),\n Qiang Kou [ctb] (),\n Thierry Onkelinx [ctb] (),\n Michel Lang [ctb] (),\n Viliam Simko [ctb],\n Kurt Hornik [ctb] (),\n Radford Neal [ctb] (),\n Kendon Bell [ctb] (),\n Matthew de Queljoe [ctb],\n Dmitry Selivanov [ctb],\n Ion Suruceanu [ctb],\n Bill Denney [ctb],\n Dirk Schumacher [ctb],\n András Svraka [ctb],\n Sergey Fedorov [ctb],\n Will Landau [ctb] (),\n Floris Vanderhaeghe [ctb] (),\n Kevin Tappe [ctb],\n Harris McGehee [ctb],\n Tim Mastny [ctb],\n Aaron Peikert [ctb] (),\n Mark van der Loo [ctb] (),\n Chris Muir [ctb] (),\n Moritz Beller [ctb] (),\n Sebastian Campbell [ctb],\n Winston Chang [ctb] (),\n Dean Attali [ctb] (),\n Michael Chirico [ctb] (),\n Kevin Ushey [ctb]", + "Maintainer": "Dirk Eddelbuettel ", + "Repository": "CRAN", + "Date/Publication": "2024-08-19 14:10:07 UTC", + "Built": "R 4.4.1; aarch64-apple-darwin20; 2024-08-19 16:10:23 UTC; unix", + "Archs": "digest.so.dSYM" + } + }, + "dplyr": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Type": "Package", + "Package": "dplyr", + "Title": "A Grammar of Data Manipulation", + "Version": "1.1.4", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0003-4757-117X\")),\n person(\"Romain\", \"François\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-2444-4226\")),\n person(\"Lionel\", \"Henry\", role = \"aut\"),\n person(\"Kirill\", \"Müller\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-1416-3412\")),\n person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0003-4777-038X\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "A fast, consistent tool for working with data frame like\n objects, both in memory and out of memory.", + "License": "MIT + file LICENSE", + "URL": "https://dplyr.tidyverse.org, https://github.com/tidyverse/dplyr", + "BugReports": "https://github.com/tidyverse/dplyr/issues", + "Depends": "R (>= 3.5.0)", + "Imports": "cli (>= 3.4.0), generics, glue (>= 1.3.2), lifecycle (>=\n1.0.3), magrittr (>= 1.5), methods, pillar (>= 1.9.0), R6,\nrlang (>= 1.1.0), tibble (>= 3.2.0), tidyselect (>= 1.2.0),\nutils, vctrs (>= 0.6.4)", + "Suggests": "bench, broom, callr, covr, DBI, dbplyr (>= 2.2.1), ggplot2,\nknitr, Lahman, lobstr, microbenchmark, nycflights13, purrr,\nrmarkdown, RMySQL, RPostgreSQL, RSQLite, stringi (>= 1.7.6),\ntestthat (>= 3.1.5), tidyr (>= 1.3.0), withr", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse, shiny, pkgdown, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "yes", + "Packaged": "2023-11-16 21:48:56 UTC; hadleywickham", + "Author": "Hadley Wickham [aut, cre] (),\n Romain François [aut] (),\n Lionel Henry [aut],\n Kirill Müller [aut] (),\n Davis Vaughan [aut] (),\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2023-11-17 16:50:02 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-04-06 10:52:28 UTC; unix", + "Archs": "dplyr.so.dSYM" + } + }, + "evaluate": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Type": "Package", + "Package": "evaluate", + "Title": "Parsing and Evaluation Tools that Provide More Details than the\nDefault", + "Version": "1.0.5", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Yihui\", \"Xie\", role = \"aut\",\n comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(\"Michael\", \"Lawrence\", role = \"ctb\"),\n person(\"Thomas\", \"Kluyver\", role = \"ctb\"),\n person(\"Jeroen\", \"Ooms\", role = \"ctb\"),\n person(\"Barret\", \"Schloerke\", role = \"ctb\"),\n person(\"Adam\", \"Ryczkowski\", role = \"ctb\"),\n person(\"Hiroaki\", \"Yutani\", role = \"ctb\"),\n person(\"Michel\", \"Lang\", role = \"ctb\"),\n person(\"Karolis\", \"Koncevičius\", role = \"ctb\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Parsing and evaluation tools that make it easy to recreate\n the command line behaviour of R.", + "License": "MIT + file LICENSE", + "URL": "https://evaluate.r-lib.org/, https://github.com/r-lib/evaluate", + "BugReports": "https://github.com/r-lib/evaluate/issues", + "Depends": "R (>= 3.6.0)", + "Suggests": "callr, covr, ggplot2 (>= 3.3.6), lattice, methods, pkgload,\nragg (>= 1.4.0), rlang (>= 1.1.5), knitr, testthat (>= 3.0.0),\nwithr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Packaged": "2025-08-27 16:20:56 UTC; hadleywickham", + "Author": "Hadley Wickham [aut, cre],\n Yihui Xie [aut] (ORCID: ),\n Michael Lawrence [ctb],\n Thomas Kluyver [ctb],\n Jeroen Ooms [ctb],\n Barret Schloerke [ctb],\n Adam Ryczkowski [ctb],\n Hiroaki Yutani [ctb],\n Michel Lang [ctb],\n Karolis Koncevičius [ctb],\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2025-08-27 16:40:02 UTC", + "Built": "R 4.4.1; ; 2025-09-03 20:25:57 UTC; unix" + } + }, + "fansi": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "fansi", + "Title": "ANSI Control Sequence Aware String Functions", + "Description": "Counterparts to R string manipulation functions that account for\n the effects of ANSI text formatting control sequences.", + "Version": "1.0.6", + "Authors@R": "c(\n person(\"Brodie\", \"Gaslam\", email=\"brodie.gaslam@yahoo.com\",\n role=c(\"aut\", \"cre\")),\n person(\"Elliott\", \"Sales De Andrade\", role=\"ctb\"),\n person(family=\"R Core Team\",\n email=\"R-core@r-project.org\", role=\"cph\",\n comment=\"UTF8 byte length calcs from src/util.c\"\n ))", + "Depends": "R (>= 3.1.0)", + "License": "GPL-2 | GPL-3", + "URL": "https://github.com/brodieG/fansi", + "BugReports": "https://github.com/brodieG/fansi/issues", + "VignetteBuilder": "knitr", + "Suggests": "unitizer, knitr, rmarkdown", + "Imports": "grDevices, utils", + "RoxygenNote": "7.2.3", + "Encoding": "UTF-8", + "Collate": "'constants.R' 'fansi-package.R' 'internal.R' 'load.R' 'misc.R'\n'nchar.R' 'strwrap.R' 'strtrim.R' 'strsplit.R' 'substr2.R'\n'trimws.R' 'tohtml.R' 'unhandled.R' 'normalize.R' 'sgr.R'", + "NeedsCompilation": "yes", + "Packaged": "2023-12-06 00:59:41 UTC; bg", + "Author": "Brodie Gaslam [aut, cre],\n Elliott Sales De Andrade [ctb],\n R Core Team [cph] (UTF8 byte length calcs from src/util.c)", + "Maintainer": "Brodie Gaslam ", + "Repository": "CRAN", + "Date/Publication": "2023-12-08 03:30:02 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-04-05 07:33:35 UTC; unix", + "Archs": "fansi.so.dSYM" + } + }, + "farver": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Type": "Package", + "Package": "farver", + "Title": "High Performance Colour Space Manipulation", + "Version": "2.1.2", + "Authors@R": "c(\n person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"),\n comment = c(ORCID = \"0000-0002-5147-4711\")),\n person(\"Berendea\", \"Nicolae\", role = \"aut\",\n comment = \"Author of the ColorSpace C++ library\"),\n person(\"Romain\", \"François\", , \"romain@purrple.cat\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-2444-4226\")),\n person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "The encoding of colour can be handled in many different ways,\n using different colour spaces. As different colour spaces have\n different uses, efficient conversion between these representations are\n important. The 'farver' package provides a set of functions that gives\n access to very fast colour space conversion and comparisons\n implemented in C++, and offers speed improvements over the\n 'convertColor' function in the 'grDevices' package.", + "License": "MIT + file LICENSE", + "URL": "https://farver.data-imaginist.com,\nhttps://github.com/thomasp85/farver", + "BugReports": "https://github.com/thomasp85/farver/issues", + "Suggests": "covr, testthat (>= 3.0.0)", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.1", + "NeedsCompilation": "yes", + "Packaged": "2024-05-13 08:31:27 UTC; thomas", + "Author": "Thomas Lin Pedersen [cre, aut]\n (),\n Berendea Nicolae [aut] (Author of the ColorSpace C++ library),\n Romain François [aut] (),\n Posit, PBC [cph, fnd]", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN", + "Date/Publication": "2024-05-13 09:33:09 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-05-13 12:36:31 UTC; unix", + "Archs": "farver.so.dSYM" + } + }, + "fastmap": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "fastmap", + "Title": "Fast Data Structures", + "Version": "1.2.0", + "Authors@R": "c(\n person(\"Winston\", \"Chang\", email = \"winston@posit.co\", role = c(\"aut\", \"cre\")),\n person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")),\n person(given = \"Tessil\", role = \"cph\", comment = \"hopscotch_map library\")\n )", + "Description": "Fast implementation of data structures, including a key-value\n store, stack, and queue. Environments are commonly used as key-value stores\n in R, but every time a new key is used, it is added to R's global symbol\n table, causing a small amount of memory leakage. This can be problematic in\n cases where many different keys are used. Fastmap avoids this memory leak\n issue by implementing the map using data structures in C++.", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "Suggests": "testthat (>= 2.1.1)", + "URL": "https://r-lib.github.io/fastmap/, https://github.com/r-lib/fastmap", + "BugReports": "https://github.com/r-lib/fastmap/issues", + "NeedsCompilation": "yes", + "Packaged": "2024-05-14 17:54:13 UTC; winston", + "Author": "Winston Chang [aut, cre],\n Posit Software, PBC [cph, fnd],\n Tessil [cph] (hopscotch_map library)", + "Maintainer": "Winston Chang ", + "Repository": "CRAN", + "Date/Publication": "2024-05-15 09:00:07 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-05-15 09:33:12 UTC; unix", + "Archs": "fastmap.so.dSYM" + } + }, + "fontawesome": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Type": "Package", + "Package": "fontawesome", + "Version": "0.5.3", + "Title": "Easily Work with 'Font Awesome' Icons", + "Description": "Easily and flexibly insert 'Font Awesome' icons into 'R Markdown'\n documents and 'Shiny' apps. These icons can be inserted into HTML content\n through inline 'SVG' tags or 'i' tags. There is also a utility function for\n exporting 'Font Awesome' icons as 'PNG' images for those situations where\n raster graphics are needed.", + "Authors@R": "c(\n person(\"Richard\", \"Iannone\", , \"rich@posit.co\", c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0003-3925-190X\")),\n person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"ctb\",\n comment = c(ORCID = \"0000-0003-4474-2498\")),\n person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"ctb\"),\n person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"),\n comment = \"Font-Awesome font\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "License": "MIT + file LICENSE", + "URL": "https://github.com/rstudio/fontawesome,\nhttps://rstudio.github.io/fontawesome/", + "BugReports": "https://github.com/rstudio/fontawesome/issues", + "Encoding": "UTF-8", + "ByteCompile": "true", + "RoxygenNote": "7.3.2", + "Depends": "R (>= 3.3.0)", + "Imports": "rlang (>= 1.0.6), htmltools (>= 0.5.1.1)", + "Suggests": "covr, dplyr (>= 1.0.8), gt (>= 0.9.0), knitr (>= 1.31),\ntestthat (>= 3.0.0), rsvg", + "Config/testthat/edition": "3", + "NeedsCompilation": "no", + "Packaged": "2024-11-16 17:06:16 UTC; riannone", + "Author": "Richard Iannone [aut, cre] (),\n Christophe Dervieux [ctb] (),\n Winston Chang [ctb],\n Dave Gandy [ctb, cph] (Font-Awesome font),\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Richard Iannone ", + "Repository": "CRAN", + "Date/Publication": "2024-11-16 17:30:02 UTC", + "Built": "R 4.4.1; ; 2024-11-18 04:10:53 UTC; unix" + } + }, + "fs": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "fs", + "Title": "Cross-Platform File System Operations Based on 'libuv'", + "Version": "1.6.6", + "Authors@R": "c(\n person(\"Jim\", \"Hester\", role = \"aut\"),\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"),\n person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")),\n person(\"libuv project contributors\", role = \"cph\",\n comment = \"libuv library\"),\n person(\"Joyent, Inc. and other Node contributors\", role = \"cph\",\n comment = \"libuv library\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "A cross-platform interface to file system operations, built\n 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)", + "Imports": "methods", + "Suggests": "covr, crayon, knitr, pillar (>= 1.0.0), rmarkdown, spelling,\ntestthat (>= 3.0.0), tibble (>= 1.1.0), vctrs (>= 0.3.0), withr", + "VignetteBuilder": "knitr", + "ByteCompile": "true", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Copyright": "file COPYRIGHTS", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.2.3", + "SystemRequirements": "GNU make", + "NeedsCompilation": "yes", + "Packaged": "2025-04-12 09:39:13 UTC; gaborcsardi", + "Author": "Jim Hester [aut],\n Hadley Wickham [aut],\n Gábor Csárdi [aut, cre],\n libuv project contributors [cph] (libuv library),\n Joyent, Inc. and other Node contributors [cph] (libuv library),\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Gábor Csárdi ", + "Repository": "CRAN", + "Date/Publication": "2025-04-12 10:40:02 UTC", + "Built": "R 4.4.1; aarch64-apple-darwin20; 2025-04-12 11:45:05 UTC; unix", + "Archs": "fs.so.dSYM" + } + }, + "generics": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "generics", + "Title": "Common S3 Generics not Provided by Base R Methods Related to\nModel Fitting", + "Version": "0.1.3", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = c(\"aut\", \"cre\")),\n person(\"Max\", \"Kuhn\", , \"max@rstudio.com\", role = \"aut\"),\n person(\"Davis\", \"Vaughan\", , \"davis@rstudio.com\", role = \"aut\"),\n person(\"RStudio\", role = \"cph\")\n )", + "Description": "In order to reduce potential package dependencies and\n conflicts, generics provides a number of commonly used S3 generics.", + "License": "MIT + file LICENSE", + "URL": "https://generics.r-lib.org, https://github.com/r-lib/generics", + "BugReports": "https://github.com/r-lib/generics/issues", + "Depends": "R (>= 3.2)", + "Imports": "methods", + "Suggests": "covr, pkgload, testthat (>= 3.0.0), tibble, withr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.0", + "NeedsCompilation": "no", + "Packaged": "2022-07-05 14:52:13 UTC; davis", + "Author": "Hadley Wickham [aut, cre],\n Max Kuhn [aut],\n Davis Vaughan [aut],\n RStudio [cph]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2022-07-05 19:40:02 UTC", + "Built": "R 4.4.0; ; 2024-04-05 14:59:48 UTC; unix" + } + }, + "ggplot2": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "ggplot2", + "Version": "3.5.2", + "Title": "Create Elegant Data Visualisations Using the Grammar of Graphics", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0003-4757-117X\")),\n person(\"Winston\", \"Chang\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-1576-2126\")),\n person(\"Lionel\", \"Henry\", role = \"aut\"),\n person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-5147-4711\")),\n person(\"Kohske\", \"Takahashi\", role = \"aut\"),\n person(\"Claus\", \"Wilke\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-7470-9261\")),\n person(\"Kara\", \"Woo\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-5125-4188\")),\n person(\"Hiroaki\", \"Yutani\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-3385-7233\")),\n person(\"Dewey\", \"Dunnington\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-9415-4582\")),\n person(\"Teun\", \"van den Brand\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-9335-7468\")),\n person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "A system for 'declaratively' creating graphics, based on \"The\n Grammar of Graphics\". You provide the data, tell 'ggplot2' how to map\n variables to aesthetics, what graphical primitives to use, and it\n takes care of the details.", + "License": "MIT + file LICENSE", + "URL": "https://ggplot2.tidyverse.org,\nhttps://github.com/tidyverse/ggplot2", + "BugReports": "https://github.com/tidyverse/ggplot2/issues", + "Depends": "R (>= 3.5)", + "Imports": "cli, glue, grDevices, grid, gtable (>= 0.1.1), isoband,\nlifecycle (> 1.0.1), MASS, mgcv, rlang (>= 1.1.0), scales (>=\n1.3.0), stats, tibble, vctrs (>= 0.6.0), withr (>= 2.5.0)", + "Suggests": "covr, dplyr, ggplot2movies, hexbin, Hmisc, knitr, mapproj,\nmaps, multcomp, munsell, nlme, profvis, quantreg, ragg (>=\n1.2.6), RColorBrewer, rmarkdown, rpart, sf (>= 0.7-3), svglite\n(>= 2.1.2), testthat (>= 3.1.2), vdiffr (>= 1.0.6), xml2", + "Enhances": "sp", + "VignetteBuilder": "knitr", + "Config/Needs/website": "ggtext, tidyr, forcats, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.2", + "Collate": "'ggproto.R' 'ggplot-global.R' 'aaa-.R'\n'aes-colour-fill-alpha.R' 'aes-evaluation.R'\n'aes-group-order.R' 'aes-linetype-size-shape.R'\n'aes-position.R' 'compat-plyr.R' 'utilities.R' 'aes.R'\n'utilities-checks.R' 'legend-draw.R' 'geom-.R'\n'annotation-custom.R' 'annotation-logticks.R' 'geom-polygon.R'\n'geom-map.R' 'annotation-map.R' 'geom-raster.R'\n'annotation-raster.R' 'annotation.R' 'autolayer.R' 'autoplot.R'\n'axis-secondary.R' 'backports.R' 'bench.R' 'bin.R' 'coord-.R'\n'coord-cartesian-.R' 'coord-fixed.R' 'coord-flip.R'\n'coord-map.R' 'coord-munch.R' 'coord-polar.R'\n'coord-quickmap.R' 'coord-radial.R' 'coord-sf.R'\n'coord-transform.R' 'data.R' 'docs_layer.R' 'facet-.R'\n'facet-grid-.R' 'facet-null.R' 'facet-wrap.R' 'fortify-lm.R'\n'fortify-map.R' 'fortify-multcomp.R' 'fortify-spatial.R'\n'fortify.R' 'stat-.R' 'geom-abline.R' 'geom-rect.R'\n'geom-bar.R' 'geom-bin2d.R' 'geom-blank.R' 'geom-boxplot.R'\n'geom-col.R' 'geom-path.R' 'geom-contour.R' 'geom-count.R'\n'geom-crossbar.R' 'geom-segment.R' 'geom-curve.R'\n'geom-defaults.R' 'geom-ribbon.R' 'geom-density.R'\n'geom-density2d.R' 'geom-dotplot.R' 'geom-errorbar.R'\n'geom-errorbarh.R' 'geom-freqpoly.R' 'geom-function.R'\n'geom-hex.R' 'geom-histogram.R' 'geom-hline.R' 'geom-jitter.R'\n'geom-label.R' 'geom-linerange.R' 'geom-point.R'\n'geom-pointrange.R' 'geom-quantile.R' 'geom-rug.R' 'geom-sf.R'\n'geom-smooth.R' 'geom-spoke.R' 'geom-text.R' 'geom-tile.R'\n'geom-violin.R' 'geom-vline.R' 'ggplot2-package.R'\n'grob-absolute.R' 'grob-dotstack.R' 'grob-null.R' 'grouping.R'\n'theme-elements.R' 'guide-.R' 'guide-axis.R'\n'guide-axis-logticks.R' 'guide-axis-stack.R'\n'guide-axis-theta.R' 'guide-legend.R' 'guide-bins.R'\n'guide-colorbar.R' 'guide-colorsteps.R' 'guide-custom.R'\n'layer.R' 'guide-none.R' 'guide-old.R' 'guides-.R'\n'guides-grid.R' 'hexbin.R' 'import-standalone-obj-type.R'\n'import-standalone-types-check.R' 'labeller.R' 'labels.R'\n'layer-sf.R' 'layout.R' 'limits.R' 'margins.R' 'performance.R'\n'plot-build.R' 'plot-construction.R' 'plot-last.R' 'plot.R'\n'position-.R' 'position-collide.R' 'position-dodge.R'\n'position-dodge2.R' 'position-identity.R' 'position-jitter.R'\n'position-jitterdodge.R' 'position-nudge.R' 'position-stack.R'\n'quick-plot.R' 'reshape-add-margins.R' 'save.R' 'scale-.R'\n'scale-alpha.R' 'scale-binned.R' 'scale-brewer.R'\n'scale-colour.R' 'scale-continuous.R' 'scale-date.R'\n'scale-discrete-.R' 'scale-expansion.R' 'scale-gradient.R'\n'scale-grey.R' 'scale-hue.R' 'scale-identity.R'\n'scale-linetype.R' 'scale-linewidth.R' 'scale-manual.R'\n'scale-shape.R' 'scale-size.R' 'scale-steps.R' 'scale-type.R'\n'scale-view.R' 'scale-viridis.R' 'scales-.R' 'stat-align.R'\n'stat-bin.R' 'stat-bin2d.R' 'stat-bindot.R' 'stat-binhex.R'\n'stat-boxplot.R' 'stat-contour.R' 'stat-count.R'\n'stat-density-2d.R' 'stat-density.R' 'stat-ecdf.R'\n'stat-ellipse.R' 'stat-function.R' 'stat-identity.R'\n'stat-qq-line.R' 'stat-qq.R' 'stat-quantilemethods.R'\n'stat-sf-coordinates.R' 'stat-sf.R' 'stat-smooth-methods.R'\n'stat-smooth.R' 'stat-sum.R' 'stat-summary-2d.R'\n'stat-summary-bin.R' 'stat-summary-hex.R' 'stat-summary.R'\n'stat-unique.R' 'stat-ydensity.R' 'summarise-plot.R'\n'summary.R' 'theme.R' 'theme-defaults.R' 'theme-current.R'\n'utilities-break.R' 'utilities-grid.R' 'utilities-help.R'\n'utilities-matrix.R' 'utilities-patterns.R'\n'utilities-resolution.R' 'utilities-tidy-eval.R' 'zxx.R'\n'zzz.R'", + "NeedsCompilation": "no", + "Packaged": "2025-04-08 10:58:01 UTC; thomas", + "Author": "Hadley Wickham [aut] (),\n Winston Chang [aut] (),\n Lionel Henry [aut],\n Thomas Lin Pedersen [aut, cre]\n (),\n Kohske Takahashi [aut],\n Claus Wilke [aut] (),\n Kara Woo [aut] (),\n Hiroaki Yutani [aut] (),\n Dewey Dunnington [aut] (),\n Teun van den Brand [aut] (),\n Posit, PBC [cph, fnd]", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN", + "Date/Publication": "2025-04-09 09:40:10 UTC", + "Built": "R 4.4.1; ; 2025-04-09 11:08:10 UTC; unix" + } + }, + "glue": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "glue", + "Title": "Interpreted String Literals", + "Version": "1.8.0", + "Authors@R": "c(\n person(\"Jim\", \"Hester\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-2739-7082\")),\n person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-6983-2759\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "An implementation of interpreted string literals, inspired by\n Python's Literal String Interpolation\n and Docstrings\n and Julia's Triple-Quoted\n String Literals\n .", + "License": "MIT + file LICENSE", + "URL": "https://glue.tidyverse.org/, https://github.com/tidyverse/glue", + "BugReports": "https://github.com/tidyverse/glue/issues", + "Depends": "R (>= 3.6)", + "Imports": "methods", + "Suggests": "crayon, DBI (>= 1.2.0), dplyr, knitr, magrittr, rlang,\nrmarkdown, RSQLite, testthat (>= 3.2.0), vctrs (>= 0.3.0),\nwaldo (>= 0.5.3), withr", + "VignetteBuilder": "knitr", + "ByteCompile": "true", + "Config/Needs/website": "bench, forcats, ggbeeswarm, ggplot2, R.utils,\nrprintf, tidyr, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "yes", + "Packaged": "2024-09-27 16:00:45 UTC; jenny", + "Author": "Jim Hester [aut] (),\n Jennifer Bryan [aut, cre] (),\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Jennifer Bryan ", + "Repository": "CRAN", + "Date/Publication": "2024-09-30 22:30:01 UTC", + "Built": "R 4.4.1; aarch64-apple-darwin20; 2024-10-01 00:07:34 UTC; unix", + "Archs": "glue.so.dSYM" + } + }, + "gtable": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "gtable", + "Title": "Arrange 'Grobs' in Tables", + "Version": "0.3.6", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"),\n person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Tools to make it easier to work with \"tables\" of 'grobs'. The\n 'gtable' package defines a 'gtable' grob class that specifies a grid\n along with a list of grobs and their placement in the grid. Further\n the package makes it easy to manipulate and combine 'gtable' objects\n so that complex compositions can be built up sequentially.", + "License": "MIT + file LICENSE", + "URL": "https://gtable.r-lib.org, https://github.com/r-lib/gtable", + "BugReports": "https://github.com/r-lib/gtable/issues", + "Depends": "R (>= 4.0)", + "Imports": "cli, glue, grid, lifecycle, rlang (>= 1.1.0), stats", + "Suggests": "covr, ggplot2, knitr, profvis, rmarkdown, testthat (>= 3.0.0)", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2024-10-25", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Packaged": "2024-10-25 12:42:05 UTC; thomas", + "Author": "Hadley Wickham [aut],\n Thomas Lin Pedersen [aut, cre],\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN", + "Date/Publication": "2024-10-25 13:20:02 UTC", + "Built": "R 4.4.1; ; 2024-10-25 14:16:01 UTC; unix" + } + }, + "highr": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "highr", + "Type": "Package", + "Title": "Syntax Highlighting for R Source Code", + "Version": "0.11", + "Authors@R": "c(\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(\"Yixuan\", \"Qiu\", role = \"aut\"),\n person(\"Christopher\", \"Gandrud\", role = \"ctb\"),\n person(\"Qiang\", \"Li\", role = \"ctb\")\n )", + "Description": "Provides syntax highlighting for R source code. Currently it\n supports LaTeX and HTML output. Source code of other languages is supported\n via Andre Simon's highlight package ().", + "Depends": "R (>= 3.3.0)", + "Imports": "xfun (>= 0.18)", + "Suggests": "knitr, markdown, testit", + "License": "GPL", + "URL": "https://github.com/yihui/highr", + "BugReports": "https://github.com/yihui/highr/issues", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.1", + "NeedsCompilation": "no", + "Packaged": "2024-05-26 19:27:21 UTC; yihui", + "Author": "Yihui Xie [aut, cre] (),\n Yixuan Qiu [aut],\n Christopher Gandrud [ctb],\n Qiang Li [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN", + "Date/Publication": "2024-05-26 20:00:03 UTC", + "Built": "R 4.4.0; ; 2024-05-26 20:32:33 UTC; unix" + } + }, + "hms": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "hms", + "Title": "Pretty Time of Day", + "Date": "2023-03-21", + "Version": "1.1.3", + "Authors@R": "c(\n person(\"Kirill\", \"Müller\", role = c(\"aut\", \"cre\"), email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")),\n person(\"R Consortium\", role = \"fnd\"),\n person(\"RStudio\", role = \"fnd\")\n )", + "Description": "Implements an S3 class for storing and formatting time-of-day\n values, based on the 'difftime' class.", + "Imports": "lifecycle, methods, pkgconfig, rlang (>= 1.0.2), vctrs (>=\n0.3.8)", + "Suggests": "crayon, lubridate, pillar (>= 1.1.0), testthat (>= 3.0.0)", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "URL": "https://hms.tidyverse.org/, https://github.com/tidyverse/hms", + "BugReports": "https://github.com/tidyverse/hms/issues", + "RoxygenNote": "7.2.3", + "Config/testthat/edition": "3", + "Config/autostyle/scope": "line_breaks", + "Config/autostyle/strict": "false", + "Config/Needs/website": "tidyverse/tidytemplate", + "NeedsCompilation": "no", + "Packaged": "2023-03-21 16:52:11 UTC; kirill", + "Author": "Kirill Müller [aut, cre] (),\n R Consortium [fnd],\n RStudio [fnd]", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN", + "Date/Publication": "2023-03-21 18:10:02 UTC", + "Built": "R 4.4.0; ; 2024-04-06 06:41:18 UTC; unix" + } + }, + "htmltools": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Type": "Package", + "Package": "htmltools", + "Title": "Tools for HTML", + "Version": "0.5.9", + "Authors@R": "c(\n person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"),\n person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0001-9986-114X\")),\n person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-1576-2126\")),\n person(\"Yihui\", \"Xie\", , \"yihui@posit.co\", role = \"aut\"),\n person(\"Jeff\", \"Allen\", role = \"aut\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Tools for HTML generation and output.", + "License": "GPL (>= 2)", + "URL": "https://github.com/rstudio/htmltools,\nhttps://rstudio.github.io/htmltools/", + "BugReports": "https://github.com/rstudio/htmltools/issues", + "Depends": "R (>= 2.14.1)", + "Imports": "base64enc, digest, fastmap (>= 1.1.0), grDevices, rlang (>=\n1.0.0), utils", + "Suggests": "Cairo, markdown, ragg, shiny, testthat, withr", + "Enhances": "knitr", + "Config/Needs/check": "knitr", + "Config/Needs/website": "rstudio/quillt, bench", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Collate": "'colors.R' 'fill.R' 'html_dependency.R' 'html_escape.R'\n'html_print.R' 'htmltools-package.R' 'images.R' 'known_tags.R'\n'selector.R' 'staticimports.R' 'tag_query.R' 'utils.R' 'tags.R'\n'template.R'", + "NeedsCompilation": "yes", + "Packaged": "2025-12-02 23:32:55 UTC; cpsievert", + "Author": "Joe Cheng [aut],\n Carson Sievert [aut, cre] (ORCID:\n ),\n Barret Schloerke [aut] (ORCID: ),\n Winston Chang [aut] (ORCID: ),\n Yihui Xie [aut],\n Jeff Allen [aut],\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN", + "Date/Publication": "2025-12-04 11:50:09 UTC", + "Built": "R 4.4.3; aarch64-apple-darwin20; 2025-12-04 12:04:17 UTC; unix", + "Archs": "htmltools.so.dSYM" + } + }, + "httpuv": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Type": "Package", + "Package": "httpuv", + "Title": "HTTP and WebSocket Server Library", + "Version": "1.6.15", + "Authors@R": "c(\n person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"),\n person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Posit, PBC\", \"fnd\", role = \"cph\"),\n person(\"Hector\", \"Corrada Bravo\", role = \"ctb\"),\n person(\"Jeroen\", \"Ooms\", role = \"ctb\"),\n person(\"Andrzej\", \"Krzemienski\", role = \"cph\",\n comment = \"optional.hpp\"),\n person(\"libuv project contributors\", role = \"cph\",\n comment = \"libuv library, see src/libuv/AUTHORS file\"),\n person(\"Joyent, Inc. and other Node contributors\", role = \"cph\",\n comment = \"libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file\"),\n person(\"Niels\", \"Provos\", role = \"cph\",\n comment = \"libuv subcomponent: tree.h\"),\n person(\"Internet Systems Consortium, Inc.\", role = \"cph\",\n comment = \"libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c\"),\n person(\"Alexander\", \"Chemeris\", role = \"cph\",\n comment = \"libuv subcomponent: stdint-msvc2008.h (from msinttypes)\"),\n person(\"Google, Inc.\", role = \"cph\",\n comment = \"libuv subcomponent: pthread-fixes.c\"),\n person(\"Sony Mobile Communcations AB\", role = \"cph\",\n comment = \"libuv subcomponent: pthread-fixes.c\"),\n person(\"Berkeley Software Design Inc.\", role = \"cph\",\n comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"),\n person(\"Kenneth\", \"MacKay\", role = \"cph\",\n comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"),\n person(\"Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016)\", role = \"cph\",\n comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"),\n person(\"Steve\", \"Reid\", role = \"aut\",\n comment = \"SHA-1 implementation\"),\n person(\"James\", \"Brown\", role = \"aut\",\n comment = \"SHA-1 implementation\"),\n person(\"Bob\", \"Trower\", role = \"aut\",\n comment = \"base64 implementation\"),\n person(\"Alexander\", \"Peslyak\", role = \"aut\",\n comment = \"MD5 implementation\"),\n person(\"Trantor Standard Systems\", role = \"cph\",\n comment = \"base64 implementation\"),\n person(\"Igor\", \"Sysoev\", role = \"cph\",\n comment = \"http-parser\")\n )", + "Description": "Provides low-level socket and protocol support for handling\n HTTP and WebSocket requests directly from within R. It is primarily\n intended as a building block for other packages, rather than making it\n particularly easy to create complete web applications using httpuv\n alone. httpuv is built on top of the libuv and http-parser C\n libraries, both of which were developed by Joyent, Inc. (See LICENSE\n file for libuv and http-parser license information.)", + "License": "GPL (>= 2) | file LICENSE", + "URL": "https://github.com/rstudio/httpuv", + "BugReports": "https://github.com/rstudio/httpuv/issues", + "Depends": "R (>= 2.15.1)", + "Imports": "later (>= 0.8.0), promises, R6, Rcpp (>= 1.0.7), utils", + "Suggests": "callr, curl, testthat, websocket", + "LinkingTo": "later, Rcpp", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.1", + "SystemRequirements": "GNU make, zlib", + "Collate": "'RcppExports.R' 'httpuv.R' 'random_port.R' 'server.R'\n'staticServer.R' 'static_paths.R' 'utils.R'", + "NeedsCompilation": "yes", + "Packaged": "2024-03-25 21:06:08 UTC; cpsievert", + "Author": "Joe Cheng [aut],\n Winston Chang [aut, cre],\n Posit, PBC fnd [cph],\n Hector Corrada Bravo [ctb],\n Jeroen Ooms [ctb],\n Andrzej Krzemienski [cph] (optional.hpp),\n libuv project contributors [cph] (libuv library, see src/libuv/AUTHORS\n file),\n Joyent, Inc. and other Node contributors [cph] (libuv library, see\n src/libuv/AUTHORS file; and http-parser library, see\n src/http-parser/AUTHORS file),\n Niels Provos [cph] (libuv subcomponent: tree.h),\n Internet Systems Consortium, Inc. [cph] (libuv subcomponent: inet_pton\n and inet_ntop, contained in src/libuv/src/inet.c),\n Alexander Chemeris [cph] (libuv subcomponent: stdint-msvc2008.h (from\n msinttypes)),\n Google, Inc. [cph] (libuv subcomponent: pthread-fixes.c),\n Sony Mobile Communcations AB [cph] (libuv subcomponent:\n pthread-fixes.c),\n Berkeley Software Design Inc. [cph] (libuv subcomponent:\n android-ifaddrs.h, android-ifaddrs.c),\n Kenneth MacKay [cph] (libuv subcomponent: android-ifaddrs.h,\n android-ifaddrs.c),\n Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016) [cph]\n (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c),\n Steve Reid [aut] (SHA-1 implementation),\n James Brown [aut] (SHA-1 implementation),\n Bob Trower [aut] (base64 implementation),\n Alexander Peslyak [aut] (MD5 implementation),\n Trantor Standard Systems [cph] (base64 implementation),\n Igor Sysoev [cph] (http-parser)", + "Maintainer": "Winston Chang ", + "Repository": "CRAN", + "Date/Publication": "2024-03-26 05:50:06 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-04-06 06:43:04 UTC; unix", + "Archs": "httpuv.so.dSYM" + } + }, + "isoband": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "isoband", + "Title": "Generate Isolines and Isobands from Regularly Spaced Elevation\nGrids", + "Version": "0.2.7", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0003-4757-117X\")),\n person(\"Claus O.\", \"Wilke\", , \"wilke@austin.utexas.edu\", role = \"aut\",\n comment = c(\"Original author\", ORCID = \"0000-0002-7470-9261\")),\n person(\"Thomas Lin\", \"Pedersen\", , \"thomasp85@gmail.com\", role = \"aut\",\n comment = c(ORCID = \"0000-0002-5147-4711\"))\n )", + "Description": "A fast C++ implementation to generate contour lines\n (isolines) and contour polygons (isobands) from regularly spaced grids\n containing elevation data.", + "License": "MIT + file LICENSE", + "URL": "https://isoband.r-lib.org", + "BugReports": "https://github.com/r-lib/isoband/issues", + "Imports": "grid, utils", + "Suggests": "covr, ggplot2, knitr, magick, microbenchmark, rmarkdown, sf,\ntestthat, xml2", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "SystemRequirements": "C++11", + "NeedsCompilation": "yes", + "Packaged": "2022-12-19 20:10:02 UTC; hadleywickham", + "Author": "Hadley Wickham [aut, cre] (),\n Claus O. Wilke [aut] (Original author,\n ),\n Thomas Lin Pedersen [aut] ()", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2022-12-20 10:00:13 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-04-05 15:00:57 UTC; unix", + "Archs": "isoband.so.dSYM" + } + }, + "janitor": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "janitor", + "Title": "Simple Tools for Examining and Cleaning Dirty Data", + "Version": "2.2.0", + "Authors@R": "c(person(\"Sam\", \"Firke\", email = \"samuel.firke@gmail.com\", role = c(\"aut\", \"cre\")),\n person(\"Bill\", \"Denney\", email = \"wdenney@humanpredictions.com\", role = \"ctb\"),\n person(\"Chris\", \"Haid\", email = \"chrishaid@gmail.com\", role = \"ctb\"),\n person(\"Ryan\", \"Knight\", email = \"ryangknight@gmail.com\", role = \"ctb\"),\n person(\"Malte\", \"Grosser\", email = \"malte.grosser@gmail.com\", role = \"ctb\"),\n person(\"Jonathan\", \"Zadra\", email = \"jonathan.zadra@sorensonimpact.com\", role = \"ctb\"))", + "Description": "The main janitor functions can: perfectly format data.frame column\n names; provide quick counts of variable combinations (i.e., frequency\n tables and crosstabs); and explore duplicate records. Other janitor functions\n nicely format the tabulation results. These tabulate-and-report functions\n approximate popular features of SPSS and Microsoft Excel. This package\n follows the principles of the \"tidyverse\" and works well with the pipe function\n %>%. janitor was built with beginning-to-intermediate R users in mind and is\n optimized for user-friendliness.", + "URL": "https://github.com/sfirke/janitor,\nhttps://sfirke.github.io/janitor/", + "BugReports": "https://github.com/sfirke/janitor/issues", + "Depends": "R (>= 3.1.2)", + "Imports": "dplyr (>= 1.0.0), hms, lifecycle, lubridate, magrittr, purrr,\nrlang, stringi, stringr, snakecase (>= 0.9.2), tidyselect (>=\n1.0.0), tidyr (>= 0.7.0)", + "License": "MIT + file LICENSE", + "RoxygenNote": "7.2.3", + "Suggests": "dbplyr, knitr, rmarkdown, RSQLite, sf, testthat (>= 3.0.0),\ntibble, tidygraph", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "Config/testthat/edition": "3", + "NeedsCompilation": "no", + "Packaged": "2023-02-02 16:00:15 UTC; samfi", + "Author": "Sam Firke [aut, cre],\n Bill Denney [ctb],\n Chris Haid [ctb],\n Ryan Knight [ctb],\n Malte Grosser [ctb],\n Jonathan Zadra [ctb]", + "Maintainer": "Sam Firke ", + "Repository": "CRAN", + "Date/Publication": "2023-02-02 16:50:06 UTC", + "Built": "R 4.4.0; ; 2024-04-06 17:32:13 UTC; unix" + } + }, + "jquerylib": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "jquerylib", + "Title": "Obtain 'jQuery' as an HTML Dependency Object", + "Version": "0.1.4", + "Authors@R": "c(\n person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"carson@rstudio.com\", comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@rstudio.com\"),\n person(family = \"RStudio\", role = \"cph\"),\n person(family = \"jQuery Foundation\", role = \"cph\",\n comment = \"jQuery library and jQuery UI library\"),\n person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"),\n comment = \"jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt\")\n )", + "Description": "Obtain any major version of 'jQuery' () and use it in any webpage generated by 'htmltools' (e.g. 'shiny', 'htmlwidgets', and 'rmarkdown').\n Most R users don't need to use this package directly, but other R packages (e.g. 'shiny', 'rmarkdown', etc.) depend on this package to avoid bundling redundant copies of 'jQuery'.", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "Config/testthat/edition": "3", + "RoxygenNote": "7.0.2", + "Imports": "htmltools", + "Suggests": "testthat", + "NeedsCompilation": "no", + "Packaged": "2021-04-26 16:40:21 UTC; cpsievert", + "Author": "Carson Sievert [aut, cre] (),\n Joe Cheng [aut],\n RStudio [cph],\n jQuery Foundation [cph] (jQuery library and jQuery UI library),\n jQuery contributors [ctb, cph] (jQuery library; authors listed in\n inst/lib/jquery-AUTHORS.txt)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN", + "Date/Publication": "2021-04-26 17:10:02 UTC", + "Built": "R 4.4.0; ; 2024-04-06 02:47:36 UTC; unix" + } + }, + "jsonlite": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "jsonlite", + "Version": "2.0.0", + "Title": "A Simple and Robust JSON Parser and Generator for R", + "License": "MIT + file LICENSE", + "Depends": "methods", + "Authors@R": "c(\n person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\",\n comment = c(ORCID = \"0000-0002-4035-0289\")),\n person(\"Duncan\", \"Temple Lang\", role = \"ctb\"),\n person(\"Lloyd\", \"Hilaiel\", role = \"cph\", comment=\"author of bundled libyajl\"))", + "URL": "https://jeroen.r-universe.dev/jsonlite\nhttps://arxiv.org/abs/1403.2805", + "BugReports": "https://github.com/jeroen/jsonlite/issues", + "Maintainer": "Jeroen Ooms ", + "VignetteBuilder": "knitr, R.rsp", + "Description": "A reasonably fast JSON parser and generator, optimized for statistical \n data and the web. Offers simple, flexible tools for working with JSON in R, and\n is particularly powerful for building pipelines and interacting with a web API. \n The implementation is based on the mapping described in the vignette (Ooms, 2014).\n In addition to converting JSON data from/to R objects, 'jsonlite' contains \n functions to stream, validate, and prettify JSON data. The unit tests included \n with the package verify that all edge cases are encoded and decoded consistently \n for use with dynamic data in systems and applications.", + "Suggests": "httr, vctrs, testthat, knitr, rmarkdown, R.rsp, sf", + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Packaged": "2025-03-26 11:36:10 UTC; jeroen", + "Author": "Jeroen Ooms [aut, cre] (),\n Duncan Temple Lang [ctb],\n Lloyd Hilaiel [cph] (author of bundled libyajl)", + "Repository": "CRAN", + "Date/Publication": "2025-03-27 06:40:02 UTC", + "Built": "R 4.4.1; aarch64-apple-darwin20; 2025-03-27 07:20:42 UTC; unix", + "Archs": "jsonlite.so.dSYM" + } + }, + "knitr": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "knitr", + "Type": "Package", + "Title": "A General-Purpose Package for Dynamic Report Generation in R", + "Version": "1.51", + "Authors@R": "c(\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")),\n person(\"Abhraneel\", \"Sarma\", role = \"ctb\"),\n person(\"Adam\", \"Vogt\", role = \"ctb\"),\n person(\"Alastair\", \"Andrew\", role = \"ctb\"),\n person(\"Alex\", \"Zvoleff\", role = \"ctb\"),\n person(\"Amar\", \"Al-Zubaidi\", role = \"ctb\"),\n person(\"Andre\", \"Simon\", role = \"ctb\", comment = \"the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de\"),\n person(\"Aron\", \"Atkins\", role = \"ctb\"),\n person(\"Aaron\", \"Wolen\", role = \"ctb\"),\n person(\"Ashley\", \"Manton\", role = \"ctb\"),\n person(\"Atsushi\", \"Yasumoto\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8335-495X\")),\n person(\"Ben\", \"Baumer\", role = \"ctb\"),\n person(\"Brian\", \"Diggs\", role = \"ctb\"),\n person(\"Brian\", \"Zhang\", role = \"ctb\"),\n person(\"Bulat\", \"Yapparov\", role = \"ctb\"),\n person(\"Cassio\", \"Pereira\", role = \"ctb\"),\n person(\"Christophe\", \"Dervieux\", role = \"ctb\"),\n person(\"David\", \"Hall\", role = \"ctb\"),\n person(\"David\", \"Hugh-Jones\", role = \"ctb\"),\n person(\"David\", \"Robinson\", role = \"ctb\"),\n person(\"Doug\", \"Hemken\", role = \"ctb\"),\n person(\"Duncan\", \"Murdoch\", role = \"ctb\"),\n person(\"Elio\", \"Campitelli\", role = \"ctb\"),\n person(\"Ellis\", \"Hughes\", role = \"ctb\"),\n person(\"Emily\", \"Riederer\", role = \"ctb\"),\n person(\"Fabian\", \"Hirschmann\", role = \"ctb\"),\n person(\"Fitch\", \"Simeon\", role = \"ctb\"),\n person(\"Forest\", \"Fang\", role = \"ctb\"),\n person(c(\"Frank\", \"E\", \"Harrell\", \"Jr\"), role = \"ctb\", comment = \"the Sweavel package at inst/misc/Sweavel.sty\"),\n person(\"Garrick\", \"Aden-Buie\", role = \"ctb\"),\n person(\"Gregoire\", \"Detrez\", role = \"ctb\"),\n person(\"Hadley\", \"Wickham\", role = \"ctb\"),\n person(\"Hao\", \"Zhu\", role = \"ctb\"),\n person(\"Heewon\", \"Jeon\", role = \"ctb\"),\n person(\"Henrik\", \"Bengtsson\", role = \"ctb\"),\n person(\"Hiroaki\", \"Yutani\", role = \"ctb\"),\n person(\"Ian\", \"Lyttle\", role = \"ctb\"),\n person(\"Hodges\", \"Daniel\", role = \"ctb\"),\n person(\"Jacob\", \"Bien\", role = \"ctb\"),\n person(\"Jake\", \"Burkhead\", role = \"ctb\"),\n person(\"James\", \"Manton\", role = \"ctb\"),\n person(\"Jared\", \"Lander\", role = \"ctb\"),\n person(\"Jason\", \"Punyon\", role = \"ctb\"),\n person(\"Javier\", \"Luraschi\", role = \"ctb\"),\n person(\"Jeff\", \"Arnold\", role = \"ctb\"),\n person(\"Jenny\", \"Bryan\", role = \"ctb\"),\n person(\"Jeremy\", \"Ashkenas\", role = c(\"ctb\", \"cph\"), comment = \"the CSS file at inst/misc/docco-classic.css\"),\n person(\"Jeremy\", \"Stephens\", role = \"ctb\"),\n person(\"Jim\", \"Hester\", role = \"ctb\"),\n person(\"Joe\", \"Cheng\", role = \"ctb\"),\n person(\"Johannes\", \"Ranke\", role = \"ctb\"),\n person(\"John\", \"Honaker\", role = \"ctb\"),\n person(\"John\", \"Muschelli\", role = \"ctb\"),\n person(\"Jonathan\", \"Keane\", role = \"ctb\"),\n person(\"JJ\", \"Allaire\", role = \"ctb\"),\n person(\"Johan\", \"Toloe\", role = \"ctb\"),\n person(\"Jonathan\", \"Sidi\", role = \"ctb\"),\n person(\"Joseph\", \"Larmarange\", role = \"ctb\"),\n person(\"Julien\", \"Barnier\", role = \"ctb\"),\n person(\"Kaiyin\", \"Zhong\", role = \"ctb\"),\n person(\"Kamil\", \"Slowikowski\", role = \"ctb\"),\n person(\"Karl\", \"Forner\", role = \"ctb\"),\n person(c(\"Kevin\", \"K.\"), \"Smith\", role = \"ctb\"),\n person(\"Kirill\", \"Mueller\", role = \"ctb\"),\n person(\"Kohske\", \"Takahashi\", role = \"ctb\"),\n person(\"Lorenz\", \"Walthert\", role = \"ctb\"),\n person(\"Lucas\", \"Gallindo\", role = \"ctb\"),\n person(\"Marius\", \"Hofert\", role = \"ctb\"),\n person(\"Martin\", \"Modrák\", role = \"ctb\"),\n person(\"Michael\", \"Chirico\", role = \"ctb\"),\n person(\"Michael\", \"Friendly\", role = \"ctb\"),\n person(\"Michal\", \"Bojanowski\", role = \"ctb\"),\n person(\"Michel\", \"Kuhlmann\", role = \"ctb\"),\n person(\"Miller\", \"Patrick\", role = \"ctb\"),\n person(\"Nacho\", \"Caballero\", role = \"ctb\"),\n person(\"Nick\", \"Salkowski\", role = \"ctb\"),\n person(\"Niels Richard\", \"Hansen\", role = \"ctb\"),\n person(\"Noam\", \"Ross\", role = \"ctb\"),\n person(\"Obada\", \"Mahdi\", role = \"ctb\"),\n person(\"Pavel N.\", \"Krivitsky\", role = \"ctb\", comment=c(ORCID = \"0000-0002-9101-3362\")),\n person(\"Pedro\", \"Faria\", role = \"ctb\"),\n person(\"Qiang\", \"Li\", role = \"ctb\"),\n person(\"Ramnath\", \"Vaidyanathan\", role = \"ctb\"),\n person(\"Richard\", \"Cotton\", role = \"ctb\"),\n person(\"Robert\", \"Krzyzanowski\", role = \"ctb\"),\n person(\"Rodrigo\", \"Copetti\", role = \"ctb\"),\n person(\"Romain\", \"Francois\", role = \"ctb\"),\n person(\"Ruaridh\", \"Williamson\", role = \"ctb\"),\n person(\"Sagiru\", \"Mati\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1413-3974\")),\n person(\"Scott\", \"Kostyshak\", role = \"ctb\"),\n person(\"Sebastian\", \"Meyer\", role = \"ctb\"),\n person(\"Sietse\", \"Brouwer\", role = \"ctb\"),\n person(c(\"Simon\", \"de\"), \"Bernard\", role = \"ctb\"),\n person(\"Sylvain\", \"Rousseau\", role = \"ctb\"),\n person(\"Taiyun\", \"Wei\", role = \"ctb\"),\n person(\"Thibaut\", \"Assus\", role = \"ctb\"),\n person(\"Thibaut\", \"Lamadon\", role = \"ctb\"),\n person(\"Thomas\", \"Leeper\", role = \"ctb\"),\n person(\"Tim\", \"Mastny\", role = \"ctb\"),\n person(\"Tom\", \"Torsney-Weir\", role = \"ctb\"),\n person(\"Trevor\", \"Davis\", role = \"ctb\"),\n person(\"Viktoras\", \"Veitas\", role = \"ctb\"),\n person(\"Weicheng\", \"Zhu\", role = \"ctb\"),\n person(\"Wush\", \"Wu\", role = \"ctb\"),\n person(\"Zachary\", \"Foster\", role = \"ctb\"),\n person(\"Zhian N.\", \"Kamvar\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1458-7108\")),\n person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Provides a general-purpose tool for dynamic report generation in R\n using Literate Programming techniques.", + "Depends": "R (>= 3.6.0)", + "Imports": "evaluate (>= 0.15), highr (>= 0.11), methods, tools, xfun (>=\n0.52), yaml (>= 2.1.19)", + "Suggests": "bslib, DBI (>= 0.4-1), digest, formatR, gifski, gridSVG,\nhtmlwidgets (>= 0.7), jpeg, JuliaCall (>= 0.11.1), magick,\nlitedown, markdown (>= 1.3), otel, otelsdk, png, ragg,\nreticulate (>= 1.4), rgl (>= 0.95.1201), rlang, rmarkdown,\nsass, showtext, styler (>= 1.2.0), targets (>= 0.6.0), testit,\ntibble, tikzDevice (>= 0.10), tinytex (>= 0.56), webshot,\nrstudioapi, svglite", + "License": "GPL", + "URL": "https://yihui.org/knitr/", + "BugReports": "https://github.com/yihui/knitr/issues", + "Encoding": "UTF-8", + "VignetteBuilder": "litedown, knitr", + "SystemRequirements": "Package vignettes based on R Markdown v2 or\nreStructuredText require Pandoc (http://pandoc.org). The\nfunction rst2pdf() requires rst2pdf\n(https://github.com/rst2pdf/rst2pdf).", + "Collate": "'block.R' 'cache.R' 'citation.R' 'hooks-html.R' 'plot.R'\n'utils.R' 'defaults.R' 'concordance.R' 'engine.R' 'highlight.R'\n'themes.R' 'header.R' 'hooks-asciidoc.R' 'hooks-chunk.R'\n'hooks-extra.R' 'hooks-latex.R' 'hooks-md.R' 'hooks-rst.R'\n'hooks-textile.R' 'hooks.R' 'otel.R' 'output.R' 'package.R'\n'pandoc.R' 'params.R' 'parser.R' 'pattern.R' 'rocco.R' 'spin.R'\n'table.R' 'template.R' 'utils-conversion.R' 'utils-rd2html.R'\n'utils-string.R' 'utils-sweave.R' 'utils-upload.R'\n'utils-vignettes.R' 'zzz.R'", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Packaged": "2025-12-19 15:19:25 UTC; yihui", + "Author": "Yihui Xie [aut, cre] (ORCID: ,\n URL: https://yihui.org),\n Abhraneel Sarma [ctb],\n Adam Vogt [ctb],\n Alastair Andrew [ctb],\n Alex Zvoleff [ctb],\n Amar Al-Zubaidi [ctb],\n Andre Simon [ctb] (the CSS files under inst/themes/ were derived from\n the Highlight package http://www.andre-simon.de),\n Aron Atkins [ctb],\n Aaron Wolen [ctb],\n Ashley Manton [ctb],\n Atsushi Yasumoto [ctb] (ORCID: ),\n Ben Baumer [ctb],\n Brian Diggs [ctb],\n Brian Zhang [ctb],\n Bulat Yapparov [ctb],\n Cassio Pereira [ctb],\n Christophe Dervieux [ctb],\n David Hall [ctb],\n David Hugh-Jones [ctb],\n David Robinson [ctb],\n Doug Hemken [ctb],\n Duncan Murdoch [ctb],\n Elio Campitelli [ctb],\n Ellis Hughes [ctb],\n Emily Riederer [ctb],\n Fabian Hirschmann [ctb],\n Fitch Simeon [ctb],\n Forest Fang [ctb],\n Frank E Harrell Jr [ctb] (the Sweavel package at inst/misc/Sweavel.sty),\n Garrick Aden-Buie [ctb],\n Gregoire Detrez [ctb],\n Hadley Wickham [ctb],\n Hao Zhu [ctb],\n Heewon Jeon [ctb],\n Henrik Bengtsson [ctb],\n Hiroaki Yutani [ctb],\n Ian Lyttle [ctb],\n Hodges Daniel [ctb],\n Jacob Bien [ctb],\n Jake Burkhead [ctb],\n James Manton [ctb],\n Jared Lander [ctb],\n Jason Punyon [ctb],\n Javier Luraschi [ctb],\n Jeff Arnold [ctb],\n Jenny Bryan [ctb],\n Jeremy Ashkenas [ctb, cph] (the CSS file at\n inst/misc/docco-classic.css),\n Jeremy Stephens [ctb],\n Jim Hester [ctb],\n Joe Cheng [ctb],\n Johannes Ranke [ctb],\n John Honaker [ctb],\n John Muschelli [ctb],\n Jonathan Keane [ctb],\n JJ Allaire [ctb],\n Johan Toloe [ctb],\n Jonathan Sidi [ctb],\n Joseph Larmarange [ctb],\n Julien Barnier [ctb],\n Kaiyin Zhong [ctb],\n Kamil Slowikowski [ctb],\n Karl Forner [ctb],\n Kevin K. Smith [ctb],\n Kirill Mueller [ctb],\n Kohske Takahashi [ctb],\n Lorenz Walthert [ctb],\n Lucas Gallindo [ctb],\n Marius Hofert [ctb],\n Martin Modrák [ctb],\n Michael Chirico [ctb],\n Michael Friendly [ctb],\n Michal Bojanowski [ctb],\n Michel Kuhlmann [ctb],\n Miller Patrick [ctb],\n Nacho Caballero [ctb],\n Nick Salkowski [ctb],\n Niels Richard Hansen [ctb],\n Noam Ross [ctb],\n Obada Mahdi [ctb],\n Pavel N. Krivitsky [ctb] (ORCID:\n ),\n Pedro Faria [ctb],\n Qiang Li [ctb],\n Ramnath Vaidyanathan [ctb],\n Richard Cotton [ctb],\n Robert Krzyzanowski [ctb],\n Rodrigo Copetti [ctb],\n Romain Francois [ctb],\n Ruaridh Williamson [ctb],\n Sagiru Mati [ctb] (ORCID: ),\n Scott Kostyshak [ctb],\n Sebastian Meyer [ctb],\n Sietse Brouwer [ctb],\n Simon de Bernard [ctb],\n Sylvain Rousseau [ctb],\n Taiyun Wei [ctb],\n Thibaut Assus [ctb],\n Thibaut Lamadon [ctb],\n Thomas Leeper [ctb],\n Tim Mastny [ctb],\n Tom Torsney-Weir [ctb],\n Trevor Davis [ctb],\n Viktoras Veitas [ctb],\n Weicheng Zhu [ctb],\n Wush Wu [ctb],\n Zachary Foster [ctb],\n Zhian N. Kamvar [ctb] (ORCID: ),\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN", + "Date/Publication": "2025-12-20 14:30:02 UTC", + "Built": "R 4.4.3; ; 2025-12-21 22:33:02 UTC; unix" + } + }, + "labeling": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "labeling", + "Type": "Package", + "Title": "Axis Labeling", + "Version": "0.4.3", + "Date": "2023-08-29", + "Author": "Justin Talbot,", + "Maintainer": "Nuno Sempere ", + "Description": "Functions which provide a range of axis labeling algorithms. ", + "License": "MIT + file LICENSE | Unlimited", + "Collate": "'labeling.R'", + "NeedsCompilation": "no", + "Imports": "stats, graphics", + "Packaged": "2023-08-29 21:01:57 UTC; loki", + "Repository": "CRAN", + "Date/Publication": "2023-08-29 22:20:02 UTC", + "Built": "R 4.4.0; ; 2024-04-05 15:00:54 UTC; unix" + } + }, + "later": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "later", + "Type": "Package", + "Title": "Utilities for Scheduling Functions to Execute Later with Event\nLoops", + "Version": "1.4.1", + "Authors@R": "c(\n person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@posit.co\"),\n person(\"Joe\", \"Cheng\", role = c(\"aut\"), email = \"joe@posit.co\"),\n person(\"Charlie\", \"Gao\", role = c(\"aut\"), email = \"charlie.gao@shikokuchuo.net\", comment = c(ORCID = \"0000-0002-0750-061X\")),\n person(family = \"Posit Software, PBC\", role = \"cph\"),\n person(\"Marcus\", \"Geelnard\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\"),\n person(\"Evan\", \"Nemerson\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\")\n )", + "Description": "Executes arbitrary R or C functions some time after the current\n time, after the R execution stack has emptied. The functions are scheduled\n in an event loop.", + "URL": "https://r-lib.github.io/later/, https://github.com/r-lib/later", + "BugReports": "https://github.com/r-lib/later/issues", + "License": "MIT + file LICENSE", + "Imports": "Rcpp (>= 0.12.9), rlang", + "LinkingTo": "Rcpp", + "RoxygenNote": "7.3.2", + "Suggests": "knitr, nanonext, R6, rmarkdown, testthat (>= 2.1.0)", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Packaged": "2024-11-27 22:51:17 UTC; jcheng", + "Author": "Winston Chang [aut, cre],\n Joe Cheng [aut],\n Charlie Gao [aut] (),\n Posit Software, PBC [cph],\n Marcus Geelnard [ctb, cph] (TinyCThread library,\n https://tinycthread.github.io/),\n Evan Nemerson [ctb, cph] (TinyCThread library,\n https://tinycthread.github.io/)", + "Maintainer": "Winston Chang ", + "Repository": "CRAN", + "Date/Publication": "2024-11-27 23:40:02 UTC", + "Built": "R 4.4.1; aarch64-apple-darwin20; 2024-11-27 23:48:59 UTC; unix", + "Archs": "later.so.dSYM" + } + }, + "lattice": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "lattice", + "Version": "0.22-6", + "Date": "2024-03-20", + "Priority": "recommended", + "Title": "Trellis Graphics for R", + "Authors@R": "c(person(\"Deepayan\", \"Sarkar\", role = c(\"aut\", \"cre\"),\n\t email = \"deepayan.sarkar@r-project.org\",\n\t\t comment = c(ORCID = \"0000-0003-4107-1553\")),\n person(\"Felix\", \"Andrews\", role = \"ctb\"),\n\t person(\"Kevin\", \"Wright\", role = \"ctb\", comment = \"documentation\"),\n\t person(\"Neil\", \"Klepeis\", role = \"ctb\"),\n\t person(\"Johan\", \"Larsson\", role = \"ctb\", comment = \"miscellaneous improvements\"),\n person(\"Zhijian (Jason)\", \"Wen\", role = \"cph\", comment = \"filled contour code\"),\n person(\"Paul\", \"Murrell\", role = \"ctb\", email = \"paul@stat.auckland.ac.nz\"),\n\t person(\"Stefan\", \"Eng\", role = \"ctb\", comment = \"violin plot improvements\"),\n\t person(\"Achim\", \"Zeileis\", role = \"ctb\", comment = \"modern colors\"),\n person(\"Alexandre\", \"Courtiol\", role = \"ctb\", comment = \"generics for larrows, lpolygon, lrect and lsegments\")\n\t )", + "Description": "A powerful and elegant high-level data visualization\n system inspired by Trellis graphics, with an emphasis on\n multivariate data. Lattice is sufficient for typical graphics needs,\n and is also flexible enough to handle most nonstandard requirements.\n See ?Lattice for an introduction.", + "Depends": "R (>= 4.0.0)", + "Suggests": "KernSmooth, MASS, latticeExtra, colorspace", + "Imports": "grid, grDevices, graphics, stats, utils", + "Enhances": "chron, zoo", + "LazyLoad": "yes", + "LazyData": "yes", + "License": "GPL (>= 2)", + "URL": "https://lattice.r-forge.r-project.org/", + "BugReports": "https://github.com/deepayan/lattice/issues", + "NeedsCompilation": "yes", + "Packaged": "2024-03-20 03:08:45 UTC; deepayan", + "Author": "Deepayan Sarkar [aut, cre] (),\n Felix Andrews [ctb],\n Kevin Wright [ctb] (documentation),\n Neil Klepeis [ctb],\n Johan Larsson [ctb] (miscellaneous improvements),\n Zhijian (Jason) Wen [cph] (filled contour code),\n Paul Murrell [ctb],\n Stefan Eng [ctb] (violin plot improvements),\n Achim Zeileis [ctb] (modern colors),\n Alexandre Courtiol [ctb] (generics for larrows, lpolygon, lrect and\n lsegments)", + "Maintainer": "Deepayan Sarkar ", + "Repository": "CRAN", + "Date/Publication": "2024-03-20 06:10:02 UTC", + "Built": "R 4.4.2; aarch64-apple-darwin20; 2024-11-01 00:59:20 UTC; unix" + } + }, + "lifecycle": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "lifecycle", + "Title": "Manage the Life Cycle of your Package Functions", + "Version": "1.0.4", + "Authors@R": "c(\n person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0003-4757-117X\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Manage the life cycle of your exported functions with shared\n conventions, documentation badges, and user-friendly deprecation\n warnings.", + "License": "MIT + file LICENSE", + "URL": "https://lifecycle.r-lib.org/, https://github.com/r-lib/lifecycle", + "BugReports": "https://github.com/r-lib/lifecycle/issues", + "Depends": "R (>= 3.6)", + "Imports": "cli (>= 3.4.0), glue, rlang (>= 1.1.0)", + "Suggests": "covr, crayon, knitr, lintr, rmarkdown, testthat (>= 3.0.1),\ntibble, tidyverse, tools, vctrs, withr", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate, usethis", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.1", + "NeedsCompilation": "no", + "Packaged": "2023-11-06 16:07:36 UTC; lionel", + "Author": "Lionel Henry [aut, cre],\n Hadley Wickham [aut] (),\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN", + "Date/Publication": "2023-11-07 10:10:10 UTC", + "Built": "R 4.4.0; ; 2024-04-05 22:31:19 UTC; unix" + } + }, + "litedown": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "litedown", + "Type": "Package", + "Title": "A Lightweight Version of R Markdown", + "Version": "0.9", + "Authors@R": "c(\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")),\n person(\"Tim\", \"Taylor\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8587-7113\")),\n person()\n )", + "Description": "Render R Markdown to Markdown (without using 'knitr'), and Markdown\n to lightweight HTML or 'LaTeX' documents with the 'commonmark' package (instead\n of 'Pandoc'). Some missing Markdown features in 'commonmark' are also\n supported, such as raw HTML or 'LaTeX' blocks, 'LaTeX' math, superscripts,\n subscripts, footnotes, element attributes, and appendices,\n but not all 'Pandoc' Markdown features are (or will be) supported. With\n additional JavaScript and CSS, you can also create HTML slides and articles.\n This package can be viewed as a trimmed-down version of R Markdown and\n 'knitr'. It does not aim at rich Markdown features or a large variety of\n output formats (the primary formats are HTML and 'LaTeX'). Book and website\n projects of multiple input documents are also supported.", + "Depends": "R (>= 3.2.0)", + "Imports": "utils, commonmark (>= 2.0.0), xfun (>= 0.55)", + "Suggests": "rbibutils, rstudioapi, tinytex", + "License": "MIT + file LICENSE", + "URL": "https://github.com/yihui/litedown", + "BugReports": "https://github.com/yihui/litedown/issues", + "VignetteBuilder": "litedown", + "RoxygenNote": "7.3.3", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Packaged": "2025-12-18 16:42:41 UTC; yihui", + "Author": "Yihui Xie [aut, cre] (ORCID: ,\n URL: https://yihui.org),\n Tim Taylor [ctb] (ORCID: )", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN", + "Date/Publication": "2025-12-18 17:50:02 UTC", + "Built": "R 4.4.3; ; 2025-12-19 08:13:36 UTC; unix" + } + }, + "lubridate": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Type": "Package", + "Package": "lubridate", + "Title": "Make Dealing with Dates a Little Easier", + "Version": "1.9.4", + "Authors@R": "c(\n person(\"Vitalie\", \"Spinu\", , \"spinuvit@gmail.com\", role = c(\"aut\", \"cre\")),\n person(\"Garrett\", \"Grolemund\", role = \"aut\"),\n person(\"Hadley\", \"Wickham\", role = \"aut\"),\n person(\"Davis\", \"Vaughan\", role = \"ctb\"),\n person(\"Ian\", \"Lyttle\", role = \"ctb\"),\n person(\"Imanuel\", \"Costigan\", role = \"ctb\"),\n person(\"Jason\", \"Law\", role = \"ctb\"),\n person(\"Doug\", \"Mitarotonda\", role = \"ctb\"),\n person(\"Joseph\", \"Larmarange\", role = \"ctb\"),\n person(\"Jonathan\", \"Boiser\", role = \"ctb\"),\n person(\"Chel Hee\", \"Lee\", role = \"ctb\")\n )", + "Maintainer": "Vitalie Spinu ", + "Description": "Functions to work with date-times and time-spans: fast and\n user friendly parsing of date-time data, extraction and updating of\n components of a date-time (years, months, days, hours, minutes, and\n seconds), algebraic manipulation on date-time and time-span objects.\n The 'lubridate' package has a consistent and memorable syntax that\n makes working with dates easy and fun.", + "License": "GPL (>= 2)", + "URL": "https://lubridate.tidyverse.org,\nhttps://github.com/tidyverse/lubridate", + "BugReports": "https://github.com/tidyverse/lubridate/issues", + "Depends": "methods, R (>= 3.2)", + "Imports": "generics, timechange (>= 0.3.0)", + "Suggests": "covr, knitr, rmarkdown, testthat (>= 2.1.0), vctrs (>= 0.6.5)", + "Enhances": "chron, data.table, timeDate, tis, zoo", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.2.3", + "SystemRequirements": "C++11, A system with zoneinfo data (e.g.\n/usr/share/zoneinfo). On Windows the zoneinfo included with R\nis used.", + "Collate": "'Dates.r' 'POSIXt.r' 'util.r' 'parse.r' 'timespans.r'\n'intervals.r' 'difftimes.r' 'durations.r' 'periods.r'\n'accessors-date.R' 'accessors-day.r' 'accessors-dst.r'\n'accessors-hour.r' 'accessors-minute.r' 'accessors-month.r'\n'accessors-quarter.r' 'accessors-second.r' 'accessors-tz.r'\n'accessors-week.r' 'accessors-year.r' 'am-pm.r' 'time-zones.r'\n'numeric.r' 'coercion.r' 'constants.r' 'cyclic_encoding.r'\n'data.r' 'decimal-dates.r' 'deprecated.r' 'format_ISO8601.r'\n'guess.r' 'hidden.r' 'instants.r' 'leap-years.r'\n'ops-addition.r' 'ops-compare.r' 'ops-division.r'\n'ops-integer-division.r' 'ops-m+.r' 'ops-modulo.r'\n'ops-multiplication.r' 'ops-subtraction.r' 'package.r'\n'pretty.r' 'round.r' 'stamp.r' 'tzdir.R' 'update.r' 'vctrs.R'\n'zzz.R'", + "NeedsCompilation": "yes", + "Packaged": "2024-12-07 23:41:45 UTC; vitalie", + "Author": "Vitalie Spinu [aut, cre],\n Garrett Grolemund [aut],\n Hadley Wickham [aut],\n Davis Vaughan [ctb],\n Ian Lyttle [ctb],\n Imanuel Costigan [ctb],\n Jason Law [ctb],\n Doug Mitarotonda [ctb],\n Joseph Larmarange [ctb],\n Jonathan Boiser [ctb],\n Chel Hee Lee [ctb]", + "Repository": "CRAN", + "Date/Publication": "2024-12-08 12:10:02 UTC", + "Built": "R 4.4.1; aarch64-apple-darwin20; 2024-12-08 12:54:41 UTC; unix", + "Archs": "lubridate.so.dSYM" + } + }, + "magrittr": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Type": "Package", + "Package": "magrittr", + "Title": "A Forward-Pipe Operator for R", + "Version": "2.0.3", + "Authors@R": "c(\n person(\"Stefan Milton\", \"Bache\", , \"stefan@stefanbache.dk\", role = c(\"aut\", \"cph\"),\n comment = \"Original author and creator of magrittr\"),\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"aut\"),\n person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", role = \"cre\"),\n person(\"RStudio\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Provides a mechanism for chaining commands with a new\n forward-pipe operator, %>%. This operator will forward a value, or the\n result of an expression, into the next function call/expression.\n There is flexible support for the type of right-hand side expressions.\n For more information, see package vignette. To quote Rene Magritte,\n \"Ceci n'est pas un pipe.\"", + "License": "MIT + file LICENSE", + "URL": "https://magrittr.tidyverse.org,\nhttps://github.com/tidyverse/magrittr", + "BugReports": "https://github.com/tidyverse/magrittr/issues", + "Depends": "R (>= 3.4.0)", + "Suggests": "covr, knitr, rlang, rmarkdown, testthat", + "VignetteBuilder": "knitr", + "ByteCompile": "Yes", + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.2", + "NeedsCompilation": "yes", + "Packaged": "2022-03-29 09:34:37 UTC; lionel", + "Author": "Stefan Milton Bache [aut, cph] (Original author and creator of\n magrittr),\n Hadley Wickham [aut],\n Lionel Henry [cre],\n RStudio [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN", + "Date/Publication": "2022-03-30 07:30:09 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-04-05 15:00:02 UTC; unix", + "Archs": "magrittr.so.dSYM" + } + }, + "markdown": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "markdown", + "Type": "Package", + "Title": "Render Markdown with 'commonmark'", + "Version": "2.0", + "Authors@R": "c(\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(\"JJ\", \"Allaire\", role = \"aut\"),\n person(\"Jeffrey\", \"Horner\", role = \"aut\"),\n person(\"Henrik\", \"Bengtsson\", role = \"ctb\"),\n person(\"Jim\", \"Hester\", role = \"ctb\"),\n person(\"Yixuan\", \"Qiu\", role = \"ctb\"),\n person(\"Kohske\", \"Takahashi\", role = \"ctb\"),\n person(\"Adam\", \"November\", role = \"ctb\"),\n person(\"Nacho\", \"Caballero\", role = \"ctb\"),\n person(\"Jeroen\", \"Ooms\", role = \"ctb\"),\n person(\"Thomas\", \"Leeper\", role = \"ctb\"),\n person(\"Joe\", \"Cheng\", role = \"ctb\"),\n person(\"Andrzej\", \"Oles\", role = \"ctb\"),\n person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Render Markdown to full and lightweight HTML/LaTeX documents with\n the 'commonmark' package. This package has been superseded by 'litedown'.", + "Depends": "R (>= 2.11.1)", + "Imports": "utils, xfun, litedown (>= 0.6)", + "Suggests": "knitr, rmarkdown (>= 2.18), yaml, RCurl", + "License": "MIT + file LICENSE", + "URL": "https://github.com/rstudio/markdown", + "BugReports": "https://github.com/rstudio/markdown/issues", + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Packaged": "2025-03-23 17:06:26 UTC; runner", + "Author": "Yihui Xie [aut, cre] (),\n JJ Allaire [aut],\n Jeffrey Horner [aut],\n Henrik Bengtsson [ctb],\n Jim Hester [ctb],\n Yixuan Qiu [ctb],\n Kohske Takahashi [ctb],\n Adam November [ctb],\n Nacho Caballero [ctb],\n Jeroen Ooms [ctb],\n Thomas Leeper [ctb],\n Joe Cheng [ctb],\n Andrzej Oles [ctb],\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN", + "Date/Publication": "2025-03-23 19:30:03 UTC", + "Built": "R 4.4.1; ; 2025-03-23 20:08:27 UTC; unix" + } + }, + "memoise": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "memoise", + "Title": "'Memoisation' of Functions", + "Version": "2.0.1", + "Authors@R": "\n c(person(given = \"Hadley\",\n family = \"Wickham\",\n role = \"aut\",\n email = \"hadley@rstudio.com\"),\n person(given = \"Jim\",\n family = \"Hester\",\n role = \"aut\"),\n person(given = \"Winston\",\n family = \"Chang\",\n role = c(\"aut\", \"cre\"),\n email = \"winston@rstudio.com\"),\n person(given = \"Kirill\",\n family = \"Müller\",\n role = \"aut\",\n email = \"krlmlr+r@mailbox.org\"),\n person(given = \"Daniel\",\n family = \"Cook\",\n role = \"aut\",\n email = \"danielecook@gmail.com\"),\n person(given = \"Mark\",\n family = \"Edmondson\",\n role = \"ctb\",\n email = \"r@sunholo.com\"))", + "Description": "Cache the results of a function so that when you\n call it again with the same arguments it returns the previously computed\n value.", + "License": "MIT + file LICENSE", + "URL": "https://memoise.r-lib.org, https://github.com/r-lib/memoise", + "BugReports": "https://github.com/r-lib/memoise/issues", + "Imports": "rlang (>= 0.4.10), cachem", + "Suggests": "digest, aws.s3, covr, googleAuthR, googleCloudStorageR, httr,\ntestthat", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.2", + "NeedsCompilation": "no", + "Packaged": "2021-11-24 21:24:50 UTC; jhester", + "Author": "Hadley Wickham [aut],\n Jim Hester [aut],\n Winston Chang [aut, cre],\n Kirill Müller [aut],\n Daniel Cook [aut],\n Mark Edmondson [ctb]", + "Maintainer": "Winston Chang ", + "Repository": "CRAN", + "Date/Publication": "2021-11-26 16:11:10 UTC", + "Built": "R 4.4.0; ; 2024-04-05 22:31:44 UTC; unix" + } + }, + "mgcv": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "mgcv", + "Version": "1.9-1", + "Author": "Simon Wood ", + "Maintainer": "Simon Wood ", + "Title": "Mixed GAM Computation Vehicle with Automatic Smoothness\nEstimation", + "Description": "Generalized additive (mixed) models, some of their extensions and \n other generalized ridge regression with multiple smoothing \n parameter estimation by (Restricted) Marginal Likelihood, \n Generalized Cross Validation and similar, or using iterated \n nested Laplace approximation for fully Bayesian inference. See \n Wood (2017) for an overview. \n Includes a gam() function, a wide variety of smoothers, 'JAGS' \n support and distributions beyond the exponential family. ", + "Priority": "recommended", + "Depends": "R (>= 3.6.0), nlme (>= 3.1-64)", + "Imports": "methods, stats, graphics, Matrix, splines, utils", + "Suggests": "parallel, survival, MASS", + "LazyLoad": "yes", + "ByteCompile": "yes", + "License": "GPL (>= 2)", + "NeedsCompilation": "yes", + "Packaged": "2023-12-20 10:39:06 UTC; sw283", + "Repository": "CRAN", + "Date/Publication": "2023-12-21 00:30:02 UTC", + "Built": "R 4.4.2; aarch64-apple-darwin20; 2024-11-01 00:59:54 UTC; unix" + } + }, + "mime": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "mime", + "Type": "Package", + "Title": "Map Filenames to MIME Types", + "Version": "0.12", + "Authors@R": "c(\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(\"Jeffrey\", \"Horner\", role = \"ctb\"),\n person(\"Beilei\", \"Bian\", role = \"ctb\")\n )", + "Description": "Guesses the MIME type from a filename extension using the data\n derived from /etc/mime.types in UNIX-type systems.", + "Imports": "tools", + "License": "GPL", + "URL": "https://github.com/yihui/mime", + "BugReports": "https://github.com/yihui/mime/issues", + "RoxygenNote": "7.1.1", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Packaged": "2021-09-28 02:06:04 UTC; yihui", + "Author": "Yihui Xie [aut, cre] (),\n Jeffrey Horner [ctb],\n Beilei Bian [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN", + "Date/Publication": "2021-09-28 05:00:05 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-04-05 15:01:19 UTC; unix", + "Archs": "mime.so.dSYM" + } + }, + "munsell": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "munsell", + "Type": "Package", + "Title": "Utilities for Using Munsell Colours", + "Version": "0.5.1", + "Author": "Charlotte Wickham ", + "Maintainer": "Charlotte Wickham ", + "Description": "Provides easy access to, and manipulation of, the Munsell \n colours. Provides a mapping between Munsell's \n original notation (e.g. \"5R 5/10\") and hexadecimal strings suitable \n for use directly in R graphics. Also provides utilities \n to explore slices through the Munsell colour tree, to transform \n Munsell colours and display colour palettes.", + "Suggests": "ggplot2, testthat", + "Imports": "colorspace, methods", + "License": "MIT + file LICENSE", + "URL": "https://cran.r-project.org/package=munsell,\nhttps://github.com/cwickham/munsell/", + "RoxygenNote": "7.3.1", + "Encoding": "UTF-8", + "BugReports": "https://github.com/cwickham/munsell/issues", + "NeedsCompilation": "no", + "Packaged": "2024-04-01 20:42:09 UTC; charlottewickham", + "Repository": "CRAN", + "Date/Publication": "2024-04-01 23:40:10 UTC", + "Built": "R 4.4.0; ; 2024-04-05 22:31:15 UTC; unix" + } + }, + "nlme": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "nlme", + "Version": "3.1-166", + "Date": "2024-08-13", + "Priority": "recommended", + "Title": "Linear and Nonlinear Mixed Effects Models", + "Authors@R": "c(person(\"José\", \"Pinheiro\", role = \"aut\", comment = \"S version\"),\n person(\"Douglas\", \"Bates\", role = \"aut\", comment = \"up to 2007\"),\n person(\"Saikat\", \"DebRoy\", role = \"ctb\", comment = \"up to 2002\"),\n person(\"Deepayan\", \"Sarkar\", role = \"ctb\", comment = \"up to 2005\"),\n person(\"EISPACK authors\", role = \"ctb\", comment = \"src/rs.f\"),\n\t person(\"Siem\", \"Heisterkamp\", role = \"ctb\", comment = \"Author fixed sigma\"),\n person(\"Bert\", \"Van Willigen\",role = \"ctb\", comment = \"Programmer fixed sigma\"),\n person(\"Johannes\", \"Ranke\", role = \"ctb\", comment = \"varConstProp()\"),\n\t person(\"R Core Team\", email = \"R-core@R-project.org\",\n role = c(\"aut\", \"cre\")))", + "Contact": "see 'MailingList'", + "Description": "Fit and compare Gaussian linear and nonlinear mixed-effects models.", + "Depends": "R (>= 3.6.0)", + "Imports": "graphics, stats, utils, lattice", + "Suggests": "MASS, SASmixed", + "LazyData": "yes", + "Encoding": "UTF-8", + "License": "GPL (>= 2)", + "BugReports": "https://bugs.r-project.org", + "MailingList": "R-help@r-project.org", + "URL": "https://svn.r-project.org/R-packages/trunk/nlme/", + "NeedsCompilation": "yes", + "Packaged": "2024-08-14 04:26:18 UTC; hornik", + "Author": "José Pinheiro [aut] (S version),\n Douglas Bates [aut] (up to 2007),\n Saikat DebRoy [ctb] (up to 2002),\n Deepayan Sarkar [ctb] (up to 2005),\n EISPACK authors [ctb] (src/rs.f),\n Siem Heisterkamp [ctb] (Author fixed sigma),\n Bert Van Willigen [ctb] (Programmer fixed sigma),\n Johannes Ranke [ctb] (varConstProp()),\n R Core Team [aut, cre]", + "Maintainer": "R Core Team ", + "Repository": "CRAN", + "Date/Publication": "2024-08-14 06:36:33 UTC", + "Built": "R 4.4.2; aarch64-apple-darwin20; 2024-11-01 00:59:25 UTC; unix" + } + }, + "pillar": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "pillar", + "Title": "Coloured Formatting for Columns", + "Version": "1.9.0", + "Authors@R": "\n c(person(given = \"Kirill\",\n family = \"M\\u00fcller\",\n role = c(\"aut\", \"cre\"),\n email = \"kirill@cynkra.com\",\n comment = c(ORCID = \"0000-0002-1416-3412\")),\n person(given = \"Hadley\",\n family = \"Wickham\",\n role = \"aut\"),\n person(given = \"RStudio\",\n role = \"cph\"))", + "Description": "Provides 'pillar' and 'colonnade' generics designed\n for formatting columns of data using the full range of colours\n provided by modern terminals.", + "License": "MIT + file LICENSE", + "URL": "https://pillar.r-lib.org/, https://github.com/r-lib/pillar", + "BugReports": "https://github.com/r-lib/pillar/issues", + "Imports": "cli (>= 2.3.0), fansi, glue, lifecycle, rlang (>= 1.0.2), utf8\n(>= 1.1.0), utils, vctrs (>= 0.5.0)", + "Suggests": "bit64, DBI, debugme, DiagrammeR, dplyr, formattable, ggplot2,\nknitr, lubridate, nanotime, nycflights13, palmerpenguins,\nrmarkdown, scales, stringi, survival, testthat (>= 3.1.1),\ntibble, units (>= 0.7.2), vdiffr, withr", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Config/testthat/start-first": "format_multi_fuzz, format_multi_fuzz_2,\nformat_multi, ctl_colonnade, ctl_colonnade_1, ctl_colonnade_2", + "Config/autostyle/scope": "line_breaks", + "Config/autostyle/strict": "true", + "Config/gha/extra-packages": "DiagrammeR=?ignore-before-r=3.5.0", + "Config/Needs/website": "tidyverse/tidytemplate", + "NeedsCompilation": "no", + "Packaged": "2023-03-21 08:42:46 UTC; kirill", + "Author": "Kirill Müller [aut, cre] (),\n Hadley Wickham [aut],\n RStudio [cph]", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN", + "Date/Publication": "2023-03-22 08:10:02 UTC", + "Built": "R 4.4.0; ; 2024-04-06 06:41:19 UTC; unix" + } + }, + "pkgconfig": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "pkgconfig", + "Title": "Private Configuration for 'R' Packages", + "Version": "2.0.3", + "Author": "Gábor Csárdi", + "Maintainer": "Gábor Csárdi ", + "Description": "Set configuration options on a per-package basis.\n Options set by a given package only apply to that package,\n other packages are unaffected.", + "License": "MIT + file LICENSE", + "LazyData": "true", + "Imports": "utils", + "Suggests": "covr, testthat, disposables (>= 1.0.3)", + "URL": "https://github.com/r-lib/pkgconfig#readme", + "BugReports": "https://github.com/r-lib/pkgconfig/issues", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Packaged": "2019-09-22 08:42:40 UTC; gaborcsardi", + "Repository": "CRAN", + "Date/Publication": "2019-09-22 09:20:02 UTC", + "Built": "R 4.4.0; ; 2024-04-05 15:00:21 UTC; unix" + } + }, + "prettyunits": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "prettyunits", + "Title": "Pretty, Human Readable Formatting of Quantities", + "Version": "1.2.0", + "Authors@R": "c(\n person(\"Gabor\", \"Csardi\", email=\"csardi.gabor@gmail.com\", role=c(\"aut\", \"cre\")),\n person(\"Bill\", \"Denney\", email=\"wdenney@humanpredictions.com\", role=c(\"ctb\"), comment=c(ORCID=\"0000-0002-5759-428X\")),\n person(\"Christophe\", \"Regouby\", email=\"christophe.regouby@free.fr\", role=c(\"ctb\"))\n )", + "Description": "Pretty, human readable formatting of quantities.\n Time intervals: '1337000' -> '15d 11h 23m 20s'.\n Vague time intervals: '2674000' -> 'about a month ago'.\n Bytes: '1337' -> '1.34 kB'.\n Rounding: '99' with 3 significant digits -> '99.0'\n p-values: '0.00001' -> '<0.0001'.\n Colors: '#FF0000' -> 'red'.\n Quantities: '1239437' -> '1.24 M'.", + "License": "MIT + file LICENSE", + "URL": "https://github.com/r-lib/prettyunits", + "BugReports": "https://github.com/r-lib/prettyunits/issues", + "Depends": "R(>= 2.10)", + "Suggests": "codetools, covr, testthat", + "RoxygenNote": "7.2.3", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Packaged": "2023-09-24 10:53:19 UTC; gaborcsardi", + "Author": "Gabor Csardi [aut, cre],\n Bill Denney [ctb] (),\n Christophe Regouby [ctb]", + "Maintainer": "Gabor Csardi ", + "Repository": "CRAN", + "Date/Publication": "2023-09-24 21:10:02 UTC", + "Built": "R 4.4.0; ; 2024-04-05 15:02:55 UTC; unix" + } + }, + "progress": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "progress", + "Title": "Terminal Progress Bars", + "Version": "1.2.3", + "Authors@R": "c(\n person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")),\n person(\"Rich\", \"FitzJohn\", role = \"aut\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Configurable Progress bars, they may include percentage,\n elapsed time, and/or the estimated completion time. They work in\n terminals, in 'Emacs' 'ESS', 'RStudio', 'Windows' 'Rgui' and the\n 'macOS' 'R.app'. The package also provides a 'C++' 'API', that works\n with or without 'Rcpp'.", + "License": "MIT + file LICENSE", + "URL": "https://github.com/r-lib/progress#readme,\nhttp://r-lib.github.io/progress/", + "BugReports": "https://github.com/r-lib/progress/issues", + "Depends": "R (>= 3.6)", + "Imports": "crayon, hms, prettyunits, R6", + "Suggests": "Rcpp, testthat (>= 3.0.0), withr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "no", + "Packaged": "2023-12-05 09:33:10 UTC; gaborcsardi", + "Author": "Gábor Csárdi [aut, cre],\n Rich FitzJohn [aut],\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Gábor Csárdi ", + "Repository": "CRAN", + "Date/Publication": "2023-12-06 10:30:02 UTC", + "Built": "R 4.4.0; ; 2024-04-06 09:13:33 UTC; unix" + } + }, + "promises": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Type": "Package", + "Package": "promises", + "Title": "Abstractions for Promise-Based Asynchronous Programming", + "Version": "1.3.2", + "Authors@R": "c(\n person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Provides fundamental abstractions for doing asynchronous\n programming in R using promises. Asynchronous programming is useful\n for allowing a single R process to orchestrate multiple tasks in the\n background while also attending to something else. Semantics are\n similar to 'JavaScript' promises, but with a syntax that is idiomatic\n R.", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/promises/,\nhttps://github.com/rstudio/promises", + "BugReports": "https://github.com/rstudio/promises/issues", + "Imports": "fastmap (>= 1.1.0), later, magrittr (>= 1.5), R6, Rcpp, rlang,\nstats", + "Suggests": "future (>= 1.21.0), knitr, purrr, rmarkdown, spelling,\ntestthat, vembedr", + "LinkingTo": "later, Rcpp", + "VignetteBuilder": "knitr", + "Config/Needs/website": "rsconnect", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "yes", + "Packaged": "2024-11-27 23:38:47 UTC; jcheng", + "Author": "Joe Cheng [aut, cre],\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Joe Cheng ", + "Repository": "CRAN", + "Date/Publication": "2024-11-28 00:40:02 UTC", + "Built": "R 4.4.1; aarch64-apple-darwin20; 2024-11-28 01:18:58 UTC; unix", + "Archs": "promises.so.dSYM" + } + }, + "purrr": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "purrr", + "Title": "Functional Programming Tools", + "Version": "1.0.2", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0003-4757-117X\")),\n person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", role = \"aut\"),\n person(\"RStudio\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "A complete and consistent functional programming toolkit for\n R.", + "License": "MIT + file LICENSE", + "URL": "https://purrr.tidyverse.org/, https://github.com/tidyverse/purrr", + "BugReports": "https://github.com/tidyverse/purrr/issues", + "Depends": "R (>= 3.5.0)", + "Imports": "cli (>= 3.6.1), lifecycle (>= 1.0.3), magrittr (>= 1.5.0),\nrlang (>= 1.1.1), vctrs (>= 0.6.3)", + "Suggests": "covr, dplyr (>= 0.7.8), httr, knitr, lubridate, rmarkdown,\ntestthat (>= 3.0.0), tibble, tidyselect", + "LinkingTo": "cli", + "VignetteBuilder": "knitr", + "Biarch": "true", + "Config/Needs/website": "tidyverse/tidytemplate, tidyr", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "yes", + "Packaged": "2023-08-08 16:13:31 UTC; hadleywickham", + "Author": "Hadley Wickham [aut, cre] (),\n Lionel Henry [aut],\n RStudio [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2023-08-10 08:20:07 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-04-06 06:42:18 UTC; unix", + "Archs": "purrr.so.dSYM" + } + }, + "rappdirs": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Type": "Package", + "Package": "rappdirs", + "Title": "Application Directories: Determine Where to Save Data, Caches,\nand Logs", + "Version": "0.3.3", + "Authors@R": "\n c(person(given = \"Hadley\",\n family = \"Wickham\",\n role = c(\"trl\", \"cre\", \"cph\"),\n email = \"hadley@rstudio.com\"),\n person(given = \"RStudio\",\n role = \"cph\"),\n person(given = \"Sridhar\",\n family = \"Ratnakumar\",\n role = \"aut\"),\n person(given = \"Trent\",\n family = \"Mick\",\n role = \"aut\"),\n person(given = \"ActiveState\",\n role = \"cph\",\n comment = \"R/appdir.r, R/cache.r, R/data.r, R/log.r translated from appdirs\"),\n person(given = \"Eddy\",\n family = \"Petrisor\",\n role = \"ctb\"),\n person(given = \"Trevor\",\n family = \"Davis\",\n role = c(\"trl\", \"aut\")),\n person(given = \"Gabor\",\n family = \"Csardi\",\n role = \"ctb\"),\n person(given = \"Gregory\",\n family = \"Jefferis\",\n role = \"ctb\"))", + "Description": "An easy way to determine which directories on the\n users computer you should use to save data, caches and logs. A port of\n Python's 'Appdirs' () to\n R.", + "License": "MIT + file LICENSE", + "URL": "https://rappdirs.r-lib.org, https://github.com/r-lib/rappdirs", + "BugReports": "https://github.com/r-lib/rappdirs/issues", + "Depends": "R (>= 3.2)", + "Suggests": "roxygen2, testthat (>= 3.0.0), covr, withr", + "Copyright": "Original python appdirs module copyright (c) 2010\nActiveState Software Inc. R port copyright Hadley Wickham,\nRStudio. See file LICENSE for details.", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.1", + "Config/testthat/edition": "3", + "NeedsCompilation": "yes", + "Packaged": "2021-01-28 22:29:57 UTC; hadley", + "Author": "Hadley Wickham [trl, cre, cph],\n RStudio [cph],\n Sridhar Ratnakumar [aut],\n Trent Mick [aut],\n ActiveState [cph] (R/appdir.r, R/cache.r, R/data.r, R/log.r translated\n from appdirs),\n Eddy Petrisor [ctb],\n Trevor Davis [trl, aut],\n Gabor Csardi [ctb],\n Gregory Jefferis [ctb]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2021-01-31 05:40:02 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-04-05 15:02:04 UTC; unix", + "Archs": "rappdirs.so.dSYM" + } + }, + "rclipboard": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "rclipboard", + "Title": "Shiny/R Wrapper for 'clipboard.js'", + "Version": "0.2.1", + "Author": "Sebastien Bihorel", + "Maintainer": "Sebastien Bihorel ", + "Description": "Leverages the functionality of 'clipboard.js', a JavaScript library\n for HMTL5-based copy to clipboard from web pages (see \n for more information), and provides a reactive copy-to-clipboard UI button \n component, called 'rclipButton', and a a reactive copy-to-clipboard UI link \n component, called 'rclipLink', for 'shiny' R applications.", + "Depends": "R (>= 3.3.0)", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "URL": "https://github.com/sbihorel/rclipboard/", + "BugReports": "https://github.com/sbihorel/rclipboard/issues/", + "Imports": "shiny, bslib (>= 0.5.1)", + "NeedsCompilation": "no", + "Packaged": "2023-11-15 09:28:51 UTC; sebastien", + "Repository": "CRAN", + "Date/Publication": "2023-11-15 10:00:02 UTC", + "Built": "R 4.4.0; ; 2024-04-06 09:26:05 UTC; unix" + } + }, + "readxl": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "readxl", + "Title": "Read Excel Files", + "Version": "1.4.3", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\",\n comment = c(ORCID = \"0000-0003-4757-117X\")),\n person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-6983-2759\")),\n person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"),\n comment = \"Copyright holder of all R code and all C/C++ code without explicit copyright attribution\"),\n person(\"Marcin\", \"Kalicinski\", role = c(\"ctb\", \"cph\"),\n comment = \"Author of included RapidXML code\"),\n person(\"Komarov Valery\", role = c(\"ctb\", \"cph\"),\n comment = \"Author of included libxls code\"),\n person(\"Christophe Leitienne\", role = c(\"ctb\", \"cph\"),\n comment = \"Author of included libxls code\"),\n person(\"Bob Colbert\", role = c(\"ctb\", \"cph\"),\n comment = \"Author of included libxls code\"),\n person(\"David Hoerl\", role = c(\"ctb\", \"cph\"),\n comment = \"Author of included libxls code\"),\n person(\"Evan Miller\", role = c(\"ctb\", \"cph\"),\n comment = \"Author of included libxls code\")\n )", + "Description": "Import excel files into R. Supports '.xls' via the embedded\n 'libxls' C library and '.xlsx' via\n the embedded 'RapidXML' C++ library .\n Works on Windows, Mac and Linux without external dependencies.", + "License": "MIT + file LICENSE", + "URL": "https://readxl.tidyverse.org, https://github.com/tidyverse/readxl", + "BugReports": "https://github.com/tidyverse/readxl/issues", + "Depends": "R (>= 3.6)", + "Imports": "cellranger, tibble (>= 2.0.1), utils", + "Suggests": "covr, knitr, rmarkdown, testthat (>= 3.1.6), withr", + "LinkingTo": "cpp11 (>= 0.4.0), progress", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate, tidyverse", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "Note": "libxls v1.6.2 (patched) 45abe77", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "yes", + "Packaged": "2023-07-05 19:59:43 UTC; jenny", + "Author": "Hadley Wickham [aut] (),\n Jennifer Bryan [aut, cre] (),\n Posit, PBC [cph, fnd] (Copyright holder of all R code and all C/C++\n code without explicit copyright attribution),\n Marcin Kalicinski [ctb, cph] (Author of included RapidXML code),\n Komarov Valery [ctb, cph] (Author of included libxls code),\n Christophe Leitienne [ctb, cph] (Author of included libxls code),\n Bob Colbert [ctb, cph] (Author of included libxls code),\n David Hoerl [ctb, cph] (Author of included libxls code),\n Evan Miller [ctb, cph] (Author of included libxls code)", + "Maintainer": "Jennifer Bryan ", + "Repository": "CRAN", + "Date/Publication": "2023-07-06 22:00:09 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-04-06 10:53:43 UTC; unix", + "Archs": "readxl.so.dSYM" + } + }, + "rematch": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "rematch", + "Title": "Match Regular Expressions with a Nicer 'API'", + "Version": "2.0.0", + "Author": "Gabor Csardi", + "Maintainer": "Gabor Csardi ", + "Description": "A small wrapper on 'regexpr' to extract the matches and\n captured groups from the match of a regular expression to a character\n vector.", + "License": "MIT + file LICENSE", + "URL": "https://github.com/gaborcsardi/rematch", + "BugReports": "https://github.com/gaborcsardi/rematch/issues", + "RoxygenNote": "5.0.1.9000", + "Suggests": "covr, testthat", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Packaged": "2023-08-30 12:10:51 UTC; gaborcsardi", + "Repository": "CRAN", + "Date/Publication": "2023-08-30 16:50:02 UTC", + "Built": "R 4.4.0; ; 2024-04-05 15:10:39 UTC; unix" + } + }, + "rlang": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "rlang", + "Version": "1.1.7", + "Title": "Functions for Base Types and Core R and 'Tidyverse' Features", + "Description": "A toolbox for working with base types, core R features\n like the condition system, and core 'Tidyverse' features like tidy\n evaluation.", + "Authors@R": "c(\n person(\"Lionel\", \"Henry\", ,\"lionel@posit.co\", c(\"aut\", \"cre\")),\n person(\"Hadley\", \"Wickham\", ,\"hadley@posit.co\", \"aut\"),\n person(given = \"mikefc\",\n email = \"mikefc@coolbutuseless.com\",\n role = \"cph\",\n comment = \"Hash implementation based on Mike's xxhashlite\"),\n person(given = \"Yann\",\n family = \"Collet\",\n role = \"cph\",\n comment = \"Author of the embedded xxHash library\"),\n person(given = \"Posit, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "License": "MIT + file LICENSE", + "ByteCompile": "true", + "Biarch": "true", + "Depends": "R (>= 4.0.0)", + "Imports": "utils", + "Suggests": "cli (>= 3.1.0), covr, crayon, desc, fs, glue, knitr,\nmagrittr, methods, pillar, pkgload, rmarkdown, stats, testthat\n(>= 3.2.0), tibble, usethis, vctrs (>= 0.2.3), withr", + "Enhances": "winch", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "URL": "https://rlang.r-lib.org, https://github.com/r-lib/rlang", + "BugReports": "https://github.com/r-lib/rlang/issues", + "Config/build/compilation-database": "true", + "Config/testthat/edition": "3", + "Config/Needs/website": "dplyr, tidyverse/tidytemplate", + "NeedsCompilation": "yes", + "Packaged": "2026-01-08 10:35:58 UTC; lionel", + "Author": "Lionel Henry [aut, cre],\n Hadley Wickham [aut],\n mikefc [cph] (Hash implementation based on Mike's xxhashlite),\n Yann Collet [cph] (Author of the embedded xxHash library),\n Posit, PBC [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN", + "Date/Publication": "2026-01-09 12:10:02 UTC", + "Built": "R 4.4.3; aarch64-apple-darwin20; 2026-01-09 16:40:35 UTC; unix", + "Archs": "rlang.so.dSYM" + } + }, + "rmarkdown": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Type": "Package", + "Package": "rmarkdown", + "Title": "Dynamic Documents for R", + "Version": "2.30", + "Authors@R": "c(\n person(\"JJ\", \"Allaire\", , \"jj@posit.co\", role = \"aut\"),\n person(\"Yihui\", \"Xie\", , \"xie@yihui.name\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4474-2498\")),\n person(\"Jonathan\", \"McPherson\", , \"jonathan@posit.co\", role = \"aut\"),\n person(\"Javier\", \"Luraschi\", role = \"aut\"),\n person(\"Kevin\", \"Ushey\", , \"kevin@posit.co\", role = \"aut\"),\n person(\"Aron\", \"Atkins\", , \"aron@posit.co\", role = \"aut\"),\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"),\n person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"),\n person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\"),\n person(\"Richard\", \"Iannone\", , \"rich@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-3925-190X\")),\n person(\"Andrew\", \"Dunning\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0464-5036\")),\n person(\"Atsushi\", \"Yasumoto\", role = c(\"ctb\", \"cph\"), comment = c(ORCID = \"0000-0002-8335-495X\", cph = \"Number sections Lua filter\")),\n person(\"Barret\", \"Schloerke\", role = \"ctb\"),\n person(\"Carson\", \"Sievert\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4958-2844\")), \n person(\"Devon\", \"Ryan\", , \"dpryan79@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8549-0971\")),\n person(\"Frederik\", \"Aust\", , \"frederik.aust@uni-koeln.de\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4900-788X\")),\n person(\"Jeff\", \"Allen\", , \"jeff@posit.co\", role = \"ctb\"), \n person(\"JooYoung\", \"Seo\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4064-6012\")),\n person(\"Malcolm\", \"Barrett\", role = \"ctb\"),\n person(\"Rob\", \"Hyndman\", , \"Rob.Hyndman@monash.edu\", role = \"ctb\"),\n person(\"Romain\", \"Lesur\", role = \"ctb\"),\n person(\"Roy\", \"Storey\", role = \"ctb\"),\n person(\"Ruben\", \"Arslan\", , \"ruben.arslan@uni-goettingen.de\", role = \"ctb\"),\n person(\"Sergio\", \"Oller\", role = \"ctb\"),\n person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")),\n person(, \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery UI library; authors listed in inst/rmd/h/jqueryui/AUTHORS.txt\"),\n person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"),\n person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"),\n person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"),\n person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"),\n person(\"Alexander\", \"Farkas\", role = c(\"ctb\", \"cph\"), comment = \"html5shiv library\"),\n person(\"Scott\", \"Jehl\", role = c(\"ctb\", \"cph\"), comment = \"Respond.js library\"),\n person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"),\n person(\"Greg\", \"Franko\", role = c(\"ctb\", \"cph\"), comment = \"tocify library\"),\n person(\"John\", \"MacFarlane\", role = c(\"ctb\", \"cph\"), comment = \"Pandoc templates\"),\n person(, \"Google, Inc.\", role = c(\"ctb\", \"cph\"), comment = \"ioslides library\"),\n person(\"Dave\", \"Raggett\", role = \"ctb\", comment = \"slidy library\"),\n person(, \"W3C\", role = \"cph\", comment = \"slidy library\"),\n person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome\"),\n person(\"Ben\", \"Sperry\", role = \"ctb\", comment = \"Ionicons\"),\n person(, \"Drifty\", role = \"cph\", comment = \"Ionicons\"),\n person(\"Aidan\", \"Lister\", role = c(\"ctb\", \"cph\"), comment = \"jQuery StickyTabs\"),\n person(\"Benct Philip\", \"Jonsson\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\"),\n person(\"Albert\", \"Krewinkel\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\")\n )", + "Description": "Convert R Markdown documents into a variety of formats.", + "License": "GPL-3", + "URL": "https://github.com/rstudio/rmarkdown,\nhttps://pkgs.rstudio.com/rmarkdown/", + "BugReports": "https://github.com/rstudio/rmarkdown/issues", + "Depends": "R (>= 3.0)", + "Imports": "bslib (>= 0.2.5.1), evaluate (>= 0.13), fontawesome (>=\n0.5.0), htmltools (>= 0.5.1), jquerylib, jsonlite, knitr (>=\n1.43), methods, tinytex (>= 0.31), tools, utils, xfun (>=\n0.36), yaml (>= 2.1.19)", + "Suggests": "digest, dygraphs, fs, rsconnect, downlit (>= 0.4.0), katex\n(>= 1.4.0), sass (>= 0.4.0), shiny (>= 1.6.0), testthat (>=\n3.0.3), tibble, vctrs, cleanrmd, withr (>= 2.4.2), xml2", + "VignetteBuilder": "knitr", + "Config/Needs/website": "rstudio/quillt, pkgdown", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "SystemRequirements": "pandoc (>= 1.14) - http://pandoc.org", + "NeedsCompilation": "no", + "Packaged": "2025-09-25 03:25:30 UTC; yihui", + "Author": "JJ Allaire [aut],\n Yihui Xie [aut, cre] (ORCID: ),\n Christophe Dervieux [aut] (ORCID:\n ),\n Jonathan McPherson [aut],\n Javier Luraschi [aut],\n Kevin Ushey [aut],\n Aron Atkins [aut],\n Hadley Wickham [aut],\n Joe Cheng [aut],\n Winston Chang [aut],\n Richard Iannone [aut] (ORCID: ),\n Andrew Dunning [ctb] (ORCID: ),\n Atsushi Yasumoto [ctb, cph] (ORCID:\n , cph: Number sections Lua\n filter),\n Barret Schloerke [ctb],\n Carson Sievert [ctb] (ORCID: ),\n Devon Ryan [ctb] (ORCID: ),\n Frederik Aust [ctb] (ORCID: ),\n Jeff Allen [ctb],\n JooYoung Seo [ctb] (ORCID: ),\n Malcolm Barrett [ctb],\n Rob Hyndman [ctb],\n Romain Lesur [ctb],\n Roy Storey [ctb],\n Ruben Arslan [ctb],\n Sergio Oller [ctb],\n Posit Software, PBC [cph, fnd],\n jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in\n inst/rmd/h/jqueryui/AUTHORS.txt),\n Mark Otto [ctb] (Bootstrap library),\n Jacob Thornton [ctb] (Bootstrap library),\n Bootstrap contributors [ctb] (Bootstrap library),\n Twitter, Inc [cph] (Bootstrap library),\n Alexander Farkas [ctb, cph] (html5shiv library),\n Scott Jehl [ctb, cph] (Respond.js library),\n Ivan Sagalaev [ctb, cph] (highlight.js library),\n Greg Franko [ctb, cph] (tocify library),\n John MacFarlane [ctb, cph] (Pandoc templates),\n Google, Inc. [ctb, cph] (ioslides library),\n Dave Raggett [ctb] (slidy library),\n W3C [cph] (slidy library),\n Dave Gandy [ctb, cph] (Font-Awesome),\n Ben Sperry [ctb] (Ionicons),\n Drifty [cph] (Ionicons),\n Aidan Lister [ctb, cph] (jQuery StickyTabs),\n Benct Philip Jonsson [ctb, cph] (pagebreak Lua filter),\n Albert Krewinkel [ctb, cph] (pagebreak Lua filter)", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN", + "Date/Publication": "2025-09-28 11:30:02 UTC", + "Built": "R 4.4.1; ; 2025-10-07 13:39:59 UTC; unix" + } + }, + "sass": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Type": "Package", + "Package": "sass", + "Version": "0.4.9", + "Title": "Syntactically Awesome Style Sheets ('Sass')", + "Description": "An 'SCSS' compiler, powered by the 'LibSass' library. With this,\n R developers can use variables, inheritance, and functions to generate\n dynamic style sheets. The package uses the 'Sass CSS' extension language,\n which is stable, powerful, and CSS compatible.", + "Authors@R": "c(\n person(\"Joe\", \"Cheng\", , \"joe@rstudio.com\", \"aut\"),\n person(\"Timothy\", \"Mastny\", , \"tim.mastny@gmail.com\", \"aut\"),\n person(\"Richard\", \"Iannone\", , \"rich@rstudio.com\", \"aut\",\n comment = c(ORCID = \"0000-0003-3925-190X\")),\n person(\"Barret\", \"Schloerke\", , \"barret@rstudio.com\", \"aut\",\n comment = c(ORCID = \"0000-0001-9986-114X\")),\n person(\"Carson\", \"Sievert\", , \"carson@rstudio.com\", c(\"aut\", \"cre\"),\n comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Christophe\", \"Dervieux\", , \"cderv@rstudio.com\", c(\"ctb\"),\n comment = c(ORCID = \"0000-0003-4474-2498\")),\n person(family = \"RStudio\", role = c(\"cph\", \"fnd\")),\n person(family = \"Sass Open Source Foundation\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Greter\", \"Marcel\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Mifsud\", \"Michael\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Hampton\", \"Catlin\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Natalie\", \"Weizenbaum\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Chris\", \"Eppstein\", role = c(\"ctb\", \"cph\"),\n comment = \"LibSass library\"),\n person(\"Adams\", \"Joseph\", role = c(\"ctb\", \"cph\"),\n comment = \"json.cpp\"),\n person(\"Trifunovic\", \"Nemanja\", role = c(\"ctb\", \"cph\"),\n comment = \"utf8.h\")\n )", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/sass/, https://github.com/rstudio/sass", + "BugReports": "https://github.com/rstudio/sass/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.1", + "SystemRequirements": "GNU make", + "Imports": "fs (>= 1.2.4), rlang (>= 0.4.10), htmltools (>= 0.5.1), R6,\nrappdirs", + "Suggests": "testthat, knitr, rmarkdown, withr, shiny, curl", + "VignetteBuilder": "knitr", + "Config/testthat/edition": "3", + "NeedsCompilation": "yes", + "Packaged": "2024-03-15 21:58:01 UTC; cpsievert", + "Author": "Joe Cheng [aut],\n Timothy Mastny [aut],\n Richard Iannone [aut] (),\n Barret Schloerke [aut] (),\n Carson Sievert [aut, cre] (),\n Christophe Dervieux [ctb] (),\n RStudio [cph, fnd],\n Sass Open Source Foundation [ctb, cph] (LibSass library),\n Greter Marcel [ctb, cph] (LibSass library),\n Mifsud Michael [ctb, cph] (LibSass library),\n Hampton Catlin [ctb, cph] (LibSass library),\n Natalie Weizenbaum [ctb, cph] (LibSass library),\n Chris Eppstein [ctb, cph] (LibSass library),\n Adams Joseph [ctb, cph] (json.cpp),\n Trifunovic Nemanja [ctb, cph] (utf8.h)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN", + "Date/Publication": "2024-03-15 22:30:02 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-04-06 02:49:36 UTC; unix", + "Archs": "sass.so.dSYM" + } + }, + "scales": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "scales", + "Title": "Scale Functions for Visualization", + "Version": "1.3.0", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\")),\n person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"),\n comment = c(ORCID = \"0000-0002-5147-4711\")),\n person(\"Dana\", \"Seidel\", role = \"aut\"),\n person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Graphical scales map data to aesthetics, and provide methods\n for automatically determining breaks and labels for axes and legends.", + "License": "MIT + file LICENSE", + "URL": "https://scales.r-lib.org, https://github.com/r-lib/scales", + "BugReports": "https://github.com/r-lib/scales/issues", + "Depends": "R (>= 3.6)", + "Imports": "cli, farver (>= 2.0.3), glue, labeling, lifecycle, munsell (>=\n0.5), R6, RColorBrewer, rlang (>= 1.0.0), viridisLite", + "Suggests": "bit64, covr, dichromat, ggplot2, hms (>= 0.5.0), stringi,\ntestthat (>= 3.0.0)", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyLoad": "yes", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "yes", + "Packaged": "2023-11-27 20:27:59 UTC; thomas", + "Author": "Hadley Wickham [aut],\n Thomas Lin Pedersen [cre, aut]\n (),\n Dana Seidel [aut],\n Posit, PBC [cph, fnd]", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN", + "Date/Publication": "2023-11-28 09:10:06 UTC", + "Built": "R 4.4.0; ; 2024-04-06 02:47:38 UTC; unix" + } + }, + "shiny": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "shiny", + "Type": "Package", + "Title": "Web Application Framework for R", + "Version": "1.9.1", + "Authors@R": "c(\n person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@posit.co\", comment = c(ORCID = \"0000-0002-1576-2126\")),\n person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@posit.co\"),\n person(\"JJ\", \"Allaire\", role = \"aut\", email = \"jj@posit.co\"),\n person(\"Carson\", \"Sievert\", role = \"aut\", email = \"carson@posit.co\", comment = c(ORCID = \"0000-0002-4958-2844\")),\n person(\"Barret\", \"Schloerke\", role = \"aut\", email = \"barret@posit.co\", comment = c(ORCID = \"0000-0001-9986-114X\")),\n person(\"Yihui\", \"Xie\", role = \"aut\", email = \"yihui@posit.co\"),\n person(\"Jeff\", \"Allen\", role = \"aut\"),\n person(\"Jonathan\", \"McPherson\", role = \"aut\", email = \"jonathan@posit.co\"),\n person(\"Alan\", \"Dipert\", role = \"aut\"),\n person(\"Barbara\", \"Borges\", role = \"aut\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")),\n person(family = \"jQuery Foundation\", role = \"cph\",\n comment = \"jQuery library and jQuery UI library\"),\n person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"),\n comment = \"jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt\"),\n person(family = \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"),\n comment = \"jQuery UI library; authors listed in inst/www/shared/jqueryui/AUTHORS.txt\"),\n person(\"Mark\", \"Otto\", role = \"ctb\",\n comment = \"Bootstrap library\"),\n person(\"Jacob\", \"Thornton\", role = \"ctb\",\n comment = \"Bootstrap library\"),\n person(family = \"Bootstrap contributors\", role = \"ctb\",\n comment = \"Bootstrap library\"),\n person(family = \"Twitter, Inc\", role = \"cph\",\n comment = \"Bootstrap library\"),\n person(\"Prem Nawaz\", \"Khan\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Victor\", \"Tsaran\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Dennis\", \"Lembree\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Srinivasu\", \"Chakravarthula\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Cathy\", \"O'Connor\", role = \"ctb\",\n comment = \"Bootstrap accessibility plugin\"),\n person(family = \"PayPal, Inc\", role = \"cph\",\n comment = \"Bootstrap accessibility plugin\"),\n person(\"Stefan\", \"Petre\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootstrap-datepicker library\"),\n person(\"Andrew\", \"Rowls\", role = c(\"ctb\", \"cph\"),\n comment = \"Bootstrap-datepicker library\"),\n person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"),\n comment = \"selectize.js library\"),\n person(\"Salmen\", \"Bejaoui\", role = c(\"ctb\", \"cph\"),\n comment = \"selectize-plugin-a11y library\"),\n person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"),\n comment = \"ion.rangeSlider library\"),\n person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"),\n comment = \"Javascript strftime library\"),\n person(family = \"SpryMedia Limited\", role = c(\"ctb\", \"cph\"),\n comment = \"DataTables library\"),\n person(\"John\", \"Fraser\", role = c(\"ctb\", \"cph\"),\n comment = \"showdown.js library\"),\n person(\"John\", \"Gruber\", role = c(\"ctb\", \"cph\"),\n comment = \"showdown.js library\"),\n person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"),\n comment = \"highlight.js library\"),\n person(family = \"R Core Team\", role = c(\"ctb\", \"cph\"),\n comment = \"tar implementation from R\")\n )", + "Description": "Makes it incredibly easy to build interactive web\n applications with R. Automatic \"reactive\" binding between inputs and\n outputs and extensive prebuilt widgets make it possible to build\n beautiful, responsive, and powerful applications with minimal effort.", + "License": "GPL-3 | file LICENSE", + "Depends": "R (>= 3.0.2), methods", + "Imports": "utils, grDevices, httpuv (>= 1.5.2), mime (>= 0.3), jsonlite\n(>= 0.9.16), xtable, fontawesome (>= 0.4.0), htmltools (>=\n0.5.4), R6 (>= 2.0), sourcetools, later (>= 1.0.0), promises\n(>= 1.1.0), tools, crayon, rlang (>= 0.4.10), fastmap (>=\n1.1.1), withr, commonmark (>= 1.7), glue (>= 1.3.2), bslib (>=\n0.6.0), cachem (>= 1.1.0), lifecycle (>= 0.2.0)", + "Suggests": "datasets, DT, Cairo (>= 1.5-5), testthat (>= 3.0.0), knitr\n(>= 1.6), markdown, rmarkdown, ggplot2, reactlog (>= 1.0.0),\nmagrittr, yaml, future, dygraphs, ragg, showtext, sass", + "URL": "https://shiny.posit.co/, https://github.com/rstudio/shiny", + "BugReports": "https://github.com/rstudio/shiny/issues", + "Collate": "'globals.R' 'app-state.R' 'app_template.R' 'bind-cache.R'\n'bind-event.R' 'bookmark-state-local.R' 'bookmark-state.R'\n'bootstrap-deprecated.R' 'bootstrap-layout.R' 'conditions.R'\n'map.R' 'utils.R' 'bootstrap.R' 'busy-indicators-spinners.R'\n'busy-indicators.R' 'cache-utils.R' 'deprecated.R' 'devmode.R'\n'diagnose.R' 'extended-task.R' 'fileupload.R' 'graph.R'\n'reactives.R' 'reactive-domains.R' 'history.R' 'hooks.R'\n'html-deps.R' 'image-interact-opts.R' 'image-interact.R'\n'imageutils.R' 'input-action.R' 'input-checkbox.R'\n'input-checkboxgroup.R' 'input-date.R' 'input-daterange.R'\n'input-file.R' 'input-numeric.R' 'input-password.R'\n'input-radiobuttons.R' 'input-select.R' 'input-slider.R'\n'input-submit.R' 'input-text.R' 'input-textarea.R'\n'input-utils.R' 'insert-tab.R' 'insert-ui.R' 'jqueryui.R'\n'knitr.R' 'middleware-shiny.R' 'middleware.R' 'timer.R'\n'shiny.R' 'mock-session.R' 'modal.R' 'modules.R'\n'notifications.R' 'priorityqueue.R' 'progress.R' 'react.R'\n'reexports.R' 'render-cached-plot.R' 'render-plot.R'\n'render-table.R' 'run-url.R' 'runapp.R' 'serializers.R'\n'server-input-handlers.R' 'server-resource-paths.R' 'server.R'\n'shiny-options.R' 'shiny-package.R' 'shinyapp.R' 'shinyui.R'\n'shinywrappers.R' 'showcase.R' 'snapshot.R' 'staticimports.R'\n'tar.R' 'test-export.R' 'test-server.R' 'test.R'\n'update-input.R' 'utils-lang.R' 'version_bs_date_picker.R'\n'version_ion_range_slider.R' 'version_jquery.R'\n'version_jqueryui.R' 'version_selectize.R' 'version_strftime.R'\n'viewer.R'", + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "RdMacros": "lifecycle", + "Config/testthat/edition": "3", + "Config/Needs/check": "shinytest2", + "NeedsCompilation": "no", + "Packaged": "2024-07-31 17:44:44 UTC; cpsievert", + "Author": "Winston Chang [aut, cre] (),\n Joe Cheng [aut],\n JJ Allaire [aut],\n Carson Sievert [aut] (),\n Barret Schloerke [aut] (),\n Yihui Xie [aut],\n Jeff Allen [aut],\n Jonathan McPherson [aut],\n Alan Dipert [aut],\n Barbara Borges [aut],\n Posit Software, PBC [cph, fnd],\n jQuery Foundation [cph] (jQuery library and jQuery UI library),\n jQuery contributors [ctb, cph] (jQuery library; authors listed in\n inst/www/shared/jquery-AUTHORS.txt),\n jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in\n inst/www/shared/jqueryui/AUTHORS.txt),\n Mark Otto [ctb] (Bootstrap library),\n Jacob Thornton [ctb] (Bootstrap library),\n Bootstrap contributors [ctb] (Bootstrap library),\n Twitter, Inc [cph] (Bootstrap library),\n Prem Nawaz Khan [ctb] (Bootstrap accessibility plugin),\n Victor Tsaran [ctb] (Bootstrap accessibility plugin),\n Dennis Lembree [ctb] (Bootstrap accessibility plugin),\n Srinivasu Chakravarthula [ctb] (Bootstrap accessibility plugin),\n Cathy O'Connor [ctb] (Bootstrap accessibility plugin),\n PayPal, Inc [cph] (Bootstrap accessibility plugin),\n Stefan Petre [ctb, cph] (Bootstrap-datepicker library),\n Andrew Rowls [ctb, cph] (Bootstrap-datepicker library),\n Brian Reavis [ctb, cph] (selectize.js library),\n Salmen Bejaoui [ctb, cph] (selectize-plugin-a11y library),\n Denis Ineshin [ctb, cph] (ion.rangeSlider library),\n Sami Samhuri [ctb, cph] (Javascript strftime library),\n SpryMedia Limited [ctb, cph] (DataTables library),\n John Fraser [ctb, cph] (showdown.js library),\n John Gruber [ctb, cph] (showdown.js library),\n Ivan Sagalaev [ctb, cph] (highlight.js library),\n R Core Team [ctb, cph] (tar implementation from R)", + "Maintainer": "Winston Chang ", + "Repository": "CRAN", + "Date/Publication": "2024-08-01 10:50:02 UTC", + "Built": "R 4.4.0; ; 2024-08-01 13:49:42 UTC; unix" + } + }, + "snakecase": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "snakecase", + "Version": "0.11.1", + "Date": "2023-08-27", + "Title": "Convert Strings into any Case", + "Description": "A consistent, flexible and easy to use tool to parse and convert strings into cases like snake or camel among others.", + "Authors@R": "c(\n person(\"Malte\", \"Grosser\", , \"malte.grosser@gmail.com\", role = c(\"aut\", \"cre\")))", + "Maintainer": "Malte Grosser ", + "Depends": "R (>= 3.2)", + "Imports": "stringr, stringi", + "Suggests": "testthat, covr, tibble, purrrlyr, knitr, rmarkdown, magrittr", + "URL": "https://github.com/Tazinho/snakecase", + "BugReports": "https://github.com/Tazinho/snakecase/issues", + "Encoding": "UTF-8", + "License": "GPL-3", + "RoxygenNote": "6.1.1", + "VignetteBuilder": "knitr", + "NeedsCompilation": "no", + "Packaged": "2023-08-27 20:30:20 UTC; malte", + "Author": "Malte Grosser [aut, cre]", + "Repository": "CRAN", + "Date/Publication": "2023-08-27 22:50:09 UTC", + "Built": "R 4.4.0; ; 2024-04-06 06:56:34 UTC; unix" + } + }, + "sourcetools": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "sourcetools", + "Type": "Package", + "Title": "Tools for Reading, Tokenizing and Parsing R Code", + "Version": "0.1.7-1", + "Author": "Kevin Ushey", + "Maintainer": "Kevin Ushey ", + "Description": "Tools for the reading and tokenization of R code. The\n 'sourcetools' package provides both an R and C++ interface for the tokenization\n of R code, and helpers for interacting with the tokenized representation of R\n code.", + "License": "MIT + file LICENSE", + "Depends": "R (>= 3.0.2)", + "Suggests": "testthat", + "RoxygenNote": "5.0.1", + "BugReports": "https://github.com/kevinushey/sourcetools/issues", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Packaged": "2023-01-31 18:03:04 UTC; kevin", + "Repository": "CRAN", + "Date/Publication": "2023-02-01 10:10:02 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-04-05 15:01:41 UTC; unix", + "Archs": "sourcetools.so.dSYM" + } + }, + "stringi": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "stringi", + "Version": "1.8.4", + "Date": "2024-05-06", + "Title": "Fast and Portable Character String Processing Facilities", + "Description": "A collection of character string/text/natural language\n processing tools for pattern searching (e.g., with 'Java'-like regular\n expressions or the 'Unicode' collation algorithm), random string generation,\n case mapping, string transliteration, concatenation, sorting, padding,\n wrapping, Unicode normalisation, date-time formatting and parsing,\n and many more. They are fast, consistent, convenient, and -\n thanks to 'ICU' (International Components for Unicode) -\n portable across all locales and platforms. Documentation about 'stringi' is\n provided via its website at and\n the paper by Gagolewski (2022, ).", + "URL": "https://stringi.gagolewski.com/,\nhttps://github.com/gagolews/stringi, https://icu.unicode.org/", + "BugReports": "https://github.com/gagolews/stringi/issues", + "SystemRequirements": "ICU4C (>= 61, optional)", + "Type": "Package", + "Depends": "R (>= 3.4)", + "Imports": "tools, utils, stats", + "Biarch": "TRUE", + "License": "file LICENSE", + "Author": "Marek Gagolewski [aut, cre, cph] (),\n Bartek Tartanus [ctb], and others (stringi source code);\n Unicode, Inc. and others (ICU4C source code, Unicode Character Database)", + "Maintainer": "Marek Gagolewski ", + "RoxygenNote": "7.2.3", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Packaged": "2024-05-06 12:50:25 UTC; gagolews", + "License_is_FOSS": "yes", + "Repository": "CRAN", + "Date/Publication": "2024-05-06 15:00:02 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-05-06 17:09:54 UTC; unix" + } + }, + "stringr": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "stringr", + "Title": "Simple, Consistent Wrappers for Common String Operations", + "Version": "1.5.1", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\", \"cph\")),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "A consistent, simple and easy to use set of wrappers around\n the fantastic 'stringi' package. All function and argument names (and\n positions) are consistent, all functions deal with \"NA\"'s and zero\n length vectors in the same way, and the output from one function is\n easy to feed into the input of another.", + "License": "MIT + file LICENSE", + "URL": "https://stringr.tidyverse.org,\nhttps://github.com/tidyverse/stringr", + "BugReports": "https://github.com/tidyverse/stringr/issues", + "Depends": "R (>= 3.6)", + "Imports": "cli, glue (>= 1.6.1), lifecycle (>= 1.0.3), magrittr, rlang\n(>= 1.0.0), stringi (>= 1.5.3), vctrs (>= 0.4.0)", + "Suggests": "covr, dplyr, gt, htmltools, htmlwidgets, knitr, rmarkdown,\ntestthat (>= 3.0.0), tibble", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "no", + "Packaged": "2023-11-14 15:03:52 UTC; hadleywickham", + "Author": "Hadley Wickham [aut, cre, cph],\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2023-11-14 23:10:02 UTC", + "Built": "R 4.4.0; ; 2024-04-06 06:42:00 UTC; unix" + } + }, + "tibble": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "tibble", + "Title": "Simple Data Frames", + "Version": "3.2.1", + "Authors@R": "\n c(person(given = \"Kirill\",\n family = \"M\\u00fcller\",\n role = c(\"aut\", \"cre\"),\n email = \"kirill@cynkra.com\",\n comment = c(ORCID = \"0000-0002-1416-3412\")),\n person(given = \"Hadley\",\n family = \"Wickham\",\n role = \"aut\",\n email = \"hadley@rstudio.com\"),\n person(given = \"Romain\",\n family = \"Francois\",\n role = \"ctb\",\n email = \"romain@r-enthusiasts.com\"),\n person(given = \"Jennifer\",\n family = \"Bryan\",\n role = \"ctb\",\n email = \"jenny@rstudio.com\"),\n person(given = \"RStudio\",\n role = c(\"cph\", \"fnd\")))", + "Description": "Provides a 'tbl_df' class (the 'tibble') with stricter checking and better formatting than the traditional\n data frame.", + "License": "MIT + file LICENSE", + "URL": "https://tibble.tidyverse.org/, https://github.com/tidyverse/tibble", + "BugReports": "https://github.com/tidyverse/tibble/issues", + "Depends": "R (>= 3.4.0)", + "Imports": "fansi (>= 0.4.0), lifecycle (>= 1.0.0), magrittr, methods,\npillar (>= 1.8.1), pkgconfig, rlang (>= 1.0.2), utils, vctrs\n(>= 0.4.2)", + "Suggests": "bench, bit64, blob, brio, callr, cli, covr, crayon (>=\n1.3.4), DiagrammeR, dplyr, evaluate, formattable, ggplot2,\nhere, hms, htmltools, knitr, lubridate, mockr, nycflights13,\npkgbuild, pkgload, purrr, rmarkdown, stringi, testthat (>=\n3.0.2), tidyr, withr", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Config/testthat/start-first": "vignette-formats, as_tibble, add,\ninvariants", + "Config/autostyle/scope": "line_breaks", + "Config/autostyle/strict": "true", + "Config/autostyle/rmd": "false", + "Config/Needs/website": "tidyverse/tidytemplate", + "NeedsCompilation": "yes", + "Packaged": "2023-03-19 09:23:10 UTC; kirill", + "Author": "Kirill Müller [aut, cre] (),\n Hadley Wickham [aut],\n Romain Francois [ctb],\n Jennifer Bryan [ctb],\n RStudio [cph, fnd]", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN", + "Date/Publication": "2023-03-20 06:30:02 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-04-06 09:13:58 UTC; unix", + "Archs": "tibble.so.dSYM" + } + }, + "tidyr": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "tidyr", + "Title": "Tidy Messy Data", + "Version": "1.3.1", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\"),\n person(\"Maximilian\", \"Girlich\", role = \"aut\"),\n person(\"Kevin\", \"Ushey\", , \"kevin@posit.co\", role = \"ctb\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Tools to help to create tidy data, where each column is a\n variable, each row is an observation, and each cell contains a single\n value. 'tidyr' contains tools for changing the shape (pivoting) and\n hierarchy (nesting and 'unnesting') of a dataset, turning deeply\n nested lists into rectangular data frames ('rectangling'), and\n extracting values out of string columns. It also includes tools for\n working with missing values (both implicit and explicit).", + "License": "MIT + file LICENSE", + "URL": "https://tidyr.tidyverse.org, https://github.com/tidyverse/tidyr", + "BugReports": "https://github.com/tidyverse/tidyr/issues", + "Depends": "R (>= 3.6)", + "Imports": "cli (>= 3.4.1), dplyr (>= 1.0.10), glue, lifecycle (>= 1.0.3),\nmagrittr, purrr (>= 1.0.1), rlang (>= 1.1.1), stringr (>=\n1.5.0), tibble (>= 2.1.1), tidyselect (>= 1.2.0), utils, vctrs\n(>= 0.5.2)", + "Suggests": "covr, data.table, knitr, readr, repurrrsive (>= 1.1.0),\nrmarkdown, testthat (>= 3.0.0)", + "LinkingTo": "cpp11 (>= 0.4.0)", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.0", + "NeedsCompilation": "yes", + "Packaged": "2024-01-23 14:27:23 UTC; hadleywickham", + "Author": "Hadley Wickham [aut, cre],\n Davis Vaughan [aut],\n Maximilian Girlich [aut],\n Kevin Ushey [ctb],\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN", + "Date/Publication": "2024-01-24 14:50:09 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-04-05 11:52:20 UTC; unix", + "Archs": "tidyr.so.dSYM" + } + }, + "tidyselect": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "tidyselect", + "Title": "Select from a Set of Strings", + "Version": "1.2.1", + "Authors@R": "c(\n person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "A backend for the selecting functions of the 'tidyverse'. It\n makes it easy to implement select-like functions in your own packages\n in a way that is consistent with other 'tidyverse' interfaces for\n selection.", + "License": "MIT + file LICENSE", + "URL": "https://tidyselect.r-lib.org, https://github.com/r-lib/tidyselect", + "BugReports": "https://github.com/r-lib/tidyselect/issues", + "Depends": "R (>= 3.4)", + "Imports": "cli (>= 3.3.0), glue (>= 1.3.0), lifecycle (>= 1.0.3), rlang\n(>= 1.0.4), vctrs (>= 0.5.2), withr", + "Suggests": "covr, crayon, dplyr, knitr, magrittr, rmarkdown, stringr,\ntestthat (>= 3.1.1), tibble (>= 2.1.3)", + "VignetteBuilder": "knitr", + "ByteCompile": "true", + "Config/testthat/edition": "3", + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.0.9000", + "NeedsCompilation": "yes", + "Packaged": "2024-03-11 11:46:04 UTC; lionel", + "Author": "Lionel Henry [aut, cre],\n Hadley Wickham [aut],\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN", + "Date/Publication": "2024-03-11 14:10:02 UTC", + "Built": "R 4.4.0; ; 2024-04-06 06:41:25 UTC; unix" + } + }, + "timechange": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "timechange", + "Title": "Efficient Manipulation of Date-Times", + "Version": "0.3.0", + "Authors@R": "c(person(\"Vitalie\", \"Spinu\", email = \"spinuvit@gmail.com\", role = c(\"aut\", \"cre\")),\n person(\"Google Inc.\", role = c(\"ctb\", \"cph\")))", + "Description": "Efficient routines for manipulation of date-time objects while\n accounting for time-zones and daylight saving times. The package includes\n utilities for updating of date-time components (year, month, day etc.),\n modification of time-zones, rounding of date-times, period addition and\n subtraction etc. Parts of the 'CCTZ' source code, released under the Apache\n 2.0 License, are included in this package. See\n for more details.", + "Depends": "R (>= 3.3)", + "License": "GPL (>= 3)", + "Encoding": "UTF-8", + "LinkingTo": "cpp11 (>= 0.2.7)", + "Suggests": "testthat (>= 0.7.1.99), knitr", + "SystemRequirements": "A system with zoneinfo data (e.g.\n/usr/share/zoneinfo) as well as a recent-enough C++11 compiler\n(such as g++-4.8 or later). On Windows the zoneinfo included\nwith R is used.", + "BugReports": "https://github.com/vspinu/timechange/issues", + "URL": "https://github.com/vspinu/timechange/", + "RoxygenNote": "7.2.1", + "NeedsCompilation": "yes", + "Packaged": "2024-01-18 08:57:24 UTC; vspinu", + "Author": "Vitalie Spinu [aut, cre],\n Google Inc. [ctb, cph]", + "Maintainer": "Vitalie Spinu ", + "Repository": "CRAN", + "Date/Publication": "2024-01-18 09:20:02 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-04-05 15:11:32 UTC; unix", + "Archs": "timechange.so.dSYM" + } + }, + "tinytex": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "tinytex", + "Type": "Package", + "Title": "Helper Functions to Install and Maintain TeX Live, and Compile\nLaTeX Documents", + "Version": "0.54", + "Authors@R": "c(\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")),\n person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")),\n person(\"Christophe\", \"Dervieux\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4474-2498\")),\n person(\"Devon\", \"Ryan\", role = \"ctb\", email = \"dpryan79@gmail.com\", comment = c(ORCID = \"0000-0002-8549-0971\")),\n person(\"Ethan\", \"Heinzen\", role = \"ctb\"),\n person(\"Fernando\", \"Cagua\", role = \"ctb\"),\n person()\n )", + "Description": "Helper functions to install and maintain the 'LaTeX' distribution\n named 'TinyTeX' (), a lightweight, cross-platform,\n portable, and easy-to-maintain version of 'TeX Live'. This package also\n contains helper functions to compile 'LaTeX' documents, and install missing\n 'LaTeX' packages automatically.", + "Imports": "xfun (>= 0.48)", + "Suggests": "testit, rstudioapi", + "License": "MIT + file LICENSE", + "URL": "https://github.com/rstudio/tinytex", + "BugReports": "https://github.com/rstudio/tinytex/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Packaged": "2024-11-01 14:22:24 UTC; yihui", + "Author": "Yihui Xie [aut, cre, cph] (),\n Posit Software, PBC [cph, fnd],\n Christophe Dervieux [ctb] (),\n Devon Ryan [ctb] (),\n Ethan Heinzen [ctb],\n Fernando Cagua [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN", + "Date/Publication": "2024-11-01 15:10:02 UTC", + "Built": "R 4.4.1; ; 2024-11-01 16:22:23 UTC; unix" + } + }, + "utf8": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "utf8", + "Title": "Unicode Text Processing", + "Version": "1.2.4", + "Authors@R": "\n c(person(given = c(\"Patrick\", \"O.\"),\n family = \"Perry\",\n role = c(\"aut\", \"cph\")),\n person(given = \"Kirill\",\n family = \"M\\u00fcller\",\n role = \"cre\",\n email = \"kirill@cynkra.com\"),\n person(given = \"Unicode, Inc.\",\n role = c(\"cph\", \"dtc\"),\n comment = \"Unicode Character Database\"))", + "Description": "Process and print 'UTF-8' encoded international\n text (Unicode). Input, validate, normalize, encode, format, and\n display.", + "License": "Apache License (== 2.0) | file LICENSE", + "URL": "https://ptrckprry.com/r-utf8/, https://github.com/patperry/r-utf8", + "BugReports": "https://github.com/patperry/r-utf8/issues", + "Depends": "R (>= 2.10)", + "Suggests": "cli, covr, knitr, rlang, rmarkdown, testthat (>= 3.0.0),\nwithr", + "VignetteBuilder": "knitr, rmarkdown", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "yes", + "Packaged": "2023-10-22 13:43:19 UTC; kirill", + "Author": "Patrick O. Perry [aut, cph],\n Kirill Müller [cre],\n Unicode, Inc. [cph, dtc] (Unicode Character Database)", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN", + "Date/Publication": "2023-10-22 21:50:02 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-04-05 15:00:33 UTC; unix", + "Archs": "utf8.so.dSYM" + } + }, + "vctrs": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "vctrs", + "Title": "Vector Helpers", + "Version": "0.6.5", + "Authors@R": "c(\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"),\n person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"),\n person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"data.table team\", role = \"cph\",\n comment = \"Radix sort based on data.table's forder() and their contribution to R's order()\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "Defines new notions of prototype and size that are used to\n provide tools for consistent and well-founded type-coercion and\n size-recycling, and are in turn connected to ideas of type- and\n size-stability useful for analysing function interfaces.", + "License": "MIT + file LICENSE", + "URL": "https://vctrs.r-lib.org/, https://github.com/r-lib/vctrs", + "BugReports": "https://github.com/r-lib/vctrs/issues", + "Depends": "R (>= 3.5.0)", + "Imports": "cli (>= 3.4.0), glue, lifecycle (>= 1.0.3), rlang (>= 1.1.0)", + "Suggests": "bit64, covr, crayon, dplyr (>= 0.8.5), generics, knitr,\npillar (>= 1.4.4), pkgdown (>= 2.0.1), rmarkdown, testthat (>=\n3.0.0), tibble (>= 3.1.3), waldo (>= 0.2.0), withr, xml2,\nzeallot", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "Language": "en-GB", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "yes", + "Packaged": "2023-12-01 16:27:12 UTC; davis", + "Author": "Hadley Wickham [aut],\n Lionel Henry [aut],\n Davis Vaughan [aut, cre],\n data.table team [cph] (Radix sort based on data.table's forder() and\n their contribution to R's order()),\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Davis Vaughan ", + "Repository": "CRAN", + "Date/Publication": "2023-12-01 23:50:02 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-04-06 02:48:37 UTC; unix", + "Archs": "vctrs.so.dSYM" + } + }, + "viridisLite": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "viridisLite", + "Type": "Package", + "Title": "Colorblind-Friendly Color Maps (Lite Version)", + "Version": "0.4.2", + "Date": "2023-05-02", + "Authors@R": "c(\n person(\"Simon\", \"Garnier\", email = \"garnier@njit.edu\", role = c(\"aut\", \"cre\")),\n person(\"Noam\", \"Ross\", email = \"noam.ross@gmail.com\", role = c(\"ctb\", \"cph\")),\n person(\"Bob\", \"Rudis\", email = \"bob@rud.is\", role = c(\"ctb\", \"cph\")),\n person(\"Marco\", \"Sciaini\", email = \"sciaini.marco@gmail.com\", role = c(\"ctb\", \"cph\")),\n person(\"Antônio Pedro\", \"Camargo\", role = c(\"ctb\", \"cph\")),\n person(\"Cédric\", \"Scherer\", email = \"scherer@izw-berlin.de\", role = c(\"ctb\", \"cph\"))\n )", + "Maintainer": "Simon Garnier ", + "Description": "Color maps designed to improve graph readability for readers with \n common forms of color blindness and/or color vision deficiency. The color \n maps are also perceptually-uniform, both in regular form and also when \n converted to black-and-white for printing. This is the 'lite' version of the \n 'viridis' package that also contains 'ggplot2' bindings for discrete and \n continuous color and fill scales and can be found at \n .", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "Depends": "R (>= 2.10)", + "Suggests": "hexbin (>= 1.27.0), ggplot2 (>= 1.0.1), testthat, covr", + "URL": "https://sjmgarnier.github.io/viridisLite/,\nhttps://github.com/sjmgarnier/viridisLite/", + "BugReports": "https://github.com/sjmgarnier/viridisLite/issues/", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "no", + "Packaged": "2023-05-02 21:38:46 UTC; simon", + "Author": "Simon Garnier [aut, cre],\n Noam Ross [ctb, cph],\n Bob Rudis [ctb, cph],\n Marco Sciaini [ctb, cph],\n Antônio Pedro Camargo [ctb, cph],\n Cédric Scherer [ctb, cph]", + "Repository": "CRAN", + "Date/Publication": "2023-05-02 23:50:02 UTC", + "Built": "R 4.4.0; ; 2024-04-05 07:33:43 UTC; unix" + } + }, + "withr": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "withr", + "Title": "Run Code 'With' Temporarily Modified Global State", + "Version": "3.0.2", + "Authors@R": "c(\n person(\"Jim\", \"Hester\", role = \"aut\"),\n person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")),\n person(\"Kirill\", \"Müller\", , \"krlmlr+r@mailbox.org\", role = \"aut\"),\n person(\"Kevin\", \"Ushey\", , \"kevinushey@gmail.com\", role = \"aut\"),\n person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"),\n person(\"Winston\", \"Chang\", role = \"aut\"),\n person(\"Jennifer\", \"Bryan\", role = \"ctb\"),\n person(\"Richard\", \"Cotton\", role = \"ctb\"),\n person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"))\n )", + "Description": "A set of functions to run code 'with' safely and temporarily\n modified global state. Many of these functions were originally a part\n of the 'devtools' package, this provides a simple package with limited\n dependencies to provide access to these functions.", + "License": "MIT + file LICENSE", + "URL": "https://withr.r-lib.org, https://github.com/r-lib/withr#readme", + "BugReports": "https://github.com/r-lib/withr/issues", + "Depends": "R (>= 3.6.0)", + "Imports": "graphics, grDevices", + "Suggests": "callr, DBI, knitr, methods, rlang, rmarkdown (>= 2.12),\nRSQLite, testthat (>= 3.0.0)", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "Collate": "'aaa.R' 'collate.R' 'connection.R' 'db.R' 'defer-exit.R'\n'standalone-defer.R' 'defer.R' 'devices.R' 'local_.R' 'with_.R'\n'dir.R' 'env.R' 'file.R' 'language.R' 'libpaths.R' 'locale.R'\n'makevars.R' 'namespace.R' 'options.R' 'par.R' 'path.R' 'rng.R'\n'seed.R' 'wrap.R' 'sink.R' 'tempfile.R' 'timezone.R'\n'torture.R' 'utils.R' 'with.R'", + "NeedsCompilation": "no", + "Packaged": "2024-10-28 10:58:18 UTC; lionel", + "Author": "Jim Hester [aut],\n Lionel Henry [aut, cre],\n Kirill Müller [aut],\n Kevin Ushey [aut],\n Hadley Wickham [aut],\n Winston Chang [aut],\n Jennifer Bryan [ctb],\n Richard Cotton [ctb],\n Posit Software, PBC [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN", + "Date/Publication": "2024-10-28 13:30:02 UTC", + "Built": "R 4.4.1; ; 2024-10-28 14:09:35 UTC; unix" + } + }, + "xfun": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "xfun", + "Type": "Package", + "Title": "Supporting Functions for Packages Maintained by 'Yihui Xie'", + "Version": "0.56", + "Authors@R": "c(\n person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")),\n person(\"Wush\", \"Wu\", role = \"ctb\"),\n person(\"Daijiang\", \"Li\", role = \"ctb\"),\n person(\"Xianying\", \"Tan\", role = \"ctb\"),\n person(\"Salim\", \"Brüggemann\", role = \"ctb\", email = \"salim-b@pm.me\", comment = c(ORCID = \"0000-0002-5329-5987\")),\n person(\"Christophe\", \"Dervieux\", role = \"ctb\"),\n person()\n )", + "Description": "Miscellaneous functions commonly used in other packages maintained by 'Yihui Xie'.", + "Depends": "R (>= 3.2.0)", + "Imports": "grDevices, stats, tools", + "Suggests": "testit, parallel, codetools, methods, rstudioapi, tinytex (>=\n0.30), mime, litedown (>= 0.6), commonmark, knitr (>= 1.50),\nremotes, pak, curl, xml2, jsonlite, magick, yaml, data.table,\nqs2", + "License": "MIT + file LICENSE", + "URL": "https://github.com/yihui/xfun", + "BugReports": "https://github.com/yihui/xfun/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "VignetteBuilder": "litedown", + "NeedsCompilation": "yes", + "Packaged": "2026-01-18 04:03:19 UTC; yihui", + "Author": "Yihui Xie [aut, cre, cph] (ORCID:\n , URL: https://yihui.org),\n Wush Wu [ctb],\n Daijiang Li [ctb],\n Xianying Tan [ctb],\n Salim Brüggemann [ctb] (ORCID: ),\n Christophe Dervieux [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN", + "Date/Publication": "2026-01-18 06:10:03 UTC", + "Built": "R 4.4.3; aarch64-apple-darwin20; 2026-01-18 06:24:44 UTC; unix", + "Archs": "xfun.so.dSYM" + } + }, + "xtable": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "xtable", + "Version": "1.8-4", + "Date": "2019-04-08", + "Title": "Export Tables to LaTeX or HTML", + "Authors@R": "c(person(\"David B.\", \"Dahl\", role=\"aut\"),\n person(\"David\", \"Scott\", role=c(\"aut\",\"cre\"),\n email=\"d.scott@auckland.ac.nz\"),\n person(\"Charles\", \"Roosen\", role=\"aut\"),\n person(\"Arni\", \"Magnusson\", role=\"aut\"),\n person(\"Jonathan\", \"Swinton\", role=\"aut\"),\n person(\"Ajay\", \"Shah\", role=\"ctb\"),\n person(\"Arne\", \"Henningsen\", role=\"ctb\"),\n person(\"Benno\", \"Puetz\", role=\"ctb\"),\n person(\"Bernhard\", \"Pfaff\", role=\"ctb\"),\n person(\"Claudio\", \"Agostinelli\", role=\"ctb\"),\n person(\"Claudius\", \"Loehnert\", role=\"ctb\"),\n person(\"David\", \"Mitchell\", role=\"ctb\"),\n person(\"David\", \"Whiting\", role=\"ctb\"),\n person(\"Fernando da\", \"Rosa\", role=\"ctb\"),\n person(\"Guido\", \"Gay\", role=\"ctb\"),\n person(\"Guido\", \"Schulz\", role=\"ctb\"),\n person(\"Ian\", \"Fellows\", role=\"ctb\"),\n person(\"Jeff\", \"Laake\", role=\"ctb\"),\n person(\"John\", \"Walker\", role=\"ctb\"),\n person(\"Jun\", \"Yan\", role=\"ctb\"),\n person(\"Liviu\", \"Andronic\", role=\"ctb\"),\n person(\"Markus\", \"Loecher\", role=\"ctb\"),\n person(\"Martin\", \"Gubri\", role=\"ctb\"),\n person(\"Matthieu\", \"Stigler\", role=\"ctb\"),\n person(\"Robert\", \"Castelo\", role=\"ctb\"),\n person(\"Seth\", \"Falcon\", role=\"ctb\"),\n person(\"Stefan\", \"Edwards\", role=\"ctb\"),\n person(\"Sven\", \"Garbade\", role=\"ctb\"),\n person(\"Uwe\", \"Ligges\", role=\"ctb\"))", + "Maintainer": "David Scott ", + "Imports": "stats, utils", + "Suggests": "knitr, plm, zoo, survival", + "VignetteBuilder": "knitr", + "Description": "Coerce data to LaTeX and HTML tables.", + "URL": "http://xtable.r-forge.r-project.org/", + "Depends": "R (>= 2.10.0)", + "License": "GPL (>= 2)", + "Repository": "CRAN", + "NeedsCompilation": "no", + "Packaged": "2019-04-21 10:56:51 UTC; dsco036", + "Author": "David B. Dahl [aut],\n David Scott [aut, cre],\n Charles Roosen [aut],\n Arni Magnusson [aut],\n Jonathan Swinton [aut],\n Ajay Shah [ctb],\n Arne Henningsen [ctb],\n Benno Puetz [ctb],\n Bernhard Pfaff [ctb],\n Claudio Agostinelli [ctb],\n Claudius Loehnert [ctb],\n David Mitchell [ctb],\n David Whiting [ctb],\n Fernando da Rosa [ctb],\n Guido Gay [ctb],\n Guido Schulz [ctb],\n Ian Fellows [ctb],\n Jeff Laake [ctb],\n John Walker [ctb],\n Jun Yan [ctb],\n Liviu Andronic [ctb],\n Markus Loecher [ctb],\n Martin Gubri [ctb],\n Matthieu Stigler [ctb],\n Robert Castelo [ctb],\n Seth Falcon [ctb],\n Stefan Edwards [ctb],\n Sven Garbade [ctb],\n Uwe Ligges [ctb]", + "Date/Publication": "2019-04-21 12:20:03 UTC", + "Built": "R 4.4.0; ; 2024-04-05 15:00:10 UTC; unix" + } + }, + "yaml": { + "Source": "CRAN", + "Repository": "https://cran.rstudio.com", + "description": { + "Package": "yaml", + "Type": "Package", + "Title": "Methods to Convert R Data to YAML and Back", + "Date": "2024-07-22", + "Version": "2.3.10", + "Suggests": "RUnit", + "Author": "Shawn P Garbett [aut], Jeremy Stephens [aut, cre], Kirill Simonov [aut], Yihui Xie [ctb],\n Zhuoer Dong [ctb], Hadley Wickham [ctb], Jeffrey Horner [ctb], reikoch [ctb],\n Will Beasley [ctb], Brendan O'Connor [ctb], Gregory R. Warnes [ctb],\n Michael Quinn [ctb], Zhian N. Kamvar [ctb], Charlie Gao [ctb]", + "Maintainer": "Shawn Garbett ", + "License": "BSD_3_clause + file LICENSE", + "Description": "Implements the 'libyaml' 'YAML' 1.1 parser and emitter\n () for R.", + "URL": "https://github.com/vubiostat/r-yaml/", + "BugReports": "https://github.com/vubiostat/r-yaml/issues", + "NeedsCompilation": "yes", + "Packaged": "2024-07-22 15:44:18 UTC; garbetsp", + "Repository": "CRAN", + "Date/Publication": "2024-07-26 15:10:02 UTC", + "Built": "R 4.4.0; aarch64-apple-darwin20; 2024-07-26 16:57:52 UTC; unix", + "Archs": "yaml.so.dSYM" + } + } + }, + "files": { + "helper-functions.R": { + "checksum": "5ab9d6bc9bff14c8c1d9fa977c0e1114" + }, + "mappings.R": { + "checksum": "8212467c9e4581c1c17a171e437a7392" + }, + "markdown/About.md": { + "checksum": "d3cbf7150ceb763d439a2b59205269f2" + }, + "markdown/About.Rmd": { + "checksum": "e1f1ff40cae4ea033a889f6ca4dc4f2c" + }, + "markdown/Accessing.md": { + "checksum": "4c86b6d344d39aca3b4f0742bde41359" + }, + "markdown/example-data.md": { + "checksum": "c54e273207d46f34e40bdd485f5ea3d4" + }, + "markdown/IRD.md": { + "checksum": "abc2ad577f82fae7c55742308f6322b1" + }, + "markdown/LOR.md": { + "checksum": "2f7b4150fb2156e6569e9c36dc8124bd" + }, + "markdown/LRM.md": { + "checksum": "78a6fc103de91aceafc95e118f9f1b0f" + }, + "markdown/LRR.md": { + "checksum": "6208dd60e8158f749b3a8c696feff531" + }, + "markdown/NAP.md": { + "checksum": "a7a45431bc4dfb3161dc54039b638dfc" + }, + "markdown/PAND.md": { + "checksum": "34fde79fff0eb38534f6a8bcb8d9930d" + }, + "markdown/PEM.md": { + "checksum": "4a27c0ef0bba4ce002da2b1c76c5b14b" + }, + "markdown/PND-message.md": { + "checksum": "e21dd4f76a2042838c9c8a95b610c22e" + }, + "markdown/PND.md": { + "checksum": "0610991f9fb3cad516a21a77be9dbe24" + }, + "markdown/PoGO.md": { + "checksum": "c106adb9706dcf2cfc6a0544c3e76e5b" + }, + "markdown/SMD.md": { + "checksum": "7a84a8a146222c2af3bba31815ddf9d7" + }, + "markdown/Tau-BC.md": { + "checksum": "f618f318da048fd733e6d7cf29ce9b17" + }, + "markdown/Tau-U.md": { + "checksum": "7b73eb53a15a57c463957e7a21502c9b" + }, + "markdown/Tau.md": { + "checksum": "2f85f86265970764aa349c5fad4e8ab6" + }, + "markdown/using_multiple_series.md": { + "checksum": "cbabc9a10863274e2717354d3b9979ec" + }, + "markdown/using_single_series.md": { + "checksum": "e7870696ff9074224238786907eb512b" + }, + "server.R": { + "checksum": "82e0438cefab69ffeedeb1d6f4f23efe" + }, + "ui.R": { + "checksum": "2338105996ec8ad858bdbe6c5fc4ae71" + } + }, + "users": null +} diff --git a/inst/shiny-examples/SCD-effect-sizes/ui.R b/inst/shiny-examples/SCD-effect-sizes/ui.R deleted file mode 100644 index 32edf050..00000000 --- a/inst/shiny-examples/SCD-effect-sizes/ui.R +++ /dev/null @@ -1,298 +0,0 @@ -library(shiny) -source("mappings.R") - -ui <- navbarPage(title = "Single-case effect size calculator", - id = "SCD_es_calculator", - tabPanel("About", - navlistPanel(widths = c(3,9), - tabPanel("About", - includeMarkdown("markdown/About.md")), - tabPanel("Accessing the calculator", - includeMarkdown("markdown/Accessing.md")), - tabPanel("Using the single-series calculator", - includeMarkdown("markdown/using_single_series.md")), - tabPanel("Using the multiple-series calculator", - includeMarkdown("markdown/using_multiple_series.md")), - tabPanel("Example data", - includeMarkdown("markdown/example-data.md")) - )), - tabPanel("Single-Series Calculator", - fluidRow(column(12, - h3("Data input"), - h5("Enter data values, separated by commas, spaces, or tabs.") - ) - ), - fluidRow( - column(4, - textInput("A_dat", label = "Phase A", value = "") - ), - column(4, - textInput("B_dat", label = "Phase B", value = "") - ), - column(4, - checkboxInput("toggleSinglePlot","Show graph", value = FALSE) - ) - ), - conditionalPanel(condition = "input.toggleSinglePlot", - fluidRow( - column(12, - plotOutput('SCDplot', height = "300px") - ) - )), - fluidRow( - hr(), - column(4, - h3("Effect sizes") - ), - column(8, - h3(textOutput("ES_name")) - ) - ), - sidebarLayout( - sidebarPanel(width = 4, - tabsetPanel(id = "ES_family", type = "pills", - tabPanel("Non-overlap", - br(), - selectInput("NOM_ES", - label = "Effect size index", - choices = c("IRD", - "NAP", - "PAND", - "PEM", - "PND", - "Tau", - "Tau-BC" = "Tau_BC", - "Tau-U" = "Tau_U"), - selected = "NAP") - ), - tabPanel("Parametric", - br(), - selectInput("parametric_ES", - label = "Effect size index", - choices = c("LOR", "LRRd", "LRRi", "LRM", "PoGO", "SMD"), - selected = "LRRd"), - conditionalPanel(condition = "input.parametric_ES=='LRRi'|input.parametric_ES=='LRRd'", - checkboxInput("pct_change","Convert LRR to % change")), - conditionalPanel(condition = "input.parametric_ES=='PoGO'", - numericInput("goal_level", - label = "Goal level for the behavior", - value = NULL)) - ) - ), - selectInput("improvement", - label = "Direction of improvement", - choices = c("increase", "decrease")), - conditionalPanel(condition = "input.ES_family=='Non-overlap' & input.NOM_ES == 'Tau_BC'", - radioButtons("tau_calculation", - label = "Choose a method for calculating Tau index", - choices = c("Tau (non-overlap)" = "Nlap", - "Kendall rank correlation" = "Kendall")) - ), - conditionalPanel(condition = "input.ES_family=='Non-overlap' & input.NOM_ES == 'Tau_BC'", - radioButtons("baseline_check", - label = "Test for baseline trend", - choices = c("Always adjust for baseline trend" = "No", - "Pretest for baseline trend, adjust if significant" = "Yes")) - ), - conditionalPanel(condition = "input.ES_family=='Non-overlap' & - input.NOM_ES == 'Tau_BC' & input.baseline_check == 'Yes'", - numericInput("significance_level", - label = "Significance level for the initial baseline trend test", - value = 0.05, step = .01, - min = 0.01, - max = 0.99) - ), - conditionalPanel("input.ES_family=='Parametric'", - conditionalPanel(condition = "input.parametric_ES == 'SMD'", - radioButtons("SMD_denom", - label = "Standardized by", - choices = c("baseline SD","pooled SD"))), - conditionalPanel(condition = "input.parametric_ES=='LOR'|input.parametric_ES=='LRRi'|input.parametric_ES=='LRRd'", - selectInput("outScale", label = "Outcome Scale", - choices = c("percentage", - "proportion", - "count", - "rate", - "other")), - numericInput("intervals", label = "If observed via interval recording, total intervals per session", value = NULL)), - conditionalPanel(condition = "input.parametric_ES=='LRRi'|input.parametric_ES=='LRRd'", - numericInput("obslength", label = "Session length (in minutes)", value = NULL)), - conditionalPanel(condition = "input.parametric_ES=='LOR'|input.parametric_ES=='LRRi'|input.parametric_ES=='LRRd'", - numericInput("lrrfloor", label = "User-specified floor constant",value = NULL)) - ), - conditionalPanel(condition = "input.ES_family=='Parametric'|input.NOM_ES=='NAP'|input.NOM_ES=='Tau'|input.NOM_ES=='Tau_BC'", - numericInput("confidence", - label = "Confidence level", - value = 95, - min = 0, - max = 100) - ), - numericInput("digits","Digits", - value = 2, min = 1, - max = 16, step = 1) - ), - mainPanel(width = 8, - conditionalPanel(condition = "input.ES_family=='Non-overlap' & input.NOM_ES == 'PND'", - includeMarkdown("markdown/PND-message.md")), - htmlOutput("result"), - checkboxInput("explanation", - label = "Show methods and references", - value = FALSE), - conditionalPanel("input.explanation==true", - conditionalPanel("input.ES_family=='Non-overlap'", - conditionalPanel("input.NOM_ES == 'IRD'", withMathJax(includeMarkdown("markdown/IRD.md"))), - conditionalPanel("input.NOM_ES == 'NAP'", withMathJax(includeMarkdown("markdown/NAP.md"))), - conditionalPanel("input.NOM_ES == 'PAND'", withMathJax(includeMarkdown("markdown/PAND.md"))), - conditionalPanel("input.NOM_ES == 'PEM'", withMathJax(includeMarkdown("markdown/PEM.md"))), - conditionalPanel("input.NOM_ES == 'PND'", withMathJax(includeMarkdown("markdown/PND.md"))), - conditionalPanel("input.NOM_ES == 'Tau'", withMathJax(includeMarkdown("markdown/Tau.md"))), - conditionalPanel("input.NOM_ES == 'Tau_BC'", withMathJax(includeMarkdown("markdown/Tau-BC.md"))), - conditionalPanel("input.NOM_ES == 'Tau_U'", withMathJax(includeMarkdown("markdown/Tau-U.md"))) - ), - conditionalPanel("input.ES_family=='Parametric'", - conditionalPanel("input.parametric_ES == 'LRRi'|input.parametric_ES == 'LRRd'", withMathJax(includeMarkdown("markdown/LRR.md"))), - conditionalPanel("input.parametric_ES == 'LRM'", withMathJax(includeMarkdown("markdown/LRM.md"))), - conditionalPanel("input.parametric_ES == 'SMD'", withMathJax(includeMarkdown("markdown/SMD.md"))), - conditionalPanel("input.parametric_ES == 'LOR'", withMathJax(includeMarkdown("markdown/LOR.md"))), - conditionalPanel("input.parametric_ES == 'PoGO'", withMathJax(includeMarkdown("markdown/PoGO.md"))) - ) - ) - ) - - ) - ), - tabPanel("Multiple-Series Calculator", - tabsetPanel( - id = "BatchEntryTabs", - tabPanel("Data", - sidebarLayout(sidebarPanel(radioButtons('dat_type', 'What data do you want to use?', - c("Use an example" = "example", - "Upload data from a .csv or .txt file" = "dat", - "Upload data from a .xlsx file" = "xlsx")), - conditionalPanel( - condition = "input.dat_type == 'example'", - selectInput("example", label = "Choose an example", - choices = example_list) - ), - conditionalPanel( - condition = "input.dat_type == 'dat'", - fileInput('dat', 'Upload a .csv or .txt file', accept=c('text/csv', 'text/comma-separated-values,text/plain', '.csv', '.txt')), - checkboxInput('header', 'File has a header?', TRUE), - radioButtons('sep', 'Data seperator', c(Commas=',', Semicolons=';', Tabs='\t', Spaces=' '), inline = TRUE), - radioButtons('quote', 'Include quotes?', c('No'='', 'Double Quotes'='"', 'Single Quotes'="'"), inline = TRUE) - ), - conditionalPanel( - condition = "input.dat_type == 'xlsx'", - fileInput('xlsx', 'Upload a .xlsx file', accept = c('.xlsx')), - checkboxInput('col_names', 'File has a header?', TRUE), - selectInput("inSelect", "Select a sheet", "") - ), - uiOutput("filtervarMapping"), - uiOutput("filterMapping") - ), - mainPanel(tableOutput("datview"))) - ), - tabPanel("Variables", - sidebarLayout( - sidebarPanel( - style = "max-height: 1200px; overflow-y: auto", - conditionalPanel(condition = "input.dat_type == 'dat' | input.dat_type == 'xlsx'", - checkboxInput("calcPhasePair", "Calculate phase pair numbers for ABAB designs.", value = FALSE)), - uiOutput("clusterPhase"), - uiOutput("baseDefine"), - uiOutput("treatDefine"), - uiOutput("outOrderImp"), - conditionalPanel(condition = "input.bimprovement == 'series'", - uiOutput("improvementVar")), - conditionalPanel(condition = "input.bimprovement == 'series'", - uiOutput("improvementDir")), - br(), - br(), - br() - ), - mainPanel(tableOutput("datview2")) - ) - ), - tabPanel("Plot", - sidebarLayout( - sidebarPanel( - style = "max-height: 800px; overflow-y: auto", - uiOutput("facetSelector"), - uiOutput("graph_filters"), - br(), - br(), - br(), - br() - ), - mainPanel(plotOutput('batchPlot', height = "auto")) - ) - - ), - tabPanel("Estimate", - sidebarLayout( - sidebarPanel( - h4("Select Effect Sizes"), - checkboxGroupInput("bESno", "Non-Overlap Effect Sizes", choices = c("IRD","NAP","PAND","PEM","PND","Tau","Tau-BC" = "Tau_BC","Tau-U" = "Tau_U"), inline = TRUE), - checkboxGroupInput("bESpar", "Parametric Effect Sizes", choices = c("LOR", "LRRd", "LRRi", "LRM", "PoGO", "SMD"), inline = TRUE), - conditionalPanel(condition = "input.bESno.includes('Tau_BC')", - radioButtons("btau_calculation", label = "Choose a method for calculating Tau index", - choices = c("Tau (non-overlap)" = "Nlap", - "Kendall rank correlation" = "Kendall"), - inline = TRUE)), - conditionalPanel(condition = "input.bESno.includes('Tau_BC')", - radioButtons("bbaseline_check", label = "Use baseline trend test for Tau-BC?", - choices = c("Always adjusting for baseline trend" = "No", - "Pretest for baseline trend, adjust if significant" = "Yes"), - inline = FALSE)), - conditionalPanel(condition = "input.bESno.includes('Tau_BC') & input.bbaseline_check == 'Yes'", - numericInput("bsignificance_level", - label = "Significance level for the baseline trend test", - value = 0.05, step = .01, - min = 0.01, - max = 0.99)), - conditionalPanel(condition = "input.bESpar.includes('LRRi') | input.bESpar.includes('LRRd') | input.bESpar.includes('LOR')", - checkboxInput("b_pct_change", "Convert LRR to % change")), - conditionalPanel(condition = "input.bESpar.includes('LOR')", - strong(style="color:orange","LOR will only be calculated for outcomes measured as percentages or proportions."), - br("")), - conditionalPanel(condition = "input.bESpar.includes('SMD')", - radioButtons("bSMD_denom", label = "Standardize SMD ", - choices = c("baseline SD" = "baseline", "pooled SD" = "pool"), inline = TRUE)), - conditionalPanel(condition = "input.bESpar.includes('LRRi') | input.bESpar.includes('LRRd') | input.bESpar.includes('LOR')", - uiOutput("outcomeScale")), - conditionalPanel(condition = "input.bESpar.includes('LRRi') | input.bESpar.includes('LRRd') | input.bESpar.includes('LOR')", - uiOutput("measurementProc")), - conditionalPanel(condition = "input.bESpar.includes('PoGO')", uiOutput("goalLevel")), - conditionalPanel(condition = "input.b_aggregate != ''", - radioButtons('weighting_scheme', - label = "Weighting scheme to use for aggregating.", - choices = c("equal", "1/V", "nA", "nB", "nA*nB", "1/nA + 1/nB")) - ), - numericInput("bconfidence", label = "Confidence level (for any effect size with standard errors)", value = 95, min = 0, max = 100), - numericInput("bdigits","Digits", - value = 2, min = 1, - max = 16, step = 1), - radioButtons("resultsformat", "Long or wide format?", c("Long" = "long", "Wide" = "wide"), inline = TRUE), - conditionalPanel(condition = "input.bESpar.length > 0 || input.bESno.length > 0", - actionButton("batchest", "Estimate")) - ), - - mainPanel( - conditionalPanel(condition = "input.bESno.includes('PND')", - includeMarkdown("markdown/PND-message.md")), - tableOutput("batchTable"), - p(), - conditionalPanel(condition = "input.batchest > 0", - downloadButton("downloadES", label = "Download results")) - ) - ) - - ), - tabPanel("Syntax for R", - rclipboard::rclipboardSetup(), - uiOutput("clip"), - verbatimTextOutput("syntax") - ) - ) - - )) diff --git a/tests/testthat/.gitignore b/tests/testthat/.gitignore new file mode 100644 index 00000000..56597491 --- /dev/null +++ b/tests/testthat/.gitignore @@ -0,0 +1 @@ +testthat.Rproj diff --git a/tests/testthat/test-SCD-effect-sizes.R b/tests/testthat/test-SCD-effect-sizes.R index 7afaf92e..e1253300 100644 --- a/tests/testthat/test-SCD-effect-sizes.R +++ b/tests/testthat/test-SCD-effect-sizes.R @@ -211,6 +211,7 @@ check_batch <- function(app, example_dat, ES, digits = 4, goal = NULL, Kendall = app$set_inputs(batchest = "click") app$wait_for_idle() output_app <- app$get_value(output = "batchTable") + app$wait_for_idle() tbl <- read_html(output_app) %>% html_table(fill = TRUE,convert = TRUE,na.strings = "-") %>% .[[1]] @@ -497,12 +498,14 @@ check_load <- function(app, file, digits = 6, Kendall = FALSE) { app$set_inputs(batchest = "click") app$wait_for_idle() output_app <- app$get_value(output = "batchTable") - + if (is.null(output_app)) { + stop("batchTable output is NULL after wait_for_idle().") + } read_html(output_app) %>% html_table(fill = TRUE,convert = TRUE,na.strings = "-") %>% .[[1]] %>% as.data.frame() - + } @@ -607,10 +610,10 @@ test_that("calcPhasePair works in the app.", { } app$wait_for_idle() output_app_table <- - read_html(output_app) %>% - html_table(fill = TRUE, convert = TRUE, na.strings = "-") %>% - .[[1]] %>% - as.data.frame() + read_html(output_app) %>% + html_table(fill = TRUE, convert = TRUE, na.strings = "-") %>% + .[[1]] %>% + as.data.frame() app$wait_for_idle() data <- read.csv(data_path) @@ -678,7 +681,9 @@ check_bint_bobslen <- function(file, bint = NA, bobslen = NA) { app$set_inputs(batchest = "click") app$wait_for_idle() output_app <- app$get_value(output = "batchTable") - + if (is.null(output_app)) { + stop("batchTable output is NULL after wait_for_idle().") + } output_app_table <- read_html(output_app) %>% html_table(fill = TRUE, convert = TRUE, na.strings = "-") %>% @@ -791,7 +796,6 @@ check_PoGO <- function(file) { app$set_inputs(bdigits = 4) app$wait_for_idle() app$set_inputs(batchest = "click") - app$wait_for_idle() output_app <- app$get_value(output = "batchTable") diff --git a/tests/testthat/test-batch-calc-ES.R b/tests/testthat/test-batch-calc-ES.R index 3c2b7b44..bb75a35a 100644 --- a/tests/testthat/test-batch-calc-ES.R +++ b/tests/testthat/test-batch-calc-ES.R @@ -598,4 +598,24 @@ test_that("Passing a variable to the scale argument works when the variable is a expect_identical(Shogren_DV_scale, Shogren_scale) expect_identical(Shogren_DV_scale, Shogren_mean) }) - +test_that("batch_calc_ES() gives informative error when condition has only one level", { + + bad_dat <- data.frame( + case = "A", + phase = c("A", "A", "A"), + outcome = c(3, 4, 5) + ) + + expect_error( + batch_calc_ES( + dat = bad_dat, + grouping = case, + condition = phase, + outcome = outcome, + baseline_phase = "A", + intervention_phase = "B", + ES = "NAP" + ), + "Effect size calculation failed" + ) +}) diff --git a/tests/testthat/test-trunc-constant.R b/tests/testthat/test-trunc-constant.R index 37663747..914436eb 100644 --- a/tests/testthat/test-trunc-constant.R +++ b/tests/testthat/test-trunc-constant.R @@ -114,3 +114,24 @@ test_that("trunc_const() works for batched datasets.", { ) }) + +test_that("trunc_constant() handles NULL, scalar, vector, and NA", { + + res_null <- trunc_constant(NULL, scale = "count") + expect_equal(length(res_null), 1) + + res_scalar <- trunc_constant(5, scale = "count") + expect_equal(length(res_scalar), 1) + + x <- c(1, 2, 3) + res_vec <- trunc_constant(x, scale = "count") + expect_equal(length(res_vec), 1) + + res_na <- trunc_constant(NA, scale = "count") + expect_equal(length(res_na), 1) + + y <- c(1, NA, 3) + res_vec_na <- trunc_constant(y, scale = "count") + expect_equal(length(res_vec_na), 1) + +}) \ No newline at end of file diff --git a/tests/testthat/testdata/McKissick.csv b/tests/testthat/testdata/McKissick.csv new file mode 100644 index 00000000..8a5cf1ce --- /dev/null +++ b/tests/testthat/testdata/McKissick.csv @@ -0,0 +1,36 @@ +"Case_pseudonym","Session_number","Condition","Outcome","Session_length","Procedure" +"Period 1",1,"A",13.62,20,"count" +"Period 1",2,"A",12.57,20,"count" +"Period 1",3,"A",15.76,20,"count" +"Period 1",4,"B",5.97,20,"count" +"Period 1",5,"B",4.63,20,"count" +"Period 1",6,"B",5.82,20,"count" +"Period 1",7,"B",3.72,20,"count" +"Period 1",8,"B",8.07,20,"count" +"Period 1",9,"B",2.95,20,"count" +"Period 1",10,"B",11.86,20,"count" +"Period 2",1,"A",8.07,20,"count" +"Period 2",2,"A",21.86,20,"count" +"Period 2",3,"A",19.6,20,"count" +"Period 2",4,"A",20.98,20,"count" +"Period 2",5,"A",17.75,20,"count" +"Period 2",6,"B",9.96,20,"count" +"Period 2",7,"B",4.02,20,"count" +"Period 2",8,"B",10.8,20,"count" +"Period 2",9,"B",9.57,20,"count" +"Period 2",10,"B",0.04,20,"count" +"Period 2",11,"B",5.57,20,"count" +"Period 2",12,"B",24.52,20,"count" +"Period 3",1,"A",11.82,20,"count" +"Period 3",2,"A",13.95,20,"count" +"Period 3",3,"A",11.93,20,"count" +"Period 3",4,"A",16.09,20,"count" +"Period 3",5,"A",18.09,20,"count" +"Period 3",6,"A",11.75,20,"count" +"Period 3",7,"A",13.75,20,"count" +"Period 3",8,"A",12.59,20,"count" +"Period 3",9,"A",11,20,"count" +"Period 3",10,"B",1.98,20,"count" +"Period 3",11,"B",4.8,20,"count" +"Period 3",12,"B",11.87,20,"count" +"Period 3",13,"B",5.34,20,"count"