diff --git a/DESCRIPTION b/DESCRIPTION
index cfd5caacf..fc1849a59 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -32,6 +32,7 @@ Depends:
Imports:
bslib (>= 0.8.0),
checkmate (>= 2.1.0),
+ colorspace,
colourpicker (>= 1.3.0),
dplyr (>= 1.0.5),
DT (>= 0.13),
@@ -42,13 +43,20 @@ Imports:
ggpp (>= 0.5.8-1),
ggrepel (>= 0.9.6),
goftest (>= 1.2-3),
+ graphics,
+ grDevices,
grid,
gridExtra (>= 2.3),
+ htmltools,
htmlwidgets (>= 1.6.4),
jsonlite (>= 1.8.9),
lattice (>= 0.18-4),
lifecycle (>= 0.2.0),
MASS (>= 7.3-60),
+ plotly,
+ reactable,
+ rlang (>= 1.0.0),
+ rmarkdown (>= 2.23),
rtables (>= 0.6.11),
scales (>= 1.3.0),
shinyjs (>= 2.1.0),
@@ -73,8 +81,6 @@ Suggests:
logger (>= 0.2.0),
nestcolor (>= 0.1.0),
pkgload,
- rlang (>= 1.0.0),
- rmarkdown (>= 2.23),
roxy.shinylive,
rvest,
shinytest2,
diff --git a/NAMESPACE b/NAMESPACE
index 9c0f1aa0f..d85616edb 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -10,6 +10,8 @@ S3method(create_sparklines,logical)
S3method(create_sparklines,numeric)
export(add_facet_labels)
export(get_scatterplotmatrix_stats)
+export(spiderplotly)
+export(swimlanely)
export(tm_a_pca)
export(tm_a_regression)
export(tm_data_table)
@@ -21,10 +23,16 @@ export(tm_g_distribution)
export(tm_g_response)
export(tm_g_scatterplot)
export(tm_g_scatterplotmatrix)
+export(tm_g_spiderplot)
+export(tm_g_swimlane)
+export(tm_g_waterfall)
export(tm_missing_data)
export(tm_outliers)
+export(tm_rmarkdown)
export(tm_t_crosstable)
+export(tm_t_reactables)
export(tm_variable_browser)
+export(waterfally)
import(ggmosaic)
import(ggplot2)
import(shiny)
@@ -32,3 +40,4 @@ import(teal)
import(teal.transform)
importFrom(dplyr,"%>%")
importFrom(lifecycle,deprecated)
+importFrom(rlang,":=")
diff --git a/R/module_colur_picker.R b/R/module_colur_picker.R
new file mode 100644
index 000000000..137deed1e
--- /dev/null
+++ b/R/module_colur_picker.R
@@ -0,0 +1,129 @@
+# todo: to teal widgets?
+
+colour_picker_ui <- function(id) {
+ ns <- NS(id)
+ bslib::accordion(
+ uiOutput(ns("module"), title = "Event colors:", container = bslib::accordion_panel),
+ open = FALSE
+ )
+}
+
+colour_picker_srv <- function(id, x, default_colors) {
+ moduleServer(id, function(input, output, session) {
+ default_colors_adjusted <- reactive({
+ req(x())
+ .color_palette_discrete(
+ levels = unique(x()),
+ color = default_colors
+ )
+ })
+
+ color_values <- reactiveVal()
+ observeEvent(default_colors_adjusted(), {
+ if (!identical(default_colors_adjusted(), color_values())) {
+ color_values(default_colors_adjusted())
+ }
+ })
+
+ output$module <- renderUI({
+ tagList(
+ lapply(
+ names(color_values()),
+ function(level) {
+ div(
+ colourpicker::colourInput(
+ inputId = session$ns(.name_to_id(level)),
+ label = level,
+ value = color_values()[level]
+ )
+ )
+ }
+ )
+ )
+ })
+
+ color_input_values <- reactiveVal()
+ observe({
+ req(color_values())
+ new_input_values <- sapply(names(color_values()), function(level) {
+ c(input[[.name_to_id(level)]], color_values()[[level]])[1]
+ })
+ if (!identical(new_input_values, isolate(color_input_values()))) {
+ isolate(color_input_values(new_input_values))
+ }
+ })
+
+ color_input_values
+ })
+}
+
+
+
+#' Color palette discrete
+#'
+#' To specify custom discrete colors to `plotly` or `ggplot` elements one needs to specify a vector named by
+#' levels of variable used for coloring. This function allows to specify only some or none of the colors/levels
+#' as the rest will be filled automatically.
+#' @param levels (`character`) values of possible variable levels
+#' @param color (`named character`) valid color names (see [colors()]) or hex-colors named by `levels`.
+#' @return `character` with hex colors named by `levels`.
+.color_palette_discrete <- function(levels, color) {
+ p <- color[names(color) %in% levels]
+
+ if (length(p) > 0) {
+ p_rgb_num <- grDevices::col2rgb(p)
+ p_hex <- grDevices::rgb(p_rgb_num[1, ] / 255, p_rgb_num[2, ] / 255, p_rgb_num[3, ] / 255)
+ p <- stats::setNames(p_hex, names(p))
+ }
+
+ missing_levels <- setdiff(levels, names(p))
+ N <- length(levels)
+ n <- length(p)
+ m <- N - n
+
+ if (m > 0 && n > 0) {
+ all_colors <- colorspace::qualitative_hcl(N)
+
+ if (n == 1) {
+ current_color_hsv <- grDevices::rgb2hsv(grDevices::col2rgb(p))
+ all_colors_hsv <- grDevices::rgb2hsv(grDevices::col2rgb(all_colors))
+
+ distances <- numeric(length(all_colors))
+ for (i in seq_along(all_colors)) {
+ h_diff <- min(
+ abs(current_color_hsv[1] - all_colors_hsv[1, i]),
+ 1 - abs(current_color_hsv[1] - all_colors_hsv[1, i])
+ )
+ s_diff <- abs(current_color_hsv[2] - all_colors_hsv[2, i])
+ v_diff <- abs(current_color_hsv[3] - all_colors_hsv[3, i])
+ distances[i] <- sqrt(h_diff^2 + s_diff^2 + v_diff^2)
+ }
+
+ idx <- order(distances, decreasing = TRUE)[seq_len(m)]
+ missing_colors <- all_colors[idx]
+ } else {
+ remaining_colors <- all_colors[seq_len(m)]
+ missing_colors <- remaining_colors
+ }
+
+ p <- c(p, stats::setNames(missing_colors, missing_levels))
+ } else if (m > 0) {
+ missing_colors <- colorspace::qualitative_hcl(m)
+ p <- stats::setNames(missing_colors, missing_levels)
+ }
+
+ result <- p[match(levels, names(p))]
+ stats::setNames(result, levels)
+}
+
+
+.shape_palette_discrete <- function(levels, symbol) {
+ if (length(symbol) == 0) {
+ s <- rep("circle-open", length(levels))
+ s <- stats::setNames(s, levels)
+ } else {
+ s <- stats::setNames(symbol[levels], levels)
+ s[is.na(s)] <- "circle-open"
+ }
+ s
+}
diff --git a/R/plotly_with_settings.R b/R/plotly_with_settings.R
new file mode 100644
index 000000000..b40414302
--- /dev/null
+++ b/R/plotly_with_settings.R
@@ -0,0 +1,10 @@
+plotly_with_settings_ui <- function(id, height) {
+ ns <- NS(id)
+ plotly::plotlyOutput(ns("plot"), height = height)
+}
+
+plotly_with_settings_srv <- function(id, plot) {
+ moduleServer(id, function(input, output, session) {
+ output$plot <- plotly::renderPlotly(plot())
+ })
+}
diff --git a/R/roxygen2_templates.R b/R/roxygen2_templates.R
index 8ff396409..7e928a97f 100644
--- a/R/roxygen2_templates.R
+++ b/R/roxygen2_templates.R
@@ -14,3 +14,55 @@ roxygen_ggplot2_args_param <- function(...) {
}
# nocov end
+
+#' Shared parameters documentation
+#'
+#' Defines common arguments shared across multiple functions in the package
+#' to avoid repetition by using `inheritParams`.
+#'
+#' @param plot_height (`numeric`) optional, specifies the plot height as a three-element vector of
+#' `value`, `min`, and `max` intended for use with a slider UI element.
+#' @param plot_width (`numeric`) optional, specifies the plot width as a three-element vector of
+#' `value`, `min`, and `max` for a slider encoding the plot width.
+#' @param rotate_xaxis_labels (`logical`) optional, whether to rotate plot X axis labels. Does not
+#' rotate by default (`FALSE`).
+#' @param ggtheme (`character`) optional, `ggplot2` theme to be used by default. Defaults to `"gray"`.
+#' @param ggplot2_args (`ggplot2_args`) object created by [teal.widgets::ggplot2_args()]
+#' with settings for the module plot.
+#' The argument is merged with options variable `teal.ggplot2_args` and default module setup.
+#'
+#' For more details see the vignette: `vignette("custom-ggplot2-arguments", package = "teal.widgets")`
+#' @param basic_table_args (`basic_table_args`) object created by [teal.widgets::basic_table_args()]
+#' with settings for the module table.
+#' The argument is merged with options variable `teal.basic_table_args` and default module setup.
+#'
+#' For more details see the vignette: `vignette("custom-basic-table-arguments", package = "teal.widgets")`
+#' @param pre_output (`shiny.tag`) optional, text or UI element to be displayed before the module's output,
+#' providing context or a title.
+#' with text placed before the output to put the output into context. For example a title.
+#' @param post_output (`shiny.tag`) optional, text or UI element to be displayed after the module's output,
+#' adding context or further instructions. Elements like `shiny::helpText()` are useful.
+#' @param alpha (`integer(1)` or `integer(3)`) optional, specifies point opacity.
+#' - When the length of `alpha` is one: the plot points will have a fixed opacity.
+#' - When the length of `alpha` is three: the plot points opacity are dynamically adjusted based on
+#' vector of `value`, `min`, and `max`.
+#' @param size (`integer(1)` or `integer(3)`) optional, specifies point size.
+#' - When the length of `size` is one: the plot point sizes will have a fixed size.
+#' - When the length of `size` is three: the plot points size are dynamically adjusted based on
+#' vector of `value`, `min`, and `max`.
+#' @param decorators `r lifecycle::badge("experimental")`
+#' (named `list` of lists of `teal_transform_module`) optional,
+#' decorator for tables or plots included in the module output reported.
+#' The decorators are applied to the respective output objects.
+#'
+#' @param table_datanames (`character`) names of the datasets which should be listed below the plot
+#' when some data points are selected. Objects named after `table_datanames` will be pulled from
+#' `data` so it is important that data actually contains these datasets. Please be aware that
+#' table datasets must be linked with `plot_dataname` by the relevant [join_keys()].
+#' See section "Decorating Module" below for more details.
+#'
+#' @return Object of class `teal_module` to be used in `teal` applications.
+#'
+#' @name shared_params
+#' @keywords internal
+NULL
diff --git a/R/tm_data_table.R b/R/tm_data_table.R
index 603f41c3f..02e2072ee 100644
--- a/R/tm_data_table.R
+++ b/R/tm_data_table.R
@@ -130,11 +130,10 @@ tm_data_table <- function(label = "Data Table",
checkmate::assert_multi_class(post_output, c("shiny.tag", "shiny.tag.list", "html"), null.ok = TRUE)
# End of assertions
-
ans <- module(
label,
- server = srv_page_data_table,
- ui = ui_page_data_table,
+ server = srv_data_table,
+ ui = ui_data_table,
datanames = datanames,
server_args = list(
datanames = if (is.null(datanames)) "all" else datanames,
@@ -154,23 +153,14 @@ tm_data_table <- function(label = "Data Table",
}
# UI page module
-ui_page_data_table <- function(id, pre_output = NULL, post_output = NULL) {
+ui_data_table <- function(id, pre_output = NULL, post_output = NULL) {
ns <- NS(id)
-
- tagList(
+ bslib::page_fluid(
include_css_files("custom"),
teal.widgets::standard_layout(
- output = teal.widgets::white_small_well(
- bslib::page_fluid(
- checkboxInput(
- ns("if_distinct"),
- "Show only distinct rows:",
- value = FALSE
- )
- ),
- bslib::page_fluid(
- uiOutput(ns("dataset_table"))
- )
+ output = bslib::page_fluid(
+ div(checkboxInput(ns("if_distinct"), "Show only distinct rows:", value = FALSE)),
+ uiOutput(ns("data_tables"))
),
pre_output = pre_output,
post_output = post_output
@@ -179,13 +169,19 @@ ui_page_data_table <- function(id, pre_output = NULL, post_output = NULL) {
}
# Server page module
-srv_page_data_table <- function(id,
- data,
- datanames,
- variables_selected,
- dt_args,
- dt_options,
- server_rendering) {
+srv_data_table <- function(id,
+ data,
+ datanames,
+ variables_selected = list(),
+ dt_args = list(),
+ dt_options = list(
+ searching = FALSE,
+ pageLength = 30,
+ lengthMenu = c(5, 15, 30, 100),
+ scrollX = TRUE
+ ),
+ server_rendering = FALSE,
+ filter_panel_api) {
checkmate::assert_class(data, "reactive")
checkmate::assert_class(isolate(data()), "teal_data")
moduleServer(id, function(input, output, session) {
@@ -194,24 +190,27 @@ srv_page_data_table <- function(id,
if_filtered <- reactive(as.logical(input$if_filtered))
if_distinct <- reactive(as.logical(input$if_distinct))
- datanames <- Filter(function(name) {
- is.data.frame(isolate(data())[[name]])
- }, if (identical(datanames, "all")) names(isolate(data())) else datanames)
-
+ datanames_r <- reactive({
+ Filter(
+ function(name) is.data.frame(data()[[name]]),
+ if (identical(datanames, "all")) names(data()) else datanames
+ )
+ })
- output$dataset_table <- renderUI({
+ output$data_tables <- renderUI({
+ req(datanames_r())
do.call(
tabsetPanel,
c(
- list(id = session$ns("dataname_tab")),
+ list(id = session$ns("tabs_selected"), selected = datanames_r()[1]),
lapply(
- datanames,
- function(x) {
- dataset <- isolate(data()[[x]])
+ datanames_r(),
+ function(dataname) {
+ dataset <- isolate(data()[[dataname]])
choices <- names(dataset)
labels <- vapply(
dataset,
- function(x) ifelse(is.null(attr(x, "label")), "", attr(x, "label")),
+ function(column) ifelse(is.null(attr(column, "label")), "", attr(column, "label")),
character(1)
)
names(choices) <- ifelse(
@@ -219,17 +218,17 @@ srv_page_data_table <- function(id,
choices,
paste(choices, labels, sep = ": ")
)
- variables_selected <- if (!is.null(variables_selected[[x]])) {
- variables_selected[[x]]
+ variables_selected <- if (!is.null(variables_selected[[dataname]])) {
+ variables_selected[[dataname]]
} else {
utils::head(choices)
}
tabPanel(
- title = x,
+ title = dataname,
bslib::layout_columns(
col_widths = 12,
- ui_data_table(
- id = session$ns(x),
+ ui_dataset_table(
+ id = session$ns(dataname),
choices = choices,
selected = variables_selected
)
@@ -239,30 +238,39 @@ srv_page_data_table <- function(id,
)
)
)
- })
+ }) |>
+ bindCache(datanames_r()) |>
+ bindEvent(datanames_r())
- lapply(
- datanames,
- function(x) {
- srv_data_table(
- id = x,
- data = data,
- dataname = x,
- if_filtered = if_filtered,
- if_distinct = if_distinct,
- dt_args = dt_args,
- dt_options = dt_options,
- server_rendering = server_rendering
- )
- }
- )
+
+ # server should be run only once
+ modules_run <- reactiveVal()
+ modules_to_run <- reactive(setdiff(datanames_r(), isolate(modules_run())))
+ observeEvent(modules_to_run(), {
+ lapply(
+ modules_to_run(),
+ function(dataname) {
+ srv_dataset_table(
+ id = dataname,
+ data = data,
+ dataname = dataname,
+ if_filtered = if_filtered,
+ if_distinct = if_distinct,
+ dt_args = dt_args,
+ dt_options = dt_options,
+ server_rendering = server_rendering,
+ filter_panel_api = filter_panel_api
+ )
+ }
+ )
+ modules_run(union(modules_run(), modules_to_run()))
+ })
})
}
# UI function for the data_table module
-ui_data_table <- function(id, choices, selected) {
+ui_dataset_table <- function(id, choices, selected) {
ns <- NS(id)
-
if (!is.null(selected)) {
all_choices <- choices
choices <- c(selected, setdiff(choices, selected))
@@ -288,14 +296,15 @@ ui_data_table <- function(id, choices, selected) {
}
# Server function for the data_table module
-srv_data_table <- function(id,
- data,
- dataname,
- if_filtered,
- if_distinct,
- dt_args,
- dt_options,
- server_rendering) {
+srv_dataset_table <- function(id,
+ data,
+ dataname,
+ if_filtered,
+ if_distinct,
+ dt_args,
+ dt_options,
+ server_rendering,
+ filter_panel_api) {
moduleServer(id, function(input, output, session) {
iv <- shinyvalidate::InputValidator$new()
iv$add_rule("variables", shinyvalidate::sv_required("Please select valid variable names"))
@@ -315,6 +324,14 @@ srv_data_table <- function(id,
teal.code::eval_code(
qenv,
substitute(
+ env = list(
+ dataname = as.name(dataname),
+ if_distinct = if_distinct(),
+ vars = input$variables,
+ args = dt_args,
+ dt_options = dt_options,
+ dt_rows = input$dt_rows
+ ),
expr = {
variables <- vars
dataframe_selected <- if (if_distinct) {
@@ -329,15 +346,7 @@ srv_data_table <- function(id,
}
dt_args$data <- dataframe_selected
table <- do.call(DT::datatable, dt_args)
- },
- env = list(
- dataname = as.name(dataname),
- if_distinct = if_distinct(),
- vars = input$variables,
- args = dt_args,
- dt_options = dt_options,
- dt_rows = input$dt_rows
- )
+ }
)
)
})
@@ -346,5 +355,29 @@ srv_data_table <- function(id,
teal::validate_inputs(iv)
req(data_table_data())[["table"]]
})
+
+ observeEvent(input$data_table_rows_selected, ignoreNULL = FALSE, {
+ if (is.null(input$data_table_rows_selected)) {
+ shinyjs::hide("apply_brush_filter")
+ } else {
+ shinyjs::show("apply_brush_filter")
+ }
+ })
+
+ observeEvent(input$apply_brush_filter, {
+ if (is.null(input$data_table_rows_selected)) {
+ return(NULL)
+ }
+ dataset <- data()[[dataname]][input$data_table_rows_selected, ]
+ # todo: when added another time then it is duplicated
+ slice <- teal_slices(teal_slice(
+ dataname = "ADSL",
+ varname = "USUBJID",
+ selected = unique(dataset$USUBJID), # todo: this needs to be parametrised or based on join_keys
+ id = "brush_filter"
+ ))
+ shinyjs::hide("apply_brush_filter")
+ teal.slice::set_filter_state(filter_panel_api, slice)
+ })
})
}
diff --git a/R/tm_g_scatterplot.R b/R/tm_g_scatterplot.R
index 9d1f78974..56e3b32d9 100644
--- a/R/tm_g_scatterplot.R
+++ b/R/tm_g_scatterplot.R
@@ -366,9 +366,7 @@ ui_g_scatterplot <- function(id, ...) {
teal.widgets::standard_layout(
output = teal.widgets::white_small_well(
teal.widgets::plot_with_settings_ui(id = ns("scatter_plot")),
- tags$h1(tags$strong("Selected points:"), class = "text-center font-150p"),
- teal.widgets::get_dt_rows(ns("data_table"), ns("data_table_rows")),
- DT::dataTableOutput(ns("data_table"), width = "100%")
+ teal::ui_brush_filter(ns("brush_filter"))
),
encoding = tags$div(
### Reporter
@@ -1032,36 +1030,20 @@ srv_g_scatterplot <- function(id,
plot_r = plot_r,
height = plot_height,
width = plot_width,
- brushing = TRUE
+ brushing = TRUE,
+ click = TRUE
)
- output$data_table <- DT::renderDataTable({
- plot_brush <- pws$brush()
-
- if (!is.null(plot_brush)) {
- validate(need(!input$add_density, "Brushing feature is currently not supported when plot has marginal density"))
- }
-
- merged_data <- isolate(teal.code::dev_suppress(output_q()[["ANL"]]))
-
- brushed_df <- teal.widgets::clean_brushedPoints(merged_data, plot_brush)
- numeric_cols <- names(brushed_df)[
- vapply(brushed_df, function(x) is.numeric(x) && !is.integer(x), FUN.VALUE = logical(1))
- ]
-
- if (length(numeric_cols) > 0) {
- DT::formatRound(
- DT::datatable(brushed_df,
- rownames = FALSE,
- options = list(scrollX = TRUE, pageLength = input$data_table_rows)
- ),
- numeric_cols,
- table_dec
- )
- } else {
- DT::datatable(brushed_df, rownames = FALSE, options = list(scrollX = TRUE, pageLength = input$data_table_rows))
- }
- })
+ # todo:
+ # validate(need(!input$add_density, "Brushing feature is currently not supported when plot has marginal density"))
+ teal::srv_brush_filter(
+ "brush_filter",
+ brush = pws$brush,
+ dataset = reactive(teal.code::dev_suppress(output_q()[["ANL"]])),
+ filter_panel_api = filter_panel_api,
+ selectors = selector_list,
+ table_dec = table_dec
+ )
# Render R code.
source_code_r <- reactive(teal.code::get_code(req(decorated_output_plot_q())))
diff --git a/R/tm_g_spiderplot.R b/R/tm_g_spiderplot.R
new file mode 100644
index 000000000..8a697446b
--- /dev/null
+++ b/R/tm_g_spiderplot.R
@@ -0,0 +1,407 @@
+#' `teal` module: Spider Plot
+#'
+#' Module visualizes value development in time grouped by subjects.
+#'
+#' @inheritParams teal::module
+#' @inheritParams shared_params
+#' @param plot_dataname (`character(1)` or `choices_selected`) name of the dataset which visualization is builded on.
+#' @param time_var (`character(1)` or `choices_selected`) name of the `numeric` column
+#' in `plot_dataname` to be used as x-axis.
+#' @param value_var (`character(1)` or `choices_selected`) name of the `numeric` column
+#' in `plot_dataname` to be used as y-axis.
+#' @param subject_var (`character(1)` or `choices_selected`) name of the `factor` or `character` column
+#' in `plot_dataname` to be used as grouping variable for displayed lines/points.
+#' @param color_var (`character(1)` or `choices_selected`) name of the `factor` or `character` column in `plot_dataname`
+#' to be used to differentiate colors and symbols.
+#' @param filter_event_var (`character(1)` or `choices_selected`) name of the `factor` or `character` column
+#' in `plot_dataname` to be used to filter the data.
+#' The plot will be updated with just the filtereed data when the user selects an event from the dropdown menu.
+#' @param size_var (`character(1)` or `NULL`) If provided, this numeric column from the `plot_dataname`
+#' will be used to determine the size of the points. If `NULL`, a fixed size based on the `point_size` is used.
+#' @param tooltip_vars (`character` or `NULL`) A vector of column names to be displayed in the tooltip.
+#' If `NULL`, default tooltip is created.
+#' @param point_colors (`named character`) valid color names (see [colors()]) or hex-colors named
+#' by levels of `color_var` column.
+#' @param point_symbols (`named character`) valid plotly symbol name named by levels of `color_var`column.
+#' @param table_datanames (`character`) Names of the datasets to be displayed in the tables below the plot.
+#' @param reactable_args (`list`) Additional arguments passed to the `reactable` function for table customization.
+#'
+#' @examples
+#' data <- teal_data() |>
+#' within({
+#' subjects <- data.frame(
+#' subject_var = c("A", "B", "C"),
+#' AGE = sample(30:100, 3),
+#' ARM = c("Combination", "Combination", "Placebo")
+#' )
+#'
+#' swimlane_ds <- data.frame(
+#' subject_var = sample(c("A", "B", "C"), 10, replace = TRUE),
+#' time_var = sample(1:100, 10, replace = TRUE),
+#' color_var = sample(c("CR", "PR", "SD", "PD"), 10, replace = TRUE)
+#' )
+#'
+#' spiderplot_ds <- data.frame(
+#' subject_var = sample(c("A", "B", "C"), 10, replace = TRUE),
+#' time_var = 1:10,
+#' filter_event_var = "response",
+#' color_var = sample(c("CR", "PR", "SD", "PD"), 10, replace = TRUE),
+#' value_var = sample(-50:100, 10, replace = TRUE)
+#' )
+#'
+#' waterfall_ds <- data.frame(
+#' subject_var = sample(c("A", "B", "C"), 10, replace = TRUE),
+#' value_var = sample(-20:90, 10, replace = TRUE),
+#' color_var = sample(c("CR", "PR", "SD", "PD"), 10, replace = TRUE)
+#' )
+#' })
+#' join_keys(data) <- join_keys(
+#' join_key("subjects", "spiderplot_ds", keys = c(subject_var = "subject_var"))
+#' )
+#'
+#' app <- init(
+#' data = data,
+#' modules = modules(
+#' tm_g_spiderplot(
+#' plot_dataname = "spiderplot_ds",
+#' table_datanames = "subjects",
+#' time_var = "time_var",
+#' value_var = "value_var",
+#' subject_var = "subject_var",
+#' filter_event_var = "filter_event_var",
+#' color_var = "color_var",
+#' point_colors = c(
+#' CR = "#FF0000", PR = "#00FF00", SD = "#0000FF", PD = "#FFFF00"
+#' ),
+#' point_symbols = c(
+#' CR = "circle", PR = "square", SD = "triangle-up", PD = "diamond"
+#' )
+#' )
+#' )
+#' )
+#'
+#' if (interactive()) {
+#' shinyApp(app$ui, app$server)
+#' }
+#'
+#' @export
+tm_g_spiderplot <- function(label = "Spiderplot",
+ plot_dataname,
+ time_var,
+ value_var,
+ subject_var,
+ color_var,
+ filter_event_var,
+ size_var = NULL,
+ tooltip_vars = NULL,
+ point_colors = character(0),
+ point_symbols = character(0),
+ plot_height = c(600, 400, 1200),
+ table_datanames = character(0),
+ reactable_args = list()) {
+ if (is.character(time_var)) {
+ time_var <- choices_selected(choices = time_var, selected = time_var)
+ }
+ if (is.character(value_var)) {
+ value_var <- choices_selected(choices = value_var, selected = value_var)
+ }
+ if (is.character(subject_var)) {
+ subject_var <- choices_selected(choices = subject_var, selected = subject_var)
+ }
+ if (is.character(color_var)) {
+ color_var <- choices_selected(choices = color_var, selected = color_var)
+ }
+ if (is.character(filter_event_var)) {
+ filter_event_var <- choices_selected(choices = filter_event_var, selected = filter_event_var)
+ }
+
+ module(
+ label = label,
+ ui = ui_g_spiderplot,
+ server = srv_g_spiderplot,
+ ui_args = list(height = plot_height),
+ server_args = list(
+ plot_dataname = plot_dataname,
+ time_var = time_var,
+ value_var = value_var,
+ subject_var = subject_var,
+ filter_event_var = filter_event_var,
+ color_var = color_var,
+ size_var = size_var,
+ point_colors = point_colors,
+ point_symbols = point_symbols,
+ table_datanames = table_datanames,
+ reactable_args = reactable_args,
+ tooltip_vars = tooltip_vars
+ ),
+ datanames = union(plot_dataname, table_datanames)
+ )
+}
+
+
+ui_g_spiderplot <- function(id, height) {
+ ns <- NS(id)
+ bslib::page_sidebar(
+ sidebar = div(
+ selectInput(ns("time_var"), label = "Time variable (x-axis):", choices = NULL, selected = NULL, multiple = FALSE),
+ selectInput(
+ ns("value_var"),
+ label = "Value variable (y-axis):",
+ choices = NULL, selected = NULL, multiple = FALSE
+ ),
+ selectInput(ns("subject_var"), label = "Subject variable:", choices = NULL, selected = NULL, multiple = FALSE),
+ selectInput(ns("color_var"), label = "Color by:", choices = NULL, selected = NULL, multiple = FALSE),
+ selectInput(ns("filter_event_var"), label = "Event variable:", choices = NULL, selected = NULL, multiple = FALSE),
+ selectInput(ns("filter_event_var_level"), label = "Select an event:", choices = NULL, selected = NULL, multiple = FALSE),
+ colour_picker_ui(ns("colors")),
+ sliderInput(ns("plot_height"), "Plot Height (px)", height[2], height[3], height[1]),
+ selectInput(ns("subjects"), "Subjects", choices = NULL, selected = NULL, multiple = TRUE),
+ actionButton(ns("subject_tooltips"), "Show Subject Tooltips")
+ ),
+ tags$div(
+ bslib::card(
+ full_screen = TRUE,
+ tags$div(
+ trigger_tooltips_deps(),
+ plotly::plotlyOutput(ns("plot"), height = "100%")
+ )
+ ),
+ ui_t_reactables(ns("subtables"))
+ )
+ )
+}
+
+srv_g_spiderplot <- function(id,
+ data,
+ plot_dataname,
+ time_var,
+ value_var,
+ subject_var,
+ filter_event_var,
+ color_var,
+ point_colors,
+ point_symbols,
+ size_var = NULL,
+ plot_height = 600,
+ table_datanames = character(0),
+ reactable_args = list(),
+ tooltip_vars = NULL,
+ filter_panel_api) {
+ moduleServer(id, function(input, output, session) {
+ .update_cs_input(inputId = "value_var", data = reactive(data()[[dataname]]), cs = value_var)
+ .update_cs_input(inputId = "time_var", data = reactive(data()[[dataname]]), cs = time_var)
+ .update_cs_input(inputId = "subject_var", data = reactive(data()[[dataname]]), cs = subject_var)
+ .update_cs_input(inputId = "color_var", data = reactive(data()[[dataname]]), cs = color_var)
+ .update_cs_input(inputId = "filter_event_var", data = reactive(data()[[dataname]]), cs = filter_event_var)
+
+ filter_event_var_levels <- reactive({
+ req(data(), input$filter_event_var)
+ # comment:
+ # i don't know if it makes sense. I think it will be rare that dataset would have multiple
+ # category variables. There would rather be another dataset (consider responses, interventions etc.)
+ unique(data()[[plot_dataname]][[input$filter_event_var]])
+ })
+ observeEvent(filter_event_var_levels(), {
+ label <- attr(data()[[plot_dataname]][[input$filter_event_var]], "label")
+ updateSelectInput(
+ inputId = "filter_event_var_level",
+ label = sprintf("Select %s:", if (length(label)) label else "en event:"),
+ choices = filter_event_var_levels(),
+ selected = filter_event_var_levels()[1]
+ )
+ if (length(filter_event_var_levels()) < 2) shinyjs::hide("filter_event_var_level")
+ })
+
+ color_inputs <- colour_picker_srv(
+ "colors",
+ x = reactive({
+ req(input$color_var)
+ data()[[plot_dataname]][[input$color_var]]
+ }),
+ default_colors = point_colors
+ )
+
+ plotly_q <- reactive({
+ req(
+ input$filter_event_var_level, input$time_var, input$value_var,
+ input$subject_var, input$filter_event_var, input$color_var, color_inputs()
+ )
+
+ adjusted_symbols <- .shape_palette_discrete(
+ levels = unique(data()[[plot_dataname]][[input$color_var]]),
+ symbol = point_symbols
+ )
+
+ within(
+ data(),
+ dataname = str2lang(plot_dataname),
+ filter_event_var_lang = str2lang(input$filter_event_var),
+ time_var = input$time_var,
+ value_var = input$value_var,
+ subject_var = input$subject_var,
+ filter_event_var = input$filter_event_var,
+ selected_event = input$filter_event_var_level,
+ color_var = input$color_var,
+ colors = color_inputs(),
+ symbols = adjusted_symbols,
+ size_var = size_var,
+ height = input$plot_height,
+ title = sprintf("%s over time", input$filter_event_var_level),
+ tooltip_vars = tooltip_vars,
+ expr = {
+ p <- dataname %>%
+ dplyr::filter(filter_event_var_lang == selected_event) %>%
+ spiderplotly(
+ time_var = time_var,
+ value_var = value_var,
+ subject_var = subject_var,
+ filter_event_var = filter_event_var,
+ color_var = color_var,
+ colors = colors,
+ symbols = symbols,
+ size_var = size_var,
+ height = height,
+ tooltip_vars = tooltip_vars
+ ) %>%
+ plotly::layout(title = title)
+ }
+ )
+ })
+
+ output$plot <- output$plot <- plotly::renderPlotly(plotly::event_register(
+ {
+ plotly_q()$p |>
+ set_plot_data(session$ns("plot_data")) |>
+ setup_trigger_tooltips(session$ns)
+ },
+ "plotly_selected"
+ ))
+
+ observeEvent(data(), {
+ if (class(subject_var) == "choices_selected") {
+ subject_col <- subject_var$selected
+ } else {
+ subject_col <- subject_var
+ }
+ updateSelectInput(
+ inputId = "subjects",
+ choices = data()[[plot_dataname]][[subject_col]]
+ )
+ })
+
+ plotly_data <- reactive({
+ data.frame(
+ x = unlist(input$plot_data$x),
+ y = unlist(input$plot_data$y),
+ customdata = unlist(input$plot_data$customdata),
+ curve = unlist(input$plot_data$curveNumber),
+ index = unlist(input$plot_data$pointNumber)
+ )
+ })
+
+ plotly_selected <- reactive(plotly::event_data("plotly_selected", source = "spiderplot"))
+
+ observeEvent(input$subject_tooltips, {
+ hovervalues <- data()[[plot_dataname]] |>
+ dplyr::mutate(customdata = dplyr::row_number()) |>
+ dplyr::filter(!!rlang::sym(input$subject_var) %in% input$subjects) |>
+ dplyr::pull(customdata)
+
+ hovertips <- plotly_data() |>
+ dplyr::filter(customdata %in% hovervalues)
+
+ session$sendCustomMessage(
+ "triggerTooltips",
+ list(
+ plotID = session$ns("plot"),
+ tooltipPoints = jsonlite::toJSON(hovertips)
+ )
+ )
+ })
+
+ tables_selected_q <- .plotly_selected_filter_children(
+ data = plotly_q,
+ plot_dataname = plot_dataname,
+ xvar = reactive(input$time_var),
+ yvar = reactive(input$value_var),
+ plotly_selected = plotly_selected,
+ children_datanames = table_datanames
+ )
+
+ srv_t_reactables(
+ "subtables",
+ data = tables_selected_q,
+ datanames = table_datanames,
+ reactable_args = reactable_args
+ )
+ })
+}
+
+# todo: export is temporary, this should go to a new package teal.graphs or another bird species
+#' @export
+spiderplotly <- function(
+ data, time_var, value_var, subject_var, filter_event_var,
+ color_var, colors, symbols, height, tooltip_vars = NULL, size_var = NULL, point_size = 10) {
+ subject_var_label <- .get_column_label(data, subject_var)
+ time_var_label <- .get_column_label(data, time_var)
+ value_var_label <- .get_column_label(data, value_var)
+ data <- data |>
+ dplyr::mutate(customdata = dplyr::row_number())
+
+ if (is.null(size_var)) {
+ size <- point_size
+ } else {
+ size <- stats::as.formula(sprintf("~%s", size_var))
+ }
+
+ data %>%
+ dplyr::arrange(!!as.name(subject_var), !!as.name(time_var)) %>%
+ dplyr::group_by(!!as.name(subject_var)) %>%
+ dplyr::mutate(
+ x = dplyr::lag(!!as.name(time_var), default = 0),
+ y = dplyr:::lag(!!as.name(value_var), default = 0),
+ tooltip = {
+ if (is.null(tooltip_vars)) {
+ sprintf(
+ "%s: %s
%s: %s
%s: %s%%
",
+ subject_var_label, !!as.name(subject_var),
+ time_var_label, !!as.name(time_var),
+ value_var_label, !!as.name(value_var) * 100
+ )
+ } else {
+ .generate_tooltip(.data, tooltip_vars)
+ }
+ }
+ ) %>%
+ dplyr::ungroup() %>%
+ plotly::plot_ly(
+ source = "spiderplot",
+ height = height,
+ color = stats::as.formula(sprintf("~%s", color_var)),
+ colors = colors,
+ symbols = symbols
+ ) %>%
+ plotly::add_segments(
+ x = ~x,
+ y = ~y,
+ xend = stats::as.formula(sprintf("~%s", time_var)),
+ yend = stats::as.formula(sprintf("~%s", value_var)),
+ customdata = NULL
+ ) %>%
+ plotly::add_markers(
+ x = stats::as.formula(sprintf("~%s", time_var)),
+ y = stats::as.formula(sprintf("~%s", value_var)),
+ symbol = stats::as.formula(sprintf("~%s", color_var)),
+ size = size,
+ text = ~tooltip,
+ hoverinfo = "text",
+ customdata = ~customdata
+ ) %>%
+ plotly::layout(
+ xaxis = list(title = time_var_label),
+ yaxis = list(title = value_var_label),
+ title = title,
+ dragmode = "select"
+ ) %>%
+ plotly::config(displaylogo = FALSE)
+}
diff --git a/R/tm_g_swimlane.R b/R/tm_g_swimlane.R
new file mode 100644
index 000000000..086e24eb0
--- /dev/null
+++ b/R/tm_g_swimlane.R
@@ -0,0 +1,393 @@
+#' `teal` module: Swimlane plot
+#'
+#' Module visualizes subjects' events in time.
+#'
+#' @inheritParams teal::module
+#' @inheritParams shared_params
+#' @param plot_dataname (`character(1)` or `choices_selected`) name of the dataset which visualization is builded on.
+#' @param time_var (`character(1)` or `choices_selected`) name of the `numeric` column
+#' in `plot_dataname` to be used as x-axis.
+#' @param subject_var (`character(1)` or `choices_selected`) name of the `factor` or `character` column
+#' in `plot_dataname` to be used as y-axis.
+#' @param color_var (`character(1)` or `choices_selected`) name of the `factor` or `character` column
+#' in `plot_dataname` to name and color subject events in time.
+#' @param group_var (`character(1)` or `choices_selected`) name of the `factor` or `character` column in `plot_dataname`
+#' to categorize type of event.
+#' (legend is sorted according to this variable, and used in toolip to display type of the event)
+#' todo: this can be fixed by ordering factor levels
+#' @param sort_var (`character(1)` or `choices_selected`) name(s) of the column in `plot_dataname` which
+#' value determines order of the subjects displayed on the y-axis.
+#' @param tooltip_vars (`character` or `NULL`) A vector of column names to be displayed in the tooltip.
+#' If `NULL`, default tooltip is created.
+#' @param point_size (`numeric(1)` or `named numeric`) Default point size of the points in the plot.
+#' If `point_size` is a named numeric vector, it should be named by levels of `color_var` column.
+#' @param point_colors (`named character`) valid color names (see [colors()]) or hex-colors named
+#' by levels of `color_var` column.
+#' @param point_symbols (`named character`) valid plotly symbol name named by levels of `color_var` column.
+#' @param table_datanames (`character`) Names of the datasets to be displayed in the tables below the plot.
+#' @param reactable_args (`list`) Additional arguments passed to the `reactable` function for table customization.
+#'
+#' @examples
+#' data <- teal_data() |>
+#' within({
+#' subjects <- data.frame(
+#' subject_var = c("A", "B", "C"),
+#' AGE = sample(30:100, 3),
+#' ARM = c("Combination", "Combination", "Placebo")
+#' )
+#'
+#' swimlane_ds <- data.frame(
+#' subject_var = sample(c("A", "B", "C"), 10, replace = TRUE),
+#' time_var = sample(1:100, 10, replace = TRUE),
+#' color_var = sample(c("CR", "PR", "SD", "PD"), 10, replace = TRUE)
+#' )
+#' })
+#' join_keys(data) <- join_keys(
+#' join_key("subjects", "swimlane_ds", keys = c(subject_var = "subject_var"))
+#' )
+#'
+#' app <- init(
+#' data = data,
+#' modules = modules(
+#' tm_g_swimlane(
+#' plot_dataname = "swimlane_ds",
+#' table_datanames = "subjects",
+#' time_var = "time_var",
+#' subject_var = "subject_var",
+#' color_var = "color_var",
+#' group_var = "color_var",
+#' sort_var = "time_var",
+#' plot_height = 400,
+#' point_colors = c(
+#' CR = "#FF0000", PR = "#00FF00", SD = "#0000FF", PD = "#FFFF00"
+#' ),
+#' point_symbols = c(
+#' CR = "circle", PR = "square", SD = "triangle-up", PD = "diamond"
+#' )
+#' )
+#' )
+#' )
+#'
+#' if (interactive()) {
+#' shinyApp(app$ui, app$server)
+#' }
+#'
+#' @export
+tm_g_swimlane <- function(label = "Swimlane",
+ plot_dataname,
+ time_var,
+ subject_var,
+ color_var,
+ group_var,
+ sort_var = NULL,
+ tooltip_vars = NULL,
+ point_size = 10,
+ point_colors = character(0),
+ point_symbols = character(0),
+ plot_height = c(700, 400, 1200),
+ table_datanames = character(0),
+ reactable_args = list()) {
+ checkmate::assert_numeric(plot_height, len = 3, any.missing = FALSE, finite = TRUE)
+ checkmate::assert_numeric(plot_height[1], lower = plot_height[2], upper = plot_height[3], .var.name = "plot_height")
+ if (is.character(time_var)) {
+ time_var <- choices_selected(choices = time_var, selected = time_var)
+ }
+ if (is.character(subject_var)) {
+ subject_var <- choices_selected(choices = subject_var, selected = subject_var)
+ }
+ if (is.character(color_var)) {
+ color_var <- choices_selected(choices = color_var, selected = color_var)
+ }
+ if (is.character(group_var)) {
+ group_var <- choices_selected(choices = group_var, selected = group_var)
+ }
+ if (is.character(sort_var)) {
+ sort_var <- choices_selected(choices = sort_var, selected = sort_var)
+ }
+ module(
+ label = label,
+ ui = ui_g_swimlane,
+ server = srv_g_swimlane,
+ datanames = c(plot_dataname, table_datanames),
+ ui_args = list(height = plot_height),
+ server_args = list(
+ plot_dataname = plot_dataname,
+ time_var = time_var,
+ subject_var = subject_var,
+ color_var = color_var,
+ group_var = group_var,
+ sort_var = sort_var,
+ point_size = point_size,
+ point_colors = point_colors,
+ point_symbols = point_symbols,
+ table_datanames = table_datanames,
+ reactable_args = reactable_args,
+ tooltip_vars = tooltip_vars
+ )
+ )
+}
+
+ui_g_swimlane <- function(id, height) {
+ ns <- NS(id)
+ bslib::page_sidebar(
+ sidebar = div(
+ selectInput(ns("time_var"), label = "Time variable:", choices = NULL, selected = NULL, multiple = FALSE),
+ selectInput(ns("subject_var"), label = "Color by:", choices = NULL, selected = NULL, multiple = FALSE),
+ selectInput(ns("color_var"), label = "Color by:", choices = NULL, selected = NULL, multiple = FALSE),
+ selectInput(ns("group_var"), label = "Group by:", choices = NULL, selected = NULL, multiple = FALSE),
+ selectInput(ns("sort_var"), label = "Sort by:", choices = NULL, selected = NULL, multiple = FALSE),
+ colour_picker_ui(ns("colors")),
+ sliderInput(ns("plot_height"), "Plot Height (px)", height[2], height[3], height[1]),
+ selectInput(ns("subjects"), "Subjects", choices = NULL, selected = NULL, multiple = TRUE),
+ actionButton(ns("subject_tooltips"), "Show Subject Tooltips")
+ ),
+ tags$div(
+ bslib::card(
+ full_screen = TRUE,
+ tags$div(
+ trigger_tooltips_deps(),
+ plotly::plotlyOutput(ns("plot"), height = "100%")
+ )
+ ),
+ ui_t_reactables(ns("subtables"))
+ )
+ )
+}
+srv_g_swimlane <- function(id,
+ data,
+ plot_dataname,
+ time_var,
+ subject_var,
+ color_var,
+ group_var,
+ sort_var = time_var,
+ point_size = 10,
+ point_colors,
+ point_symbols,
+ table_datanames,
+ reactable_args = list(),
+ tooltip_vars = NULL,
+ filter_panel_api) {
+ moduleServer(id, function(input, output, session) {
+ .update_cs_input(inputId = "time_var", data = reactive(data()[[dataname]]), cs = time_var)
+ .update_cs_input(inputId = "subject_var", data = reactive(data()[[dataname]]), cs = subject_var)
+ .update_cs_input(inputId = "color_var", data = reactive(data()[[dataname]]), cs = color_var)
+ .update_cs_input(inputId = "group_var", data = reactive(data()[[dataname]]), cs = group_var)
+ .update_cs_input(inputId = "sort_var", data = reactive(data()[[dataname]]), cs = sort_var)
+
+ color_inputs <- colour_picker_srv(
+ "colors",
+ x = reactive({
+ req(input$color_var)
+ data()[[plot_dataname]][[input$color_var]]
+ }),
+ default_colors = point_colors
+ )
+
+ plotly_q <- reactive({
+ req(data(), input$time_var, input$subject_var, input$color_var, input$group_var, input$sort_var, color_inputs())
+ print(input$subject_var)
+ adjusted_symbols <- .shape_palette_discrete(
+ levels = unique(data()[[plot_dataname]][[input$color_var]]),
+ symbol = point_symbols
+ )
+ within(
+ data(),
+ dataname = str2lang(plot_dataname),
+ time_var = input$time_var,
+ subject_var = input$subject_var,
+ color_var = input$color_var,
+ group_var = input$group_var,
+ sort_var = input$sort_var,
+ point_size = point_size,
+ colors = color_inputs(),
+ symbols = adjusted_symbols,
+ height = input$plot_height,
+ tooltip_vars = tooltip_vars,
+ expr = {
+ p <- swimlanely(
+ data = dataname,
+ time_var = time_var,
+ subject_var = subject_var,
+ color_var = color_var,
+ group_var = group_var,
+ sort_var = sort_var,
+ point_size = point_size,
+ colors = colors,
+ symbols = symbols,
+ height = height,
+ tooltip_vars = tooltip_vars
+ )
+ }
+ )
+ })
+
+ output$plot <- plotly::renderPlotly(plotly::event_register(
+ {
+ plotly_q()$p |>
+ set_plot_data(session$ns("plot_data")) |>
+ setup_trigger_tooltips(session$ns)
+ },
+ "plotly_selected"
+ ))
+
+ plotly_data <- reactive({
+ data.frame(
+ x = unlist(input$plot_data$x),
+ y = unlist(input$plot_data$y),
+ customdata = unlist(input$plot_data$customdata),
+ curve = unlist(input$plot_data$curveNumber),
+ index = unlist(input$plot_data$pointNumber)
+ )
+ })
+
+ plotly_selected <- reactive({
+ plotly::event_data("plotly_deselect", source = "swimlane") # todo: deselect doesn't work
+ plotly::event_data("plotly_selected", source = "swimlane")
+ })
+
+ observeEvent(input$subject_tooltips, {
+ hovervalues <- data()[[plot_dataname]] |>
+ dplyr::mutate(customdata = dplyr::row_number()) |>
+ dplyr::filter(!!rlang::sym(input$subject_var) %in% input$subjects) |>
+ dplyr::pull(customdata)
+
+
+ hovertips <- plotly_data() |>
+ dplyr::filter(customdata %in% hovervalues)
+
+ session$sendCustomMessage(
+ "triggerTooltips",
+ list(
+ plotID = session$ns("plot"),
+ tooltipPoints = jsonlite::toJSON(hovertips)
+ )
+ )
+ })
+
+ tables_selected_q <- .plotly_selected_filter_children(
+ data = plotly_q,
+ plot_dataname = plot_dataname,
+ xvar = reactive(input$time_var),
+ yvar = reactive(input$subject_var),
+ plotly_selected = plotly_selected,
+ children_datanames = table_datanames
+ )
+
+
+ observeEvent(data(), {
+ if (class(subject_var) == "choices_selected") {
+ subject_col <- subject_var$selected
+ } else {
+ subject_col <- subject_var
+ }
+ updateSelectInput(
+ inputId = "subjects",
+ choices = data()[[plot_dataname]][[subject_col]]
+ )
+ })
+
+ srv_t_reactables(
+ "subtables",
+ data = tables_selected_q,
+ datanames = table_datanames,
+ reactable_args = reactable_args
+ )
+ })
+}
+
+
+# todo: export is temporary, this should go to a new package teal.graphs or another bird species
+#' @export
+swimlanely <- function(
+ data, time_var, subject_var, color_var, group_var, sort_var,
+ colors, symbols, height, tooltip_vars = NULL, point_size = 10) {
+ subject_var_label <- .get_column_label(data, subject_var)
+ time_var_label <- .get_column_label(data, time_var)
+ data <- data |>
+ dplyr::mutate(customdata = dplyr::row_number())
+
+ # forcats::fct_reorder doesn't seem to work here
+ subject_levels <- data %>%
+ dplyr::group_by(!!as.name(subject_var)) %>%
+ dplyr::summarize(v = max(!!as.name(sort_var))) %>%
+ dplyr::ungroup() %>%
+ dplyr::arrange(v) %>%
+ dplyr::pull(!!as.name(subject_var))
+ data[[subject_var]] <- factor(data[[subject_var]], levels = subject_levels)
+
+ min_size <- min(point_size, na.rm = TRUE)
+
+ if (length(point_size) > 1) {
+ data <- data %>%
+ dplyr::mutate(
+ size_var = ifelse(
+ as.character(color_var) %in% names(point_size),
+ point_size[as.character(color_var)],
+ min_size
+ )
+ )
+ }
+
+ data %>%
+ dplyr::mutate(
+ !!as.name(color_var) := factor(!!as.name(color_var), levels = names(colors)),
+ ) %>%
+ dplyr::group_by(!!as.name(subject_var), !!as.name(time_var)) %>%
+ dplyr::mutate(
+ tooltip = {
+ if (is.null(tooltip_vars)) {
+ paste(
+ unique(
+ c(
+ paste(subject_var_label, !!as.name(subject_var)),
+ paste(time_var_label, !!as.name(time_var)),
+ sprintf(
+ "%s: %s",
+ tools::toTitleCase(gsub("[^0-9A-Za-z]+", " ", !!as.name(group_var))),
+ !!as.name(color_var)
+ )
+ )
+ ),
+ collapse = "
"
+ )
+ } else {
+ .generate_tooltip(.data, tooltip_vars)
+ }
+ }
+ ) %>%
+ plotly::plot_ly(
+ source = "swimlane",
+ colors = colors,
+ symbols = symbols,
+ height = height,
+ customdata = ~customdata
+ ) %>%
+ plotly::add_markers(
+ x = stats::as.formula(sprintf("~%s", time_var)),
+ y = stats::as.formula(sprintf("~%s", subject_var)),
+ color = stats::as.formula(sprintf("~%s", color_var)),
+ symbol = stats::as.formula(sprintf("~%s", color_var)),
+ size = ~size_var,
+ text = ~tooltip,
+ hoverinfo = "text"
+ ) %>%
+ plotly::add_segments(
+ x = ~0,
+ xend = ~study_day,
+ y = stats::as.formula(sprintf("~%s", subject_var)),
+ yend = stats::as.formula(sprintf("~%s", subject_var)),
+ data = data |>
+ dplyr::group_by(!!as.name(subject_var), !!as.name(group_var)) |>
+ dplyr::summarise(study_day = max(!!as.name(time_var))),
+ line = list(width = 2, color = "grey"),
+ showlegend = FALSE,
+ customdata = NULL
+ ) %>%
+ plotly::layout(
+ xaxis = list(title = time_var_label),
+ yaxis = list(title = subject_var_label)
+ ) %>%
+ plotly::layout(dragmode = "select") %>%
+ plotly::config(displaylogo = FALSE)
+}
diff --git a/R/tm_g_waterfall.R b/R/tm_g_waterfall.R
new file mode 100644
index 000000000..da71cb2e9
--- /dev/null
+++ b/R/tm_g_waterfall.R
@@ -0,0 +1,292 @@
+#' `teal` module: Waterfall plot
+#'
+#' Module visualizes subjects sorted decreasingly by y-values.
+#'
+#' @inheritParams teal::module
+#' @inheritParams shared_params
+#' @param plot_dataname (`character(1)`) name of the dataset which visualization is builded on.
+#' @param subject_var (`character(1)` or `choices_selected`) name of the `factor` or `character` column
+#' in `plot_dataname` to be used as x-axis.
+#' @param value_var (`character(1)` or `choices_selected`) name of the `numeric` column
+#' in `plot_dataname` to be used as y-axis.
+#' @param color_var (`character(1)` or `choices_selected`) name of the `factor` or `character` column in `plot_dataname`
+#' to be used to differentiate bar colors.
+#' @param tooltip_vars (`character` or `NULL`) A vector of column names to be displayed in the tooltip.
+#' If `NULL`, default tooltip is created.
+#' @param bar_colors (`named character`) valid color names (see [colors()]) or hex-colors named
+#' by levels of `color_var` column.
+#' @param value_arbitrary_hlines (`numeric`) values in the same scale as `value_var` to horizontal
+#' lines on the plot.
+#' @param plot_title (`character`) Title of the plot.
+#' @param table_datanames (`character`) Names of the datasets to be displayed in the tables below the plot.
+#' @param reactable_args (`list`) Additional arguments passed to the `reactable` function for table customization.
+#'
+#' @examples
+#' data <- teal_data() |>
+#' within({
+#' subjects <- data.frame(
+#' subject_var = c("A", "B", "C"),
+#' AGE = sample(30:100, 3),
+#' ARM = c("Combination", "Combination", "Placebo")
+#' )
+#'
+#' waterfall_ds <- data.frame(
+#' subject_var = sample(c("A", "B", "C"), 10, replace = TRUE),
+#' value_var = sample(-20:90, 10, replace = TRUE),
+#' color_var = sample(c("CR", "PR", "SD", "PD"), 10, replace = TRUE)
+#' )
+#' })
+#' join_keys(data) <- join_keys(
+#' join_key("subjects", "waterfall_ds", keys = c(subject_var = "subject_var"))
+#' )
+#'
+#' app <- init(
+#' data = data,
+#' modules = modules(
+#' tm_g_waterfall(
+#' plot_dataname = "waterfall_ds",
+#' table_datanames = "subjects",
+#' subject_var = "subject_var",
+#' value_var = "value_var",
+#' sort_var = "value_var",
+#' color_var = "color_var",
+#' value_arbitrary_hlines = c(20, -30),
+#' bar_colors = c(
+#' CR = "#FF0000", PR = "#00FF00", SD = "#0000FF", PD = "#FFFF00"
+#' )
+#' )
+#' )
+#' )
+#'
+#' if (interactive()) {
+#' shinyApp(app$ui, app$server)
+#' }
+#'
+#' @export
+tm_g_waterfall <- function(label = "Waterfall",
+ plot_dataname,
+ subject_var,
+ value_var,
+ sort_var = NULL,
+ color_var = NULL,
+ tooltip_vars = NULL,
+ bar_colors = character(0),
+ value_arbitrary_hlines = c(0.2, -0.3),
+ plot_title = "Waterfall plot",
+ plot_height = c(600, 400, 1200),
+ table_datanames = character(0),
+ reactable_args = list()) {
+ if (is.character(subject_var)) {
+ subject_var <- choices_selected(choices = subject_var, selected = subject_var)
+ }
+ if (is.character(value_var)) {
+ value_var <- choices_selected(choices = value_var, selected = value_var)
+ }
+ if (is.character(sort_var)) {
+ sort_var <- choices_selected(choices = sort_var, selected = sort_var)
+ }
+ if (is.character(color_var)) {
+ color_var <- choices_selected(choices = color_var, selected = color_var)
+ }
+
+ module(
+ label = label,
+ ui = ui_g_waterfall,
+ server = srv_g_waterfall,
+ datanames = union(plot_dataname, table_datanames),
+ ui_args = list(height = plot_height),
+ server_args = list(
+ plot_dataname = plot_dataname,
+ table_datanames = table_datanames,
+ subject_var = subject_var,
+ value_var = value_var,
+ sort_var = sort_var,
+ color_var = color_var,
+ bar_colors = bar_colors,
+ value_arbitrary_hlines = value_arbitrary_hlines,
+ plot_title = plot_title,
+ reactable_args = reactable_args,
+ tooltip_vars = tooltip_vars
+ )
+ )
+}
+
+ui_g_waterfall <- function(id, height) {
+ ns <- NS(id)
+
+ bslib::page_sidebar(
+ sidebar = div(
+ selectInput(
+ ns("subject_var"),
+ label = "Subject variable (x-axis):",
+ choices = NULL, selected = NULL, multiple = FALSE
+ ),
+ selectInput(
+ ns("value_var"),
+ label = "Value variable (y-axis):",
+ choices = NULL, selected = NULL, multiple = FALSE
+ ),
+ selectInput(ns("sort_var"), label = "Sort by:", choices = NULL, selected = NULL, multiple = FALSE),
+ selectInput(ns("color_var"), label = "Color by:", choices = NULL, selected = NULL, multiple = FALSE),
+ colour_picker_ui(ns("colors")),
+ sliderInput(ns("plot_height"), "Plot Height (px)", height[2], height[3], height[1])
+ ),
+ tags$div(
+ bslib::card(
+ full_screen = TRUE,
+ tags$div(
+ plotly::plotlyOutput(ns("plot"), height = "100%")
+ )
+ ),
+ ui_t_reactables(ns("subtables"))
+ )
+ )
+}
+srv_g_waterfall <- function(id,
+ data,
+ plot_dataname,
+ subject_var,
+ value_var,
+ sort_var,
+ color_var,
+ bar_colors,
+ value_arbitrary_hlines,
+ plot_title,
+ plot_height = c(600, 400, 1200),
+ table_datanames = character(0),
+ reactable_args = list(),
+ tooltip_vars = NULL,
+ filter_panel_api) {
+ moduleServer(id, function(input, output, session) {
+ .update_cs_input(inputId = "subject_var", data = reactive(data()[[dataname]]), cs = subject_var)
+ .update_cs_input(inputId = "value_var", data = reactive(data()[[dataname]]), cs = value_var)
+ .update_cs_input(inputId = "sort_var", data = reactive(data()[[dataname]]), cs = sort_var)
+ .update_cs_input(inputId = "color_var", data = reactive(data()[[dataname]]), cs = color_var)
+
+ color_inputs <- colour_picker_srv(
+ "colors",
+ x = reactive({
+ req(data(), input$color_var)
+ data()[[plot_dataname]][[input$color_var]]
+ }),
+ default_colors = bar_colors
+ )
+
+ plotly_q <- reactive({
+ req(data(), input$subject_var, input$value_var, input$sort_var, input$color_var, color_inputs())
+
+ within(
+ data(),
+ dataname = str2lang(plot_dataname),
+ subject_var = input$subject_var,
+ value_var = input$value_var,
+ sort_var = input$sort_var,
+ color_var = input$color_var,
+ colors = color_inputs(),
+ value_arbitrary_hlines = value_arbitrary_hlines,
+ height = input$plot_height,
+ title = sprintf("Waterfall plot"),
+ tooltip_vars = tooltip_vars,
+ expr = {
+ p <- waterfally(
+ dataname,
+ subject_var = subject_var,
+ value_var = value_var,
+ sort_var = sort_var,
+ color_var = color_var,
+ colors = colors,
+ value_arbitrary_hlines = value_arbitrary_hlines,
+ height = height,
+ tooltip_vars = tooltip_vars
+ ) %>%
+ plotly::layout(title = title)
+ },
+ height = input$plot_height
+ )
+ })
+
+ output$plot <- plotly::renderPlotly(plotly::event_register(plotly_q()$p, "plotly_selected"))
+
+ plotly_selected <- reactive(plotly::event_data("plotly_selected", source = "waterfall"))
+
+ tables_selected_q <- .plotly_selected_filter_children(
+ data = plotly_q,
+ plot_dataname = plot_dataname,
+ xvar = reactive(input$subject_var),
+ yvar = reactive(input$value_var),
+ plotly_selected = plotly_selected,
+ children_datanames = table_datanames
+ )
+
+ srv_t_reactables(
+ "subtables",
+ data = tables_selected_q,
+ datanames = table_datanames,
+ reactable_args = reactable_args
+ )
+ })
+}
+
+
+# todo: export is temporary, this should go to a new package teal.graphs or another bird species
+#' @export
+waterfally <- function(
+ data, subject_var, value_var, sort_var, color_var, colors,
+ value_arbitrary_hlines, height, tooltip_vars = NULL) {
+ subject_var_label <- .get_column_label(data, subject_var)
+ value_var_label <- .get_column_label(data, value_var)
+ color_var_label <- .get_column_label(data, color_var)
+
+ dplyr::mutate(
+ if (identical(sort_var, value_var) || is.null(sort_var)) {
+ dplyr::arrange(data, desc(!!as.name(value_var)))
+ } else {
+ dplyr::arrange(data, !!as.name(sort_var), desc(!!as.name(value_var)))
+ },
+ !!as.name(subject_var) := factor(!!as.name(subject_var), levels = unique(!!as.name(subject_var))),
+ tooltip = {
+ if (is.null(tooltip_vars)) {
+ sprintf(
+ "%s: %s
%s: %s%%
%s: %s",
+ subject_var_label, !!as.name(subject_var),
+ value_var_label, !!as.name(value_var),
+ color_var_label, !!as.name(color_var)
+ )
+ } else {
+ .generate_tooltip(.data, tooltip_vars)
+ }
+ }
+ ) %>%
+ dplyr::filter(!duplicated(!!as.name(subject_var))) %>%
+ plotly::plot_ly(
+ source = "waterfall",
+ height = height
+ ) %>%
+ plotly::add_bars(
+ x = stats::as.formula(sprintf("~%s", subject_var)),
+ y = stats::as.formula(sprintf("~%s", value_var)),
+ color = stats::as.formula(sprintf("~%s", color_var)),
+ colors = colors,
+ text = ~tooltip,
+ hoverinfo = "text"
+ ) %>%
+ plotly::layout(
+ shapes = lapply(value_arbitrary_hlines, function(y) {
+ list(
+ type = "line",
+ x0 = 0,
+ x1 = 1,
+ xref = "paper",
+ y0 = y,
+ y1 = y,
+ line = list(color = "black", dash = "dot")
+ )
+ }),
+ xaxis = list(title = subject_var_label, tickangle = -45),
+ yaxis = list(title = value_var_label),
+ legend = list(title = list(text = "Color by:")),
+ barmode = "relative"
+ ) %>%
+ plotly::layout(dragmode = "select") %>%
+ plotly::config(displaylogo = FALSE)
+}
diff --git a/R/tm_markdown.R b/R/tm_markdown.R
new file mode 100644
index 000000000..0e2561c7f
--- /dev/null
+++ b/R/tm_markdown.R
@@ -0,0 +1,84 @@
+#' `teal` module: Rmarkdown page
+#'
+#' Render arbitrary Rmarkdown code. `data` provided to teal application are available in the
+#' rendered document.
+#'
+#' @inheritParams teal::module
+#' @inheritParams shared_params
+#' @inheritParams rmarkdown::render
+#' @param text (`character`) arbitrary Rmd code
+#'
+#' @inherit shared_params return
+#'
+#' @examplesShinylive
+#' library(teal.modules.general)
+#' interactive <- function() TRUE
+#' {{ next_example }}
+#' @examples
+#' data <- teal_data() |>
+#' within({
+#' iris <- iris
+#' mtcars <- mtcars
+#' })
+#' #
+#'
+#' @export
+#'
+tm_rmarkdown <- function(label = "App Info",
+ text = character(0),
+ params = list(title = "Document"),
+ datanames = "all") {
+ message("Initializing tm_rmarkdown")
+
+ # Start of assertions
+ checkmate::assert_string(label)
+ checkmate::assert_character(text, min.len = 0, any.missing = FALSE)
+ checkmate::assert_list(params)
+
+
+ ans <- module(
+ label = label,
+ server = srv_rmarkdown,
+ ui = ui_rmarkdown,
+ server_args = list(text = text, params = params),
+ datanames = datanames
+ )
+ attr(ans, "teal_bookmarkable") <- TRUE
+ ans
+}
+
+# UI function for the front page module
+ui_rmarkdown <- function(id, ...) {
+ args <- list(...)
+ ns <- NS(id)
+ uiOutput(ns("output"))
+}
+
+# Server function for the front page module
+srv_rmarkdown <- function(id, data, text, params) {
+ checkmate::assert_class(data, "reactive")
+ checkmate::assert_class(isolate(data()), "teal_data")
+ moduleServer(id, function(input, output, session) {
+ rmd_out <- reactive({
+ file <- tempfile(fileext = ".Rmd")
+ if (!file.exists(file)) {
+ cat(text, file = file)
+ }
+ rmarkdown::render(
+ file,
+ envir = data(),
+ params = utils::modifyList(
+ params,
+ list(output = list(github_document = list(html_preview = FALSE))) # html_document always as we renderUI below
+ )
+ )
+ })
+
+ output$output <- renderUI({
+ on.exit(unlink(rmd_out()))
+ # todo: includeMarkdown breaks css of the app
+ # https://stackoverflow.com/questions/42422771/including-markdown-tables-in-shiny-app-seems-to-break-css
+ shiny::includeMarkdown(rmd_out())
+ })
+ })
+}
diff --git a/R/tm_t_reactable.R b/R/tm_t_reactable.R
new file mode 100644
index 000000000..01a39fefa
--- /dev/null
+++ b/R/tm_t_reactable.R
@@ -0,0 +1,309 @@
+#' `teal` module: Reactable
+#'
+#' Wrapper module on [reactable::reactable()]
+#'
+#' @inheritParams teal::module
+#' @inheritParams shared_params
+#' @param reactable_args (`list`) any argument of [reactable::reactable()].
+#' @export
+tm_t_reactables <- function(label = "Table",
+ datanames = "all",
+ colnames = list(),
+ transformators = list(),
+ decorators = list(),
+ reactable_args = list()) {
+ module(
+ label = label,
+ ui = ui_t_reactables,
+ server = srv_t_reactables,
+ ui_args = list(decorators = decorators),
+ server_args = list(
+ datanames = datanames,
+ colnames = colnames,
+ reactable_args = reactable_args,
+ decorators = decorators
+ ),
+ datanames = datanames,
+ transformators = transformators
+ )
+}
+
+ui_t_reactables <- function(id, decorators = list()) {
+ ns <- NS(id)
+ uiOutput(ns("subtables"), container = div)
+}
+
+srv_t_reactables <- function(
+ id, data, filter_panel_api, datanames,
+ colnames = list(), decorators = list(), reactable_args = list()) {
+ moduleServer(id, function(input, output, session) {
+ datanames_r <- .validate_datanames(datanames = datanames, data = data)
+ colnames_r <- reactive({
+ req(datanames_r())
+ sapply(datanames_r(), function(dataname) {
+ if (length(colnames[[dataname]])) {
+ colnames()[[dataname]]
+ } else {
+ colnames(isolate(data())[[dataname]])
+ }
+ })
+ })
+
+ datalabels_r <- reactive({
+ req(datanames_r())
+ sapply(datanames_r(), function(dataname) {
+ datalabel <- attr(isolate(data())[[dataname]], "label")
+ if (length(datalabel)) datalabel else dataname
+ })
+ })
+
+ output$subtables <- renderUI({
+ logger::log_debug("srv_t_reactables@1 render subtables")
+ if (length(datanames_r()) == 0) {
+ return(NULL)
+ }
+ div(
+ include_css_files("reactable.css"),
+ do.call(
+ bslib::accordion,
+ c(
+ list(id = session$ns("reactables"), class = "teal-modules-general reactable-accordion"),
+ lapply(
+ datanames_r(),
+ function(dataname) {
+ bslib::accordion_panel(
+ title = datalabels_r()[dataname],
+ ui_t_reactable(session$ns(dataname))
+ )
+ }
+ )
+ )
+ )
+ )
+ })
+
+ called_datanames <- reactiveVal()
+ observeEvent(datanames_r(), {
+ lapply(
+ setdiff(datanames_r(), called_datanames()), # call module only once per dataname
+ function(dataname) {
+ srv_t_reactable(
+ dataname,
+ data = data,
+ dataname = dataname,
+ filter_panel_api = filter_panel_api,
+ colnames = colnames[[dataname]],
+ reactable_args = reactable_args
+ )
+ }
+ )
+ called_datanames(union(called_datanames(), datanames_r()))
+ })
+ })
+}
+
+ui_t_reactable <- function(id) {
+ ns <- NS(id)
+
+ input <- shinyWidgets::pickerInput(
+ ns("colnames"),
+ label = NULL,
+ choices = NULL,
+ selected = NULL,
+ multiple = TRUE,
+ width = "100%",
+ options = shinyWidgets::pickerOptions(
+ actionsBox = TRUE,
+ `show-subtext` = TRUE,
+ countSelectedText = TRUE,
+ liveSearch = TRUE,
+ container = "body"
+ )
+ )
+
+ # input <- actionButton(ns("show_select_colnames"), "Nothing selected", class = "rounded-pill btn-sm primary") |>
+ # bslib::popover(input)
+ bslib::page_fluid(
+ input,
+ bslib::card(
+ class = "teal-modules-general reactable-card",
+ full_screen = TRUE,
+ reactable::reactableOutput(ns("table"))
+ )
+ )
+}
+
+srv_t_reactable <- function(id, data, filter_panel_api, dataname, colnames, decorators, reactable_args = list()) {
+ moduleServer(id, function(input, output, session) {
+ logger::log_debug("srv_t_reactable initializing for dataname: { dataname }")
+ dataname_reactable <- sprintf("%s_reactable", dataname)
+
+ dataset_labels <- reactive({
+ req(data())
+ teal.data::col_labels(data()[[dataname]], fill = TRUE)
+ })
+
+ reactable_args_r <- if (is.reactive(reactable_args)) reactable_args else reactive(reactable_args)
+
+ cols_choices <- reactiveVal()
+ cols_selected <- reactiveVal()
+ observeEvent(dataset_labels(), {
+ req(dataset_labels())
+ choices <- if (length(colnames)) {
+ colnames
+ } else {
+ names(dataset_labels())
+ }
+ labels_choices <- dataset_labels()[choices]
+ cols_choices_new <- stats::setNames(choices, labels_choices)
+ if (!identical(cols_choices_new, cols_choices())) {
+ logger::log_debug("srv_t_reactable@1 update column choices")
+ shinyWidgets::updatePickerInput(
+ inputId = "colnames",
+ choices = cols_choices_new,
+ selected = cols_choices_new
+ )
+ cols_choices(cols_choices_new)
+ cols_selected(cols_choices_new)
+ }
+ })
+ observeEvent(input$colnames_open, `if`(!isTruthy(input$colnames_open), cols_selected(input$colnames)))
+ observeEvent(cols_selected(), {
+ updateActionButton(
+ inputId = "show_select_colnames",
+ label = paste(substring(toString(cols_selected()), 1, 100), "...")
+ )
+ })
+
+ table_q <- reactive({
+ req(cols_selected())
+ select_call <- as.call(
+ c(
+ list(name = str2lang("dplyr::select"), .data = str2lang(dataname)),
+ lapply(unname(cols_selected()), str2lang)
+ )
+ )
+
+ reactable_call <- .make_reactable_call(
+ dataset = data()[[dataname]][cols_selected()],
+ dataname = dataname,
+ args = reactable_args_r()
+ )
+
+ data() |>
+ within(lhs <- rhs, lhs = str2lang(dataname), rhs = select_call) |>
+ within(lhs <- rhs, lhs = str2lang(dataname_reactable), rhs = reactable_call)
+ })
+ output$table <- reactable::renderReactable({
+ logger::log_debug("srv_t_reactable@2 render table for dataset { dataname }")
+ table_q()[[dataname_reactable]]
+ })
+
+ # todo: add select -> show children table
+ table_selected_q <- reactive({
+ selected_row <- reactable::getReactableState("table", "selected")
+ if (!is.null(selected_row)) {
+ within(
+ table_q(),
+ selected_row = selected_row,
+ dataname_selected = str2lang(sprintf("%s_selected", dataname)),
+ dataname = str2lang(dataname),
+ expr = {
+ dataname_selected <- dataname[selected_row, ]
+ }
+ )
+ } else {
+ table_q()
+ }
+ })
+
+ table_selected_q
+ })
+}
+
+.make_reactable_call <- function(dataset, dataname, args) {
+ columns <- .make_reactable_columns_call(dataset = dataset, col_defs = args$columns)
+ call_args <- utils::modifyList(
+ list(columns = columns, onClick = "select", selection = "multiple"),
+ args[!names(args) %in% "columns"]
+ )
+ as.call(
+ c(
+ list(
+ name = quote(reactable),
+ data = str2lang(dataname)
+ ),
+ call_args
+ )
+ )
+}
+
+#' Makes `reactable::colDef` call containing:
+#' name =
+#' cell =
+#' Arguments of [reactable::colDef()] are specified only if necessary
+#' @param dataset (`data.frame`)
+#' @return named list of `colDef` calls
+#' @keywords internal
+.make_reactable_columns_call <- function(dataset, col_defs) {
+ checkmate::assert_data_frame(dataset)
+ args <- lapply(
+ colnames(dataset),
+ function(i) {
+ column <- dataset[[i]]
+ label <- attr(column, "label")
+ is_labelled <- length(label) == 1 && !is.na(label) && !identical(label, "")
+ default_col_def <- if (is_labelled) list(name = label) else list()
+ col_def_override <- if (!is.null(col_defs[[i]])) col_defs[[i]] else list()
+ col_def_args <- utils::modifyList(default_col_def, col_def_override)
+ if (length(col_def_args)) {
+ as.call(
+ c(
+ list(quote(colDef)),
+ col_def_args
+ )
+ )
+ }
+ }
+ )
+ names(args) <- names(dataset)
+ Filter(length, args)
+}
+
+.name_to_id <- function(name) {
+ gsub("[[:space:][:punct:]]+", "_", x = tolower(name))
+}
+
+.validate_datanames <- function(datanames, data, class = "data.frame") {
+ all_datanames_r <- reactive({
+ req(data())
+ names(
+ Filter(
+ function(dataset) inherits(dataset, class),
+ as.list(data())
+ )
+ )
+ })
+
+ this_datanames_r <- reactive({
+ if (is.reactive(datanames)) {
+ datanames()
+ } else {
+ datanames
+ }
+ })
+
+ datanames_r <- reactiveVal()
+
+ observeEvent(all_datanames_r(), {
+ new_datanames <- if (identical(this_datanames_r(), "all")) {
+ all_datanames_r()
+ } else {
+ intersect(this_datanames_r(), all_datanames_r())
+ }
+ if (!identical(new_datanames, datanames_r())) {
+ datanames_r(new_datanames)
+ }
+ })
+ datanames_r
+}
diff --git a/R/tm_variable_browser.R b/R/tm_variable_browser.R
index c6819fadb..a48148dfa 100644
--- a/R/tm_variable_browser.R
+++ b/R/tm_variable_browser.R
@@ -956,7 +956,7 @@ render_tab_table <- function(dataset_name, parent_dataname, output, data, input,
join_keys <- teal.data::join_keys(data())
if (!is.null(join_keys)) {
- icons[intersect(join_keys[dataset_name, dataset_name], colnames(df))] <- "primary_key"
+ icons[intersect(teal.data::join_keys[dataset_name, dataset_name], colnames(df))] <- "primary_key"
}
icons <- variable_type_icons(icons)
diff --git a/R/utils.R b/R/utils.R
index 5eb3609fd..9f6db2efa 100644
--- a/R/utils.R
+++ b/R/utils.R
@@ -1,51 +1,3 @@
-#' Shared parameters documentation
-#'
-#' Defines common arguments shared across multiple functions in the package
-#' to avoid repetition by using `inheritParams`.
-#'
-#' @param plot_height (`numeric`) optional, specifies the plot height as a three-element vector of
-#' `value`, `min`, and `max` intended for use with a slider UI element.
-#' @param plot_width (`numeric`) optional, specifies the plot width as a three-element vector of
-#' `value`, `min`, and `max` for a slider encoding the plot width.
-#' @param rotate_xaxis_labels (`logical`) optional, whether to rotate plot X axis labels. Does not
-#' rotate by default (`FALSE`).
-#' @param ggtheme (`character`) optional, `ggplot2` theme to be used by default. Defaults to `"gray"`.
-#' @param ggplot2_args (`ggplot2_args`) object created by [teal.widgets::ggplot2_args()]
-#' with settings for the module plot.
-#' The argument is merged with options variable `teal.ggplot2_args` and default module setup.
-#'
-#' For more details see the vignette: `vignette("custom-ggplot2-arguments", package = "teal.widgets")`
-#' @param basic_table_args (`basic_table_args`) object created by [teal.widgets::basic_table_args()]
-#' with settings for the module table.
-#' The argument is merged with options variable `teal.basic_table_args` and default module setup.
-#'
-#' For more details see the vignette: `vignette("custom-basic-table-arguments", package = "teal.widgets")`
-#' @param pre_output (`shiny.tag`) optional, text or UI element to be displayed before the module's output,
-#' providing context or a title.
-#' with text placed before the output to put the output into context. For example a title.
-#' @param post_output (`shiny.tag`) optional, text or UI element to be displayed after the module's output,
-#' adding context or further instructions. Elements like `shiny::helpText()` are useful.
-#' @param alpha (`integer(1)` or `integer(3)`) optional, specifies point opacity.
-#' - When the length of `alpha` is one: the plot points will have a fixed opacity.
-#' - When the length of `alpha` is three: the plot points opacity are dynamically adjusted based on
-#' vector of `value`, `min`, and `max`.
-#' @param size (`integer(1)` or `integer(3)`) optional, specifies point size.
-#' - When the length of `size` is one: the plot point sizes will have a fixed size.
-#' - When the length of `size` is three: the plot points size are dynamically adjusted based on
-#' vector of `value`, `min`, and `max`.
-#' @param decorators `r lifecycle::badge("experimental")`
-#' (named `list` of lists of `teal_transform_module`) optional,
-#' decorator for tables or plots included in the module output reported.
-#' The decorators are applied to the respective output objects.
-#'
-#' See section "Decorating Module" below for more details.
-#'
-#' @return Object of class `teal_module` to be used in `teal` applications.
-#'
-#' @name shared_params
-#' @keywords internal
-NULL
-
#' Add labels for facets to a `ggplot2` object
#'
#' Enhances a `ggplot2` plot by adding labels that describe
@@ -397,3 +349,214 @@ select_decorators <- function(decorators, scope) {
list()
}
}
+
+# todo: to teal_data
+children <- function(x, dataset_name = character(0)) {
+ checkmate::assert_multi_class(x, c("teal_data", "join_keys"))
+ checkmate::assert_character(dataset_name, max.len = 1)
+ if (length(dataset_name)) {
+ names(
+ Filter(
+ function(parent) parent == dataset_name,
+ teal.data::parents(x)
+ )
+ )
+ } else {
+ all_parents <- unique(unlist(teal.data::parents(x)))
+ names(all_parents) <- all_parents
+ lapply(
+ all_parents,
+ function(parent) children(x = x, dataset_name = parent)
+ )
+ }
+}
+
+.name_to_id <- function(name) {
+ gsub("[[:space:][:punct:]]+", "_", x = tolower(name))
+}
+
+#' Filter children on `plotly_selected`
+#'
+#' @description
+#' Filters children datanames according to:
+#' - selected x and y values on the plot (based on the parent dataset)
+#' - [`teal.data::join_keys`] relationship between `children_datanames`
+#'
+#' @param data (`reactive teal_data`)
+#' @param plot_dataname (`character(1)`)
+#' @param xvar (`character(1)`)
+#' @param yvar (`character(1)`)
+#' @param plotly_selected (`reactive`)
+#' @param children_datanames (`character`)
+.plotly_selected_filter_children <- function(
+ data, plot_dataname, xvar, yvar, plotly_selected, children_datanames) {
+ xvar_r <- if (is.reactive(xvar)) xvar else reactive(xvar)
+ yvar_r <- if (is.reactive(yvar)) yvar else reactive(yvar)
+
+ plotly_selected_q <- reactive({
+ req(plotly_selected(), xvar_r(), yvar_r())
+ primary_keys <- unname(teal.data::join_keys(data())[plot_dataname, plot_dataname])
+ if (length(primary_keys) == 0) {
+ primary_keys <- unique(sapply(children_datanames, USE.NAMES = FALSE, FUN = function(childname) {
+ names(teal.data::join_keys(data())[plot_dataname, childname])
+ }))
+ }
+ req(primary_keys)
+ within(
+ data(),
+ expr = {
+ swimlane_selected <- dplyr::filter(dataname, xvar %in% xvals, yvar %in% yvals) %>%
+ dplyr::select(primary_keys)
+ },
+ dataname = str2lang(plot_dataname),
+ xvar = str2lang(xvar_r()),
+ yvar = str2lang(yvar_r()),
+ xvals = plotly_selected()$x,
+ yvals = plotly_selected()$y,
+ primary_keys = primary_keys
+ )
+ })
+
+ children_names <- reactive({
+ if (length(children_datanames) == 0) {
+ children(plotly_selected_q(), plot_dataname)
+ } else {
+ children_datanames
+ }
+ })
+
+ eventReactive(plotly_selected_q(), {
+ exprs <- as.expression(
+ lapply(
+ children_names(),
+ function(childname) {
+ join_cols <- teal.data::join_keys(plotly_selected_q())[childname, plot_dataname]
+ substitute(
+ expr = {
+ childname <- dplyr::right_join(childname, swimlane_selected, by = by)
+ },
+ list(
+ childname = str2lang(childname),
+ by = join_cols
+ )
+ )
+ }
+ )
+ )
+ q <- teal.code::eval_code(plotly_selected_q(), exprs)
+ })
+}
+
+
+.update_cs_input <- function(inputId, data, cs) {
+ if (!missing(data) && !length(names(cs))) {
+ labels <- teal.data::col_labels(isolate(data()))[cs$choices]
+ names(cs$choices) <- labels
+ }
+ updateSelectInput(inputId = inputId, choices = cs$choices, selected = cs$selected)
+ if (length(cs$choices) < 2) shinyjs::hide(inputId)
+}
+
+.get_column_label <- function(data, column) {
+ column_label <- attr(data[[column]], "label")
+ if (!length(column_label)) column_label <- column
+ column_label
+}
+
+
+.generate_tooltip <- function(data, tooltip_cols) {
+ tooltip_lines <- sapply(tooltip_cols, function(col) {
+ label <- .get_column_label(data, col)
+ value <- data[[col]]
+ paste0(label, ": ", value)
+ })
+ if (is.vector(tooltip_lines)) {
+ paste(tooltip_lines, collapse = "
")
+ } else {
+ apply(tooltip_lines, 1, function(row) paste(row, collapse = "
"))
+ }
+}
+
+
+#' @keywords internal
+#' @noRd
+trigger_tooltips_deps <- function() {
+ htmltools::htmlDependency(
+ name = "teal-modules-general-trigger-tooltips",
+ version = utils::packageVersion("teal.modules.general"),
+ package = "teal.modules.general",
+ src = "triggerTooltips",
+ script = "triggerTooltips.js",
+ stylesheet = "triggerTooltips.css"
+ )
+}
+
+
+#' @keywords internal
+#' @noRd
+setup_trigger_tooltips <- function(plot, ns) {
+ htmlwidgets::onRender(
+ plot,
+ paste0(
+ "function(el) {
+ const targetDiv = document.querySelector('#", ns("plot"), " .modebar-group:nth-child(4)');
+ console.log(el.data);
+ if (targetDiv) {
+ const button = document.createElement('button');
+ button.setAttribute('data-count', '0');
+ button.className = 'teal-modules-general trigger-tooltips-button';
+
+ button.onclick = function () {
+ triggerSelectedTooltips('", ns("plot"), "')
+ };
+
+ const icon = document.createElement('i');
+ icon.className = 'fas fa-message';
+
+ const tooltip = document.createElement('span');
+ tooltip.className = 'plotly-icon-tooltip';
+ tooltip.textContent = 'Hover selection';
+
+ button.appendChild(icon);
+ button.appendChild(tooltip);
+ targetDiv.appendChild(button);
+ }
+ }"
+ )
+ )
+}
+
+#' @keywords internal
+#' @noRd
+set_plot_data <- function(plot, data_id) {
+ htmlwidgets::onRender(
+ plot,
+ paste0(
+ "
+ function(el) {
+ slicedData = el.data.slice(0, -1).map(({ x, y, customdata, mode }) => ({ x, y, customdata, mode }));
+ plotData = {
+ x: [],
+ y: [],
+ customdata: [],
+ curveNumber: [],
+ pointNumber: []
+ };
+
+ slicedData.forEach((item, curveNumber) => {
+ if (item.mode === 'markers') {
+ for (let i = 0; i < item.x.length; i++) {
+ plotData.pointNumber.push(i);
+ plotData.x.push(item.x[i]);
+ plotData.y.push(item.y[i]);
+ plotData.customdata.push(item.customdata[i]);
+ plotData.curveNumber.push(curveNumber);
+ }
+ }
+ });
+ Shiny.setInputValue('", data_id, "', plotData);
+ }
+ "
+ )
+ )
+}
diff --git a/R/zzz.R b/R/zzz.R
index 2ccb87747..fcc99baf1 100644
--- a/R/zzz.R
+++ b/R/zzz.R
@@ -7,4 +7,5 @@
ggplot_themes <- c("gray", "bw", "linedraw", "light", "dark", "minimal", "classic", "void")
#' @importFrom lifecycle deprecated
+#' @importFrom rlang :=
interactive <- NULL
diff --git a/inst/css/reactable.css b/inst/css/reactable.css
new file mode 100644
index 000000000..1b0c523aa
--- /dev/null
+++ b/inst/css/reactable.css
@@ -0,0 +1,7 @@
+.teal-modules-general.reactable-accordion .accordion-body {
+ padding: 0;
+}
+
+.teal-modules-general.reactable-card {
+ margin-bottom: 0;
+}
diff --git a/inst/poc_adam.r b/inst/poc_adam.r
new file mode 100644
index 000000000..c0ca7ae3b
--- /dev/null
+++ b/inst/poc_adam.r
@@ -0,0 +1,69 @@
+pkgload::load_all("teal")
+pkgload::load_all("teal.widgets")
+pkgload::load_all("teal.modules.general")
+
+# Example data
+data <- within(teal_data(), {
+ library(dplyr)
+ library(tidyr)
+ ADSL <- teal.data::rADSL |> mutate(
+ EOTSTT2 = case_when(
+ !is.na(DCSREAS) ~ DCSREAS,
+ TRUE ~ EOTSTT
+ )
+ )
+
+ ADAE <- teal.data::rADAE
+ ADRS <- teal.data::rADRS
+})
+
+join_keys(data) <- default_cdisc_join_keys
+
+app <- init(
+ data = data,
+ modules = modules(
+ tm_data_table(),
+ tm_p_swimlane(
+ label = "Swimlane",
+ geom_specs = list(
+ list(
+ geom = quote(geom_col),
+ data = quote(ADSL),
+ mapping = list(y = quote(USUBJID), x = quote(EOSDY)),
+ width = 0.2
+ ), # geom_col(data = synthetic_data, mapping = aes(x = subjid, x = max(study_day), width = 0.2)
+ list(
+ geom = quote(geom_point),
+ data = quote(ADSL),
+ mapping = list(
+ y = quote(USUBJID), x = quote(EOSDY), color = quote(EOTSTT2), shape = quote(EOTSTT2)
+ )
+ ),
+ list(
+ geom = quote(geom_point),
+ data = quote(ADRS),
+ mapping = list(
+ y = quote(USUBJID), x = quote(ADY), color = quote(PARAMCD), shape = quote(PARAMCD)
+ )
+ ),
+ list(
+ geom = quote(geom_point),
+ data = quote(ADAE),
+ mapping = list(
+ y = quote(USUBJID), x = quote(ASTDY), color = quote(AETERM), shape = quote(AETERM)
+ )
+ ),
+ list(
+ geom = quote(geom_point),
+ data = quote(ADAE),
+ mapping = list(
+ y = quote(USUBJID), x = quote(AENDY), color = quote(AEOUT), shape = quote(AEOUT)
+ )
+ )
+ ),
+ title = "Swimlane Efficacy Plot"
+ )
+ )
+)
+
+shinyApp(app$ui, app$server)
diff --git a/inst/poc_adam_plotly.r b/inst/poc_adam_plotly.r
new file mode 100644
index 000000000..673595d01
--- /dev/null
+++ b/inst/poc_adam_plotly.r
@@ -0,0 +1,43 @@
+library(plotly)
+pkgload::load_all("teal.modules.general")
+
+# Example data
+data <- within(teal_data(), {
+ library(dplyr)
+ library(tidyr)
+ ADSL <- teal.data::rADSL |> mutate(
+ EOTSTT2 = case_when(
+ !is.na(DCSREAS) ~ DCSREAS,
+ TRUE ~ EOTSTT
+ ),
+ TRTLEN = as.integer(TRTEDTM - TRTSDTM)
+ )
+
+ ADAE <- teal.data::rADAE
+ ADRS <- teal.data::rADRS
+})
+
+join_keys(data) <- default_cdisc_join_keys
+
+
+plotly_specs <- list(
+ list("plotly::add_bars", x = ~TRTLEN, y = ~USUBJID, color = ~ARM, data = quote(ADSL)),
+ list("plotly::add_markers", x = ~ADY, y = ~USUBJID, color = ~AVALC, symbol = ~AVALC, data = quote(ADRS))
+)
+
+app <- init(
+ data = data,
+ modules = modules(
+ tm_data_table(),
+ tm_p_plotly(
+ label = "Swimlane",
+ plotly_specs = plotly_specs,
+ title = "Swimlane Efficacy Plot"
+ )
+ ),
+ filter = teal_slices(
+ teal_slice("ADSL", "AGE", selected = c(20, 25))
+ )
+)
+
+shinyApp(app$ui, app$server)
diff --git a/inst/poc_crf.R b/inst/poc_crf.R
new file mode 100644
index 000000000..616e496b9
--- /dev/null
+++ b/inst/poc_crf.R
@@ -0,0 +1,533 @@
+library(teal)
+library(DT)
+library(labelled)
+library(reactable)
+pkgload::load_all("teal.modules.general")
+
+# Note: Please add the `PATH_TO_DATA` and change the X, Y, and Z Administrations to the actual values in the data
+
+data <- within(teal_data(), {
+ library(dplyr)
+ library(arrow)
+ library(forcats)
+ data_path <- "PATH_TO_DATA"
+
+ swimlane_ds <- read_parquet(file.path(data_path, "swimlane_ds.parquet")) |>
+ filter(!is.na(event_result), !is.na(event_study_day)) |>
+ mutate(subject = forcats::fct_reorder(as.factor(subject), event_study_day, .fun = max))
+
+ spiderplot_ds <- read_parquet(file.path(data_path, "spiderplot_ds.parquet")) |>
+ mutate(subject = as.character(subject))
+
+ parent_ds <- bind_rows(
+ swimlane_ds |> select(subject, cohrt, txarm),
+ spiderplot_ds |> select(subject, cohrt, txarm)
+ ) |>
+ distinct()
+})
+
+join_keys(data) <- join_keys(
+ join_key("parent_ds", "swimlane_ds", c("subject", "cohrt", "txarm")),
+ join_key("parent_ds", "spiderplot_ds", c("subject", "cohrt", "txarm"))
+)
+
+swim_plotly_specs <- list(
+ list("plotly::add_markers", x = ~study_day, y = ~subject, color = ~catagory, symbol = ~catagory, data = quote(study_drug_administration)),
+ list("plotly::add_markers", x = ~study_day, y = ~subject, color = ~catagory, symbol = ~catagory, data = quote(response_assessment)),
+ list("plotly::add_markers", x = ~study_day, y = ~subject, color = ~catagory, symbol = ~catagory, data = quote(disposition)),
+ list("plotly::add_segments", x = ~0, xend = ~study_day, y = ~subject, yend = ~subject, data = quote(max_subject_day), line = list(width = 1, color = "grey"), showlegend = FALSE),
+ list("plotly::layout", xaxis = list(title = "Study Day"), yaxis = list(title = "Subject"))
+)
+
+swimlane_tm <- teal_transform_module(
+ server = function(id, data) {
+ reactive({
+ data() |>
+ within({
+ swimlane_ds <- swimlane_ds |>
+ mutate(subject = forcats::fct_reorder(as.factor(subject), event_study_day, .fun = max))
+ disposition <- swimlane_ds |>
+ filter(!is.na(event_study_day)) |>
+ filter(event_type == "disposition") |>
+ transmute(subject, event_type, catagory = event_result, study_day = event_study_day)
+
+ response_assessment <- swimlane_ds |>
+ filter(!is.na(event_study_day)) |>
+ filter(event_type == "response_assessment") |>
+ transmute(subject, event_type, catagory = event_result, study_day = event_study_day)
+
+ study_drug_administration <- swimlane_ds |>
+ filter(!is.na(event_study_day)) |>
+ filter(event_type == "study_drug_administration") |>
+ transmute(subject, event_type, catagory = event_result, study_day = event_study_day)
+
+ max_subject_day <- swimlane_ds |>
+ group_by(subject) |>
+ summarise(study_day = max(event_study_day)) |>
+ bind_rows(tibble(subject = unique(swimlane_ds$subject), study_day = 0))
+ })
+ })
+ }
+)
+
+swimlane_ui_mod <- function(id) {
+ ns <- NS(id)
+ shinyjs::hidden(
+ fluidRow(
+ id = ns("reactive_tables"),
+ column(
+ 6,
+ class = "simple-card",
+ tagList(
+ h4("Multiple Myeloma Response"),
+ reactableOutput(ns("mm_response"))
+ )
+ ),
+ column(
+ 6,
+ class = "simple-card",
+ tagList(
+ h4("Study Tx Listing"),
+ reactableOutput(ns("tx_listing"))
+ )
+ )
+ )
+ )
+}
+
+swimlane_srv_mod <- function(id,
+ data,
+ plotly_selected,
+ filter_panel_api) {
+ checkmate::assert_class(data, "reactive")
+ checkmate::assert_class(isolate(data()), "teal_data")
+ moduleServer(id, function(input, output, session) {
+ observeEvent(plotly_selected(), once = TRUE, {
+ shinyjs::show("reactive_tables")
+ })
+
+ output$mm_response <- renderReactable({
+ swimlane_ds <- data()[["swimlane_ds"]]
+ col_defs <- list(
+ subject = colDef(name = "Subject"),
+ visit_name = colDef(name = "Visit Name"),
+ visit_date = colDef(name = "Visit Date"),
+ form_name = colDef(name = "Form Name"),
+ source_system_url_link = colDef(
+ name = "Source System URL Link",
+ cell = function(value) {
+ if (!is.na(value) && !is.null(value) && value != "") {
+ htmltools::tags$a(href = value, target = "_blank", "Link")
+ } else {
+ "N/A"
+ }
+ }
+ ),
+ rspdn = colDef(name = "Assessment Performed"),
+ rspd = colDef(name = "Response Date"),
+ rspd_study_day = colDef(name = "Response Date Study Day"),
+ orsp = colDef(name = "Response"),
+ bma = colDef(name = "Best Marrow Aspirate"),
+ bmb = colDef(name = "Best Marrow Biopsy"),
+ comnts = colDef(name = "Comments")
+ )
+ mm_response <- swimlane_ds |>
+ filter(event_study_day %in% plotly_selected()$x, subject %in% plotly_selected()$y) |>
+ select(all_of(names(col_defs)))
+ reactable(
+ mm_response,
+ columns = col_defs,
+ defaultPageSize = 5,
+ searchable = TRUE,
+ sortable = TRUE
+ )
+ })
+
+ output$tx_listing <- renderReactable({
+ swimlane_ds <- data()[["swimlane_ds"]]
+
+ col_defs <- list(
+ site_name = colDef(name = "Site Name"),
+ subject = colDef(name = "Subject"),
+ visit_name = colDef(name = "Visit Name"),
+ visit_date = colDef(name = "Visit Date"),
+ form_name = colDef(name = "Form Name"),
+ source_system_url_link = colDef(
+ name = "Source System URL Link",
+ cell = function(value) {
+ if (!is.na(value) && !is.null(value) && value != "") {
+ htmltools::tags$a(href = value, target = "_blank", "Link")
+ } else {
+ "N/A"
+ }
+ }
+ ),
+ txnam = colDef(name = "Study Drug Name"),
+ txrec = colDef(name = "Study Drug Administered"),
+ txrecrs = colDef(name = "Reason Study Drug Not Admin"),
+ txd_study_day = colDef(name = "Date Administered Study Day"),
+ date_administered = colDef(name = "Date Administered"),
+ cydly = colDef(name = "Cycle Delay"),
+ cydlyrs = colDef(name = "Cycle Delay Reason"),
+ cydlyae = colDef(name = "Cycle Delay Adverse Event"),
+ txdly = colDef(name = "Dose Delay"),
+ txdlyrs = colDef(name = "Dose Delay Reason"),
+ txdlyae = colDef(name = "AE related to Dose Delay"),
+ txpdos = colDef(name = "Planned Dose per Admin"),
+ txpdosu = colDef(name = "Planned Dose per Admin Unit"),
+ frqdv = colDef(name = "Frequency"),
+ txrte = colDef(name = "Route of Administration"),
+ txform = colDef(name = "Dose Formulation"),
+ txdmod = colDef(name = "Dose Modification"),
+ txrmod = colDef(name = "Dose Modification Reason"),
+ txdmae = colDef(name = "AE related to Dose Modification"),
+ txad = colDef(name = "Total Dose Administered"),
+ txadu = colDef(name = "Total Dose Administered Unit"),
+ txd = colDef(name = "Date Administered"),
+ txstm = colDef(name = "Start Time Administered"),
+ txstmu = colDef(name = "Start Time Administered Unknown"),
+ txed = colDef(name = "End Date Administered"),
+ txetm = colDef(name = "End Time Administered"),
+ txetmu = colDef(name = "End Time Administered Unknown"),
+ txtm = colDef(name = "Time Administered"),
+ txtmu = colDef(name = "Time Administered Unknown"),
+ txed_study_day = colDef(name = "End Study Day"),
+ infrt = colDef(name = "Infusion Rate"),
+ infrtu = colDef(name = "Infusion Rate Unit"),
+ tximod = colDef(name = "Infusion Modified?"),
+ txirmod = colDef(name = "Reason for Infusion modification"),
+ tximae = colDef(name = "AE related to Infusion Modification")
+ )
+ tx_listing <- swimlane_ds |>
+ filter(event_study_day %in% plotly_selected()$x, subject %in% plotly_selected()$y) |>
+ select(all_of(names(col_defs)))
+ reactable(
+ tx_listing,
+ columns = col_defs,
+ defaultPageSize = 5,
+ searchable = TRUE,
+ sortable = TRUE
+ )
+ })
+ })
+}
+
+spider_plotly_specs <- list(
+ list("plotly::add_markers", x = ~event_study_day, y = ~event_result_num, color = ~subject, data = quote(spiderplot_ds_filtered)),
+ list("plotly::add_lines", x = ~event_study_day, y = ~event_result_num, data = quote(spiderplot_ds_filtered), color = ~subject, showlegend = FALSE),
+ list(
+ "plotly::layout",
+ xaxis = list(title = "Collection Date Study Day", zeroline = FALSE),
+ yaxis = list(title = ~y_title),
+ title = ~ paste0(y_title, " Over Time")
+ )
+)
+
+
+spider_ui_mod <- function(id) {
+ ns <- NS(id)
+ shinyjs::hidden(
+ fluidRow(
+ id = ns("reactive_tables"),
+ fluidRow(
+ column(
+ 6,
+ class = "simple-card",
+ tagList(
+ h4("Most Recent Resp and Best Resp"),
+ reactableOutput(ns("recent_resp"))
+ )
+ ),
+ column(
+ 6,
+ class = "simple-card",
+ tagList(
+ h4("Multiple Myeloma Response"),
+ reactableOutput(ns("all_resp"))
+ )
+ )
+ ),
+ fluidRow(
+ column(
+ 6,
+ class = "simple-card",
+ tagList(
+ h4("Disease Assessment - SPEP"),
+ reactableOutput(ns("spep_listing"))
+ )
+ ),
+ column(
+ 6,
+ class = "simple-card",
+ tagList(
+ h4("Disease Assessment - SFLC"),
+ reactableOutput(ns("sflc_listing"))
+ )
+ )
+ )
+ )
+ )
+}
+
+spider_srv_mod <- function(id,
+ data,
+ plotly_selected,
+ filter_panel_api) {
+ checkmate::assert_class(data, "reactive")
+ checkmate::assert_class(isolate(data()), "teal_data")
+ moduleServer(id, function(input, output, session) {
+ all_resp_cols <- list(
+ txarm = colDef(name = "Study Arm"),
+ cohrt = colDef(name = "Study Cohort"),
+ subject = colDef(name = "Subject"),
+ event_result = colDef(name = "Response"),
+ event_study_day = colDef(name = "Study Day"),
+ visit_name = colDef(name = "Visit Name")
+ )
+
+ selected_recent_subject <- reactiveVal(NULL)
+
+ observeEvent(plotly_selected(), once = TRUE, {
+ shinyjs::show("reactive_tables")
+ })
+
+ all_resp <- reactive({
+ selected_subjects <- data()[["spiderplot_ds"]] |>
+ filter(event_study_day %in% plotly_selected()$x, event_result %in% plotly_selected()$y) |>
+ pull(subject)
+ data()[["spiderplot_ds"]] |>
+ filter(event_type == "response_assessment") |>
+ select(all_of(names(all_resp_cols))) |>
+ filter(subject %in% selected_subjects)
+ })
+
+ output$all_resp <- renderReactable({
+ reactable(
+ all_resp(),
+ columns = all_resp_cols
+ )
+ })
+
+ recent_resp_cols <- list(
+ subject = colDef(name = "Subject"),
+ visit_name = colDef(name = "Visit Name"),
+ rspdn = colDef(name = "Assessment Performed"),
+ rspd = colDef(name = "Response Date"),
+ rspd_study_day = colDef(name = "Response Date Study Day"),
+ orsp = colDef(name = "Response"),
+ bma = colDef(name = "Best Marrow Aspirate"),
+ bmb = colDef(name = "Best Marrow Biopsy"),
+ comnts = colDef(name = "Comments")
+ )
+
+ recent_resp <- reactive({
+ data()[["spiderplot_ds"]] |>
+ filter(event_type == "latest_response_assessment") |>
+ filter(subject %in% all_resp()$subject) |>
+ select(all_of(names(recent_resp_cols)))
+ })
+
+ output$recent_resp <- renderReactable({
+ reactable(
+ recent_resp(),
+ columns = recent_resp_cols,
+ selection = "single",
+ onClick = "select"
+ )
+ })
+
+ spep_cols <- list(
+ subject = colDef(name = "Subject"),
+ visit_name = colDef(name = "Visit Name"),
+ visit_date = colDef(name = "Visit Date"),
+ form_name = colDef(name = "Form Name"),
+ source_system_url_link = colDef(
+ name = "Source System URL Link",
+ cell = function(value) {
+ if (!is.na(value) && !is.null(value) && value != "") {
+ htmltools::tags$a(href = value, target = "_blank", "Link")
+ } else {
+ "N/A"
+ }
+ }
+ ),
+ rspdn = colDef(name = "Assessment Performed"),
+ rspd = colDef(name = "Response Date"),
+ rspd_study_day = colDef(name = "Response Date Study Day"),
+ orsp = colDef(name = "Response"),
+ bma = colDef(name = "Best Marrow Aspirate"),
+ bmb = colDef(name = "Best Marrow Biopsy"),
+ comnts = colDef(name = "Comments"),
+ asmntdn = colDef(name = "Assessment Not Done"),
+ blq = colDef(name = "Serum M-protein too small to quantify"),
+ coldr = colDef(name = "Collection Date"),
+ cold_study_day = colDef(name = "Collection Study Day"),
+ coltm = colDef(name = "Collection Time"),
+ coltmu = colDef(name = "Collection Time Unknown"),
+ lrspep1 = colDef(name = "Another Form added?"),
+ mprte_raw = colDef(name = "Serum M-protein"),
+ mprtec = colDef(name = "SPEP Serum M-protein detection")
+ )
+
+ spep <- reactive({
+ data()[["spiderplot_ds"]] |>
+ filter(event_type == "Serum M-protein") |>
+ filter(subject %in% all_resp()$subject) |>
+ select(all_of(names(spep_cols)))
+ })
+
+ output$spep_listing <- renderReactable({
+ reactable(
+ spep(),
+ columns = spep_cols
+ )
+ })
+
+
+ sflc_cols <- list(
+ subject = colDef(name = "Subject"),
+ visit_name = colDef(name = "Visit Name"),
+ visit_date = colDef(name = "Visit Date"),
+ form_name = colDef(name = "Form Name"),
+ source_system_url_link = colDef(
+ name = "Source System URL Link",
+ cell = function(value) {
+ if (!is.na(value) && !is.null(value) && value != "") {
+ htmltools::tags$a(href = value, target = "_blank", "Link")
+ } else {
+ "N/A"
+ }
+ }
+ ),
+ rspdn = colDef(name = "Assessment Performed"),
+ rspd = colDef(name = "Response Date"),
+ rspd_study_day = colDef(name = "Response Date Study Day"),
+ orsp = colDef(name = "Response"),
+ bma = colDef(name = "Best Marrow Aspirate"),
+ bmb = colDef(name = "Best Marrow Biopsy"),
+ comnts = colDef(name = "Comments"),
+ asmntdn = colDef(name = "Assessment Not Done"),
+ blq = colDef(name = "Serum M-protein too small to quantify"),
+ coldr = colDef(name = "Collection Date"),
+ cold_study_day = colDef(name = "Collection Study Day"),
+ coltm = colDef(name = "Collection Time"),
+ coltmu = colDef(name = "Collection Time Unknown"),
+ lchfrc = colDef(name = "Presence of Serum free light chains"),
+ lchfr_raw = colDef(name = "Serum free light chain results"),
+ klchf_raw = colDef(name = "Kappa free light chain results"),
+ llchf_raw = colDef(name = "Lambda free light chain results"),
+ klchp_raw = colDef(name = "Kappa-Lambda free light chain ratio"),
+ mprte_raw = colDef(name = "Serum M-protein"),
+ mprtec = colDef(name = "SPEP Serum M-protein detection")
+ )
+
+ sflc <- reactive({
+ data()[["spiderplot_ds"]] |>
+ filter(
+ event_type %in% c(
+ "Kappa free light chain quantity",
+ "Lambda free light chain quantity",
+ "Kappa-Lambda free light chain ratio"
+ )
+ ) |>
+ filter(subject %in% all_resp()$subject) |>
+ select(all_of(names(sflc_cols)))
+ })
+
+ output$sflc_listing <- renderReactable({
+ reactable(
+ sflc(),
+ columns = sflc_cols
+ )
+ })
+
+ observeEvent(input$recent_resp_selected, {
+ print(input$recent_resp_selected)
+ req(input$recent_resp_selected)
+ selected_subjects <- reactableProxy("recent_resp") %>%
+ getReactableState("selected")
+ print(selected_subjects)
+ })
+ })
+}
+
+app <- init(
+ data = data,
+ header = tags$head(tags$style(
+ ".simple-card {
+ padding: 20px;
+ border-radius: 10px;
+ border: 1px solid #ddd;
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
+ background-color: #fff;
+ }
+ .simple-card h4 {
+ text-align: center;
+ }"
+ )),
+ modules = modules(
+ tm_p_swimlane2(
+ label = "Spiderplot",
+ plotly_specs = spider_plotly_specs,
+ title = "Swimlane Plot",
+ transformators = list(spiderplot_tm),
+ ui_mod = spider_ui_mod,
+ srv_mod = spider_srv_mod,
+ plot_height = 600
+ ),
+ tm_p_swimlane2(
+ label = "Swimlane",
+ plotly_specs = swim_plotly_specs,
+ title = "Swim Lane - Duration of Tx",
+ colors = c(
+ "DEATH" = "black",
+ "WITHDRAWAL BY SUBJECT" = "grey",
+ "PD (Progressive Disease)" = "red",
+ "SD (Stable Disease)" = "darkorchid4",
+ "MR (Minimal/Minor Response)" = "sienna4",
+ "PR (Partial Response)" = "maroon",
+ "VGPR (Very Good Partial Response)" = "chartreuse4",
+ "CR (Complete Response)" = "#3a41fc",
+ "SCR (Stringent Complete Response)" = "midnightblue",
+ "X Administration Injection" = "goldenrod",
+ "Y Administration Infusion" = "deepskyblue3",
+ "Z Administration Infusion" = "darkorchid"
+ ),
+ symbols = c(
+ "DEATH" = "circle",
+ "WITHDRAWAL BY SUBJECT" = "square",
+ "PD (Progressive Disease)" = "circle",
+ "SD (Stable Disease)" = "square-open",
+ "MR (Minimal/Minor Response)" = "star-open",
+ "PR (Partial Response)" = "star-open",
+ "VGPR (Very Good Partial Response)" = "star-open",
+ "CR (Complete Response)" = "star-open",
+ "SCR (Stringent Complete Response)" = "star-open",
+ "X Administration Injection" = "line-ns-open",
+ "Y Administration Infusion" = "line-ns-open",
+ "Z Administration Infusion" = "line-ns-open"
+ ),
+ transformators = list(swimlane_tm),
+ ui_mod = swimlane_ui_mod,
+ srv_mod = swimlane_srv_mod
+ ),
+ tm_data_table()
+ ),
+ filter = teal_slices(
+ teal_slice(
+ dataname = "parent_ds",
+ varname = "subject"
+ ),
+ teal_slice(
+ dataname = "parent_ds",
+ varname = "cohrt"
+ ),
+ teal_slice(
+ dataname = "parent_ds",
+ varname = "txarm"
+ ),
+ count_type = "all"
+ )
+)
+
+shinyApp(app$ui, app$server)
diff --git a/inst/poc_crf2.R b/inst/poc_crf2.R
new file mode 100644
index 000000000..6d52992f4
--- /dev/null
+++ b/inst/poc_crf2.R
@@ -0,0 +1,765 @@
+library(teal)
+library(DT)
+library(labelled)
+library(reactable)
+pkgload::load_all("~/nest/teal.modules.general")
+# Note: Please add the `PATH_TO_DATA` and change the X, Y, and Z Administrations to the actual values in the data
+
+with_tooltips <- function(...) {
+ args <- list(...)
+ lapply(args, function(col) {
+ col$header <- tags$span(col$name, title = col$name)
+ return(col)
+ })
+}
+
+data <- within(teal_data(), {
+ library(dplyr)
+ library(arrow)
+ library(forcats)
+ data_path <- "PATH/TO/DATA"
+
+ swimlane_ds <- read_parquet(file.path(data_path, "swimlane_ds.parquet")) |>
+ filter(!is.na(event_result), !is.na(event_study_day)) |>
+ mutate(subject = forcats::fct_reorder(as.factor(subject), event_study_day, .fun = max))
+
+ spiderplot_ds <- read_parquet(file.path(data_path, "spiderplot_ds.parquet")) |>
+ mutate(subject = as.character(subject))
+
+ parent_ds <- bind_rows(
+ swimlane_ds |> select(subject, cohrt, txarm),
+ spiderplot_ds |> select(subject, cohrt, txarm)
+ ) |>
+ distinct()
+})
+
+join_keys(data) <- join_keys(
+ join_key("parent_ds", "swimlane_ds", c("subject", "cohrt", "txarm")),
+ join_key("parent_ds", "spiderplot_ds", c("subject", "cohrt", "txarm"))
+)
+
+tm_swimlane <- function(label = "Swimlane", plot_height = 700) {
+ ui <- function(id, height) {
+ ns <- NS(id)
+ tagList(
+ fluidRow(
+ class = "simple-card",
+ h4("Swim Lane - Duration of Tx"),
+ sliderInput(ns("plot_height"), "Plot Height (px)", 400, 1200, height, width = "100%"),
+ plotly::plotlyOutput(ns("plot"), height = "100%")
+ ),
+ fluidRow(
+ column(
+ 6,
+ class = "simple-card",
+ tagList(
+ h4("Multiple Myeloma Response"),
+ reactableOutput(ns("mm_response"))
+ )
+ ),
+ column(
+ 6,
+ class = "simple-card",
+ tagList(
+ h4("Study Tx Listing"),
+ reactableOutput(ns("tx_listing"))
+ )
+ )
+ )
+ )
+ }
+ server <- function(id, data, filter_panel_api, plot_height = 600) {
+ moduleServer(id, function(input, output, session) {
+ plotly_q <- reactive({
+ data() |>
+ within(
+ {
+ swimlane_ds <- swimlane_ds |>
+ mutate(subject = forcats::fct_reorder(as.factor(subject), event_study_day, .fun = max)) |>
+ mutate(
+ subject = forcats::fct_reorder(as.factor(subject), event_study_day, .fun = max),
+ tooltip = case_when(
+ event_type == "study_drug_administration" ~ paste(
+ "Subject:", subject,
+ "
Study Day:", event_study_day,
+ "
Administration:", event_result
+ ),
+ event_type == "response_assessment" ~ paste(
+ "Subject:", subject,
+ "
Study Day:", event_study_day,
+ "
Response Assessment:", event_result
+ ),
+ event_type == "disposition" ~ paste(
+ "Subject:", subject,
+ "
Study Day:", event_study_day,
+ "
Disposition:", event_result
+ ),
+ TRUE ~ NA_character_
+ )
+ )
+
+ swimlane_ds <- swimlane_ds |>
+ group_by(subject, event_study_day) |>
+ mutate(
+ tooltip = paste(unique(tooltip), collapse = "
")
+ ) |>
+ ungroup() |>
+ mutate(tooltip = stringr::str_remove_all(tooltip, "
Subject: [0-9]+
Study Day: [0-9]+"))
+
+ disposition <- swimlane_ds |>
+ filter(!is.na(event_study_day)) |>
+ filter(event_type == "disposition") |>
+ transmute(subject, event_type, catagory = event_result, study_day = event_study_day, tooltip)
+
+ response_assessment <- swimlane_ds |>
+ filter(!is.na(event_study_day)) |>
+ filter(event_type == "response_assessment") |>
+ transmute(subject, event_type, catagory = event_result, study_day = event_study_day, tooltip)
+
+ study_drug_administration <- swimlane_ds |>
+ filter(!is.na(event_study_day)) |>
+ filter(event_type == "study_drug_administration") |>
+ transmute(subject, event_type, catagory = event_result, study_day = event_study_day, tooltip)
+
+ max_subject_day <- swimlane_ds |>
+ group_by(subject) |>
+ summarise(study_day = max(event_study_day)) |>
+ bind_rows(tibble(subject = unique(swimlane_ds$subject), study_day = 0))
+
+ adverse_events <- swimlane_ds |>
+ filter(event_type == "adverse_event") |>
+ select(subject, event_study_day, event_result, aenum, aeraw, icrsgr, ecrsgr, igrnci, egrnci, aeod_study_day, aerd_study_day) |>
+ mutate(
+ initial_grade = coalesce(icrsgr, igrnci),
+ extreme_grade = coalesce(ecrsgr, egrnci),
+ initial_label = case_when(
+ !is.na(icrsgr) ~ "Initial ASTCT Grade",
+ !is.na(igrnci) ~ "Initial NCI CTCAE Grade",
+ TRUE ~ "Initial Grade"
+ ),
+ extreme_label = case_when(
+ !is.na(ecrsgr) ~ "Most Extreme ASTCT Grade",
+ !is.na(egrnci) ~ "Most Extreme NCI CTCAE Grade",
+ TRUE ~ "Most Extreme Grade"
+ )
+ ) |>
+ mutate(
+ tooltip = sprintf(
+ "Subject: %s
Study Day: %d
AENUM: %d
Event of Interest: %s
Primary Adverse Event: %s
Onset Study Day: %d
End Date Study Day: %d
%s: %d
%s: %d",
+ subject,
+ event_study_day,
+ aenum,
+ event_result,
+ aeraw,
+ aeod_study_day,
+ aerd_study_day,
+ initial_label,
+ initial_grade,
+ extreme_label,
+ extreme_grade
+ )
+ )
+
+ p <- plotly::plot_ly(
+ source = "swimlane",
+ colors = c(
+ "DEATH" = "black",
+ "WITHDRAWAL BY SUBJECT" = "grey",
+ "PD (Progressive Disease)" = "red",
+ "SD (Stable Disease)" = "darkorchid4",
+ "MR (Minimal/Minor Response)" = "sienna4",
+ "PR (Partial Response)" = "maroon",
+ "VGPR (Very Good Partial Response)" = "chartreuse4",
+ "CR (Complete Response)" = "#3a41fc",
+ "SCR (Stringent Complete Response)" = "midnightblue",
+ "X Administration Injection" = "goldenrod",
+ "Y Administration Infusion" = "deepskyblue3",
+ "Z Administration Infusion" = "darkorchid",
+ "Cytokine Release Syndrome" = "#f5a733",
+ "Cytokine Release Syndrome Start" = "#fccf79",
+ "Cytokine Release Syndrome End" = "#f59505",
+ "Infection" = "pink",
+ "Infection Start" = "#f2ced3",
+ "Infection End" = "#d65668"
+ ),
+ symbols = c(
+ "DEATH" = "circle",
+ "WITHDRAWAL BY SUBJECT" = "square",
+ "PD (Progressive Disease)" = "circle",
+ "SD (Stable Disease)" = "square-open",
+ "MR (Minimal/Minor Response)" = "star-open",
+ "PR (Partial Response)" = "star-open",
+ "VGPR (Very Good Partial Response)" = "star-open",
+ "CR (Complete Response)" = "star-open",
+ "SCR (Stringent Complete Response)" = "star-open",
+ "X Administration Injection" = "line-ns-open",
+ "Y Administration Infusion" = "line-ns-open",
+ "Z Administration Infusion" = "line-ns-open"
+ ),
+ height = height
+ ) |>
+ plotly::add_markers(
+ x = ~study_day, y = ~subject, color = ~catagory, symbol = ~catagory,
+ text = ~tooltip,
+ hoverinfo = "text",
+ data = study_drug_administration
+ ) |>
+ plotly::add_markers(
+ x = ~study_day, y = ~subject, color = ~catagory, symbol = ~catagory,
+ text = ~tooltip,
+ hoverinfo = "text",
+ data = response_assessment
+ ) |>
+ plotly::add_markers(
+ x = ~study_day, y = ~subject, color = ~catagory, symbol = ~catagory,
+ text = ~tooltip,
+ hoverinfo = "text",
+ data = disposition
+ ) |>
+ plotly::add_segments(
+ x = ~0, xend = ~study_day, y = ~subject, yend = ~subject,
+ data = max_subject_day,
+ line = list(width = 1, color = "grey"),
+ showlegend = FALSE
+ ) |>
+ plotly::add_segments(
+ data = adverse_events,
+ x = ~aeod_study_day,
+ xend = ~aerd_study_day,
+ y = ~subject,
+ yend = ~subject,
+ color = ~event_result,
+ line = list(width = 2),
+ showlegend = TRUE,
+ name = ~event_result,
+ legendgroup = ~event_result,
+ hoverinfo = "none"
+ ) |>
+ plotly::add_markers(
+ data = adverse_events |> filter(event_study_day == aeod_study_day),
+ x = ~aeod_study_day,
+ y = ~subject,
+ text = ~tooltip,
+ hoverinfo = "text",
+ color = ~ paste0(event_result, " Start"),
+ showlegend = TRUE,
+ legendgroup = ~event_result,
+ marker = list(size = 6, symbol = "arrow-down")
+ ) |>
+ plotly::add_markers(
+ data = adverse_events |> filter(event_study_day == aerd_study_day),
+ x = ~aerd_study_day,
+ y = ~subject,
+ text = ~tooltip,
+ hoverinfo = "text",
+ color = ~ paste0(event_result, " End"),
+ showlegend = TRUE,
+ legendgroup = ~event_result,
+ marker = list(size = 6, symbol = "arrow-down")
+ ) |>
+ plotly::layout(
+ xaxis = list(title = "Study Day"), yaxis = list(title = "Subject")
+ ) |>
+ plotly::layout(dragmode = "select") |>
+ plotly::config(displaylogo = FALSE)
+ },
+ height = input$plot_height
+ )
+ })
+
+ output$plot <- plotly::renderPlotly({
+ plotly::event_register(
+ plotly_q()$p,
+ "plotly_selected"
+ )
+ })
+
+ plotly_selected <- reactive(plotly::event_data("plotly_selected", source = "swimlane"))
+
+ output$mm_response <- renderReactable({
+ swimlane_ds <- data()[["swimlane_ds"]]
+ col_defs <- with_tooltips(
+ subject = colDef(name = "Subject"),
+ raise_query = colDef(
+ name = "Raise Query",
+ cell = function(value) {
+ if (!is.na(value) && !is.null(value) && value != "") {
+ htmltools::tags$a(href = value, target = "_blank", "Link")
+ } else {
+ "N/A"
+ }
+ }
+ ),
+ visit_name = colDef(name = "Visit Name"),
+ rspdn = colDef(name = "Assessment Performed"),
+ rspd = colDef(name = "Response Date"),
+ rspd_study_day = colDef(name = "Response Date Study Day"),
+ orsp = colDef(name = "Response"),
+ bma = colDef(name = "Best Marrow Aspirate"),
+ bmb = colDef(name = "Best Marrow Biopsy"),
+ comnts = colDef(name = "Comments")
+ )
+ mm_response <- swimlane_ds |>
+ filter(event_study_day %in% plotly_selected()$x, subject %in% plotly_selected()$y, event_type == "response_assessment") |>
+ select(all_of(names(col_defs)))
+ if (nrow(mm_response) == 0) {
+ return()
+ }
+
+ reactable(
+ mm_response,
+ class = "custom-reactable",
+ columns = col_defs,
+ defaultPageSize = 10,
+ wrap = FALSE,
+ searchable = TRUE,
+ sortable = TRUE
+ )
+ })
+
+ output$tx_listing <- renderReactable({
+ swimlane_ds <- data()[["swimlane_ds"]]
+
+ col_defs <- with_tooltips(
+ site_name = colDef(name = "Site Name"),
+ subject = colDef(name = "Subject"),
+ visit_name = colDef(name = "Visit Name"),
+ visit_date = colDef(name = "Visit Date"),
+ form_name = colDef(name = "Form Name"),
+ source_system_url_link = colDef(
+ name = "Source System URL Link",
+ cell = function(value) {
+ if (!is.na(value) && !is.null(value) && value != "") {
+ htmltools::tags$a(href = value, target = "_blank", "Link")
+ } else {
+ "N/A"
+ }
+ }
+ ),
+ txnam = colDef(name = "Study Drug Name"),
+ txrec = colDef(name = "Study Drug Administered"),
+ txrecrs = colDef(name = "Reason Study Drug Not Admin"),
+ txd_study_day = colDef(name = "Date Administered Study Day"),
+ date_administered = colDef(name = "Date Administered"),
+ cydly = colDef(name = "Cycle Delay"),
+ cydlyrs = colDef(name = "Cycle Delay Reason"),
+ cydlyae = colDef(name = "Cycle Delay Adverse Event"),
+ txdly = colDef(name = "Dose Delay"),
+ txdlyrs = colDef(name = "Dose Delay Reason"),
+ txdlyae = colDef(name = "AE related to Dose Delay"),
+ txpdos = colDef(name = "Planned Dose per Admin"),
+ txpdosu = colDef(name = "Planned Dose per Admin Unit"),
+ frqdv = colDef(name = "Frequency"),
+ txrte = colDef(name = "Route of Administration"),
+ txform = colDef(name = "Dose Formulation"),
+ txdmod = colDef(name = "Dose Modification"),
+ txrmod = colDef(name = "Dose Modification Reason"),
+ txdmae = colDef(name = "AE related to Dose Modification"),
+ txad = colDef(name = "Total Dose Administered"),
+ txadu = colDef(name = "Total Dose Administered Unit"),
+ txd = colDef(name = "Date Administered"),
+ txstm = colDef(name = "Start Time Administered"),
+ txstmu = colDef(name = "Start Time Administered Unknown"),
+ txed = colDef(name = "End Date Administered"),
+ txetm = colDef(name = "End Time Administered"),
+ txetmu = colDef(name = "End Time Administered Unknown"),
+ txtm = colDef(name = "Time Administered"),
+ txtmu = colDef(name = "Time Administered Unknown"),
+ txed_study_day = colDef(name = "End Study Day"),
+ infrt = colDef(name = "Infusion Rate"),
+ infrtu = colDef(name = "Infusion Rate Unit"),
+ tximod = colDef(name = "Infusion Modified?"),
+ txirmod = colDef(name = "Reason for Infusion modification"),
+ tximae = colDef(name = "AE related to Infusion Modification")
+ )
+ tx_listing <- swimlane_ds |>
+ filter(event_study_day %in% plotly_selected()$x, subject %in% plotly_selected()$y) |>
+ select(all_of(names(col_defs)))
+ if (nrow(tx_listing) == 0) {
+ return()
+ }
+
+ reactable(
+ tx_listing,
+ columns = col_defs,
+ defaultPageSize = 10,
+ wrap = FALSE,
+ searchable = TRUE,
+ sortable = TRUE
+ )
+ })
+ })
+ }
+ module(
+ label = label,
+ ui = ui,
+ server = server,
+ datanames = "all",
+ ui_args = list(height = plot_height)
+ )
+}
+
+tm_spider <- function(label = "Spiderplot", plot_height = 600) {
+ ui <- function(id, height) {
+ ns <- NS(id)
+ tagList(
+ div(
+ style = "display: flex; justify-content: center; align-items: center; gap: 30px;",
+ div(
+ selectInput(NS(id, "event_type"), "Select Y Axis", NULL)
+ ),
+ div(sliderInput(ns("plot_height"), "Plot Height (px)", 400, 1200, height))
+ ),
+ div(
+ style = "display: flex",
+ div(
+ class = "simple-card",
+ style = "width: 50%",
+ tagList(
+ h4("Most Recent Resp and Best Resp"),
+ reactableOutput(ns("recent_resp"))
+ )
+ ),
+ div(
+ class = "simple-card",
+ style = "width: 50%",
+ plotly::plotlyOutput(ns("plot"), height = "100%")
+ )
+ ),
+ div(
+ style = "display: flex",
+ div(
+ style = "width: 50%",
+ div(
+ class = "simple-card",
+ h4("Disease Assessment - SFLC"),
+ reactableOutput(ns("sflc_listing"))
+ ),
+ div(
+ class = "simple-card",
+ h4("Disease Assessment - SPEP"),
+ reactableOutput(ns("spep_listing"))
+ )
+ ),
+ div(
+ class = "simple-card",
+ style = "width: 50%",
+ h4("Multiple Myeloma Response"),
+ reactableOutput(ns("all_resp"))
+ )
+ )
+ )
+ }
+ server <- function(id, data, filter_panel_api, plot_height = 600) {
+ moduleServer(id, function(input, output, session) {
+ spiderplot_ds <- reactive(data()[["spiderplot_ds"]])
+ observeEvent(spiderplot_ds(), {
+ event_types <- unique(spiderplot_ds()$event_type)
+ updateSelectInput(
+ inputId = "event_type",
+ choices = event_types[!event_types %in% c("response_assessment", "latest_response_assessment")]
+ )
+ })
+ plotly_q <- reactive({
+ data() |>
+ within(
+ {
+ y_title <- selected_event
+ spiderplot_ds_filtered <- spiderplot_ds |>
+ filter(event_type == selected_event)
+ ticksuffix <- ifelse(grepl("Change from baseline", selected_event), "%", "")
+
+ p <- plotly::plot_ly(source = "spiderplot", height = height) |>
+ plotly::add_markers(
+ x = ~event_study_day, y = ~event_result_num, color = ~subject,
+ data = spiderplot_ds_filtered
+ ) |>
+ plotly::add_lines(
+ x = ~event_study_day, y = ~event_result_num, color = ~subject,
+ data = spiderplot_ds_filtered,
+ showlegend = FALSE
+ ) |>
+ plotly::layout(
+ xaxis = list(title = "Collection Date Study Day", zeroline = FALSE),
+ yaxis = list(title = ~y_title, ticksuffix = ticksuffix, separatethousands = TRUE, exponentformat = "none"),
+ title = ~ paste0(paste(strwrap(y_title, width = 50), collapse = "
"), " Over Time")
+ ) |>
+ plotly::layout(dragmode = "select") |>
+ plotly::config(displaylogo = FALSE)
+ },
+ selected_event = input$event_type,
+ height = input$plot_height
+ )
+ })
+
+ output$plot <- plotly::renderPlotly({
+ plotly::event_register(
+ plotly_q()$p,
+ "plotly_selected"
+ )
+ })
+
+ plotly_selected <- reactive(plotly::event_data("plotly_selected", source = "spiderplot"))
+
+
+ resp_cols <- with_tooltips(
+ subject = colDef(name = "Subject"),
+ raise_query = colDef(
+ name = "Raise Query",
+ cell = function(value) {
+ if (!is.na(value) && !is.null(value) && value != "") {
+ htmltools::tags$a(href = value, target = "_blank", "Link")
+ } else {
+ "N/A"
+ }
+ }
+ ),
+ visit_name = colDef(name = "Visit Name"),
+ rspdn = colDef(name = "Assessment Performed"),
+ rspd = colDef(name = "Response Date"),
+ rspd_study_day = colDef(name = "Response Date Study Day"),
+ orsp = colDef(name = "Response"),
+ bma = colDef(name = "Best Marrow Aspirate"),
+ bmb = colDef(name = "Best Marrow Biopsy"),
+ comnts = colDef(name = "Comments")
+ )
+
+ selected_recent_subject <- reactiveVal(NULL)
+
+ plotly_selected_subjects <- reactive({
+ data()[["spiderplot_ds"]] |>
+ filter(event_study_day %in% plotly_selected()$x, event_result %in% plotly_selected()$y) |>
+ pull(subject)
+ })
+
+ recent_resp_ds <- reactive({
+ data()[["spiderplot_ds"]] |>
+ filter(event_type == "latest_response_assessment") |>
+ filter(subject %in% plotly_selected_subjects()) |>
+ select(all_of(names(resp_cols)))
+ })
+
+ output$recent_resp <- renderReactable({
+ req(plotly_selected_subjects())
+
+ reactable(
+ recent_resp_ds(),
+ columns = resp_cols,
+ selection = "single",
+ onClick = "select",
+ defaultPageSize = 15,
+ wrap = FALSE,
+ rowClass = JS("
+ function(rowInfo) {
+ console.log(rowInfo);
+ if (rowInfo.selected) {
+ return 'selected-row';
+ }
+ }
+ ")
+ )
+ })
+
+ table_selected_subjects <- reactive({
+ selected_row <- getReactableState("recent_resp", "selected")
+ if (!is.null(selected_row)) {
+ recent_resp_ds()[selected_row, ]$subject
+ } else {
+ unique(recent_resp_ds()$subject)
+ }
+ })
+
+ all_resp <- reactive({
+ data()[["spiderplot_ds"]] |>
+ filter(event_type == "response_assessment") |>
+ select(all_of(names(resp_cols))) |>
+ filter(subject %in% plotly_selected_subjects()) |>
+ filter(subject %in% table_selected_subjects())
+ })
+
+ output$all_resp <- renderReactable({
+ if (nrow(all_resp()) == 0) {
+ return()
+ }
+
+ reactable(
+ all_resp(),
+ columns = resp_cols,
+ defaultPageSize = 15,
+ wrap = FALSE
+ )
+ })
+
+ spep_cols <- with_tooltips(
+ subject = colDef(name = "Subject"),
+ visit_name = colDef(name = "Visit Name"),
+ visit_date = colDef(name = "Visit Date"),
+ form_name = colDef(name = "Form Name"),
+ source_system_url_link = colDef(
+ name = "Source System URL Link",
+ cell = function(value) {
+ if (!is.na(value) && !is.null(value) && value != "") {
+ htmltools::tags$a(href = value, target = "_blank", "Link")
+ } else {
+ "N/A"
+ }
+ }
+ ),
+ rspdn = colDef(name = "Assessment Performed"),
+ rspd = colDef(name = "Response Date"),
+ rspd_study_day = colDef(name = "Response Date Study Day"),
+ orsp = colDef(name = "Response"),
+ bma = colDef(name = "Best Marrow Aspirate"),
+ bmb = colDef(name = "Best Marrow Biopsy"),
+ comnts = colDef(name = "Comments"),
+ asmntdn = colDef(name = "Assessment Not Done"),
+ blq = colDef(name = "Serum M-protein too small to quantify"),
+ coldr = colDef(name = "Collection Date"),
+ cold_study_day = colDef(name = "Collection Study Day"),
+ coltm = colDef(name = "Collection Time"),
+ coltmu = colDef(name = "Collection Time Unknown"),
+ lrspep1 = colDef(name = "Another Form added?"),
+ mprte_raw = colDef(name = "Serum M-protein"),
+ mprtec = colDef(name = "SPEP Serum M-protein detection")
+ )
+
+ spep <- reactive({
+ data()[["spiderplot_ds"]] |>
+ filter(event_type == "Serum M-protein") |>
+ filter(subject %in% table_selected_subjects()) |>
+ select(all_of(names(spep_cols)))
+ })
+
+ output$spep_listing <- renderReactable({
+ if (nrow(spep()) == 0) {
+ return()
+ }
+
+ reactable(
+ spep(),
+ columns = spep_cols,
+ defaultPageSize = 5,
+ wrap = FALSE
+ )
+ })
+
+
+ sflc_cols <- with_tooltips(
+ subject = colDef(name = "Subject"),
+ visit_name = colDef(name = "Visit Name"),
+ visit_date = colDef(name = "Visit Date"),
+ form_name = colDef(name = "Form Name"),
+ source_system_url_link = colDef(
+ name = "Source System URL Link",
+ cell = function(value) {
+ if (!is.na(value) && !is.null(value) && value != "") {
+ htmltools::tags$a(href = value, target = "_blank", "Link")
+ } else {
+ "N/A"
+ }
+ }
+ ),
+ rspdn = colDef(name = "Assessment Performed"),
+ rspd = colDef(name = "Response Date"),
+ rspd_study_day = colDef(name = "Response Date Study Day"),
+ orsp = colDef(name = "Response"),
+ bma = colDef(name = "Best Marrow Aspirate"),
+ bmb = colDef(name = "Best Marrow Biopsy"),
+ comnts = colDef(name = "Comments"),
+ asmntdn = colDef(name = "Assessment Not Done"),
+ blq = colDef(name = "Serum M-protein too small to quantify"),
+ coldr = colDef(name = "Collection Date"),
+ cold_study_day = colDef(name = "Collection Study Day"),
+ coltm = colDef(name = "Collection Time"),
+ coltmu = colDef(name = "Collection Time Unknown"),
+ lchfrc = colDef(name = "Presence of Serum free light chains"),
+ lchfr_raw = colDef(name = "Serum free light chain results"),
+ klchf_raw = colDef(name = "Kappa free light chain results"),
+ llchf_raw = colDef(name = "Lambda free light chain results"),
+ klchp_raw = colDef(name = "Kappa-Lambda free light chain ratio"),
+ mprte_raw = colDef(name = "Serum M-protein"),
+ mprtec = colDef(name = "SPEP Serum M-protein detection")
+ )
+
+ sflc <- reactive({
+ data()[["spiderplot_ds"]] |>
+ filter(
+ event_type %in% c(
+ "Kappa free light chain quantity",
+ "Lambda free light chain quantity",
+ "Kappa-Lambda free light chain ratio"
+ )
+ ) |>
+ filter(subject %in% table_selected_subjects()) |>
+ select(all_of(names(sflc_cols)))
+ })
+
+ output$sflc_listing <- renderReactable({
+ if (nrow(sflc()) == 0) {
+ return()
+ }
+
+ reactable(
+ sflc(),
+ columns = sflc_cols,
+ defaultPageSize = 5,
+ wrap = FALSE
+ )
+ })
+ })
+ }
+ module(
+ label = label,
+ ui = ui,
+ server = server,
+ datanames = "all",
+ ui_args = list(height = plot_height)
+ )
+}
+
+app <- init(
+ data = data,
+ header = tags$head(tags$style(
+ ".simple-card {
+ padding: 20px;
+ border-radius: 10px;
+ border: 1px solid #ddd;
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
+ background-color: #fff;
+ }
+ .simple-card h4 {
+ text-align: center;
+ }
+ .selected-row {
+ background-color: #d9edf7;
+ color: #31708f;
+ }
+ .custom-reactable.rt-nowrap .rt-th-inner {
+ white-space: normal !important; /* Allow text wrapping */
+ text-overflow: unset !important; /* Disable ellipsis */
+ overflow: visible !important; /* Ensure content is visible and wrapped */
+ }"
+ )),
+ modules = modules(
+ tm_swimlane(),
+ tm_spider(),
+ tm_data_table()
+ ),
+ filter = teal_slices(
+ teal_slice(
+ dataname = "parent_ds",
+ varname = "subject"
+ ),
+ teal_slice(
+ dataname = "parent_ds",
+ varname = "cohrt"
+ ),
+ teal_slice(
+ dataname = "parent_ds",
+ varname = "txarm"
+ ),
+ count_type = "all"
+ )
+)
+
+shinyApp(app$ui, app$server)
diff --git a/inst/poc_osprey.R b/inst/poc_osprey.R
new file mode 100644
index 000000000..b254c43de
--- /dev/null
+++ b/inst/poc_osprey.R
@@ -0,0 +1,75 @@
+pkgload::load_all("teal.modules.general")
+
+data <- within(teal_data(), {
+ library(dplyr)
+ library(osprey)
+
+ ADSL <- osprey::rADSL |>
+ mutate(x_val = as.integer(TRTEDTM - TRTSDTM)) |>
+ arrange(x_val) |>
+ filter(!is.na(x_val))
+ ADRS <- osprey::rADRS |>
+ filter(ADY >= 0, USUBJID %in% ADSL$USUBJID)
+ reference_lines <- data.frame(x = c(50, 250), xend = c(50, 250), y = min(ADSL$USUBJID), yend = max(ADSL$USUBJID))
+})
+
+join_keys(data) <- default_cdisc_join_keys[c("ADSL", "ADRS")]
+
+plotly_specs <- list(
+ list(
+ "plotly::add_bars",
+ data = quote(ADSL),
+ x = ~x_val, y = ~USUBJID, color = ~ARM,
+ colors = c("A: Drug X" = "#343CFF", "B: Placebo" = "#FF484B", "C: Combination" = "#222222")
+ ),
+ list(
+ "plotly::add_markers",
+ data = quote(ADRS),
+ x = ~ADY, y = ~USUBJID, symbol = ~AVALC,
+ marker = list(
+ size = 10,
+ color = "#329133"
+ )
+ ),
+ list(
+ "plotly::add_segments",
+ data = quote(reference_lines),
+ x = ~x,
+ xend = ~xend,
+ y = ~y,
+ yend = ~yend,
+ line = list(
+ color = "#CA0E40",
+ width = 2,
+ dash = "dash"
+ ),
+ showlegend = FALSE
+ )
+)
+
+app <- init(
+ data = data,
+ filter = teal_slices(
+ teal_slice(
+ "ADSL",
+ "AGE",
+ selected = c(24, 25)
+ ),
+ teal_slice(
+ "ADRS",
+ "PARAMCD",
+ selected = "OVRINV"
+ )
+ ),
+ modules = modules(
+ tm_data_table(),
+ tm_p_swimlane2(
+ label = "Swimlane",
+ plotly_specs = plotly_specs,
+ title = "Swimlane Efficacy Plot",
+ symbols = c("CR" = "circle", "PR" = "triangle-up", "SD" = "diamond-wide", "PD" = "square", "NE" = "x-thin-open")
+ )
+ )
+)
+
+shinyApp(app$ui, app$server)
diff --git a/inst/swimlane_poc.R b/inst/swimlane_poc.R
new file mode 100644
index 000000000..d06007e7e
--- /dev/null
+++ b/inst/swimlane_poc.R
@@ -0,0 +1,71 @@
+pkgload::load_all("teal")
+pkgload::load_all("teal.widgets")
+pkgload::load_all("teal.modules.general")
+
+# Example data
+data <- within(teal_data(), {
+ library(dplyr)
+ library(tidyr)
+
+ set.seed(123) # Setting a seed for reproducibility
+ # Define possible maximum study days
+ .possible_end_days <- c(50, 60, 70)
+
+ # Create sample data
+ synthetic_data <- tibble(subjid = c(1:15), strata = rep(c("category 1", "category 2"), length.out = 15)) |>
+ rowwise() |>
+ mutate(
+ max_study_day = sample(.possible_end_days, 1),
+ study_day = list(seq(10, max_study_day, by = 10))
+ ) |>
+ unnest(study_day) |>
+ group_by(subjid) |>
+ mutate(
+ assigned_drug = sample(c("Drug A", "Drug B"), 1)
+ ) |>
+ ungroup() |>
+ mutate(
+ response_type = sample(c("CR", "PR"), n(), replace = TRUE),
+ subjid = reorder(as.character(subjid), max_study_day)
+ ) |>
+ select(-max_study_day)
+})
+
+app <- init(
+ data = data,
+ modules = modules(
+ tm_data_table(),
+ tm_p_swimlane(
+ label = "Swimlane",
+ geom_specs = list(
+ list(
+ geom = str2lang("ggplot2::geom_col"),
+ data = quote(synthetic_data),
+ mapping = list(y = quote(subjid), x = quote(max(study_day))),
+ width = 0.2
+ ), # geom_col(data = synthetic_data, mapping = aes(x = subjid, x = max(study_day), width = 0.2)
+ list(
+ geom = quote(geom_point),
+ data = quote(synthetic_data),
+ mapping = list(
+ y = quote(subjid), x = quote(study_day), color = quote(assigned_drug), shape = quote(assigned_drug)
+ )
+ ),
+ list(
+ geom = quote(geom_point),
+ data = quote(synthetic_data),
+ mapping = list(
+ y = quote(subjid), x = quote(study_day), color = quote(response_type), shape = quote(response_type)
+ )
+ ),
+ list(
+ geom = quote(facet_wrap),
+ facets = quote(vars(strata))
+ )
+ ),
+ title = "Swimlane Efficacy Plot"
+ )
+ )
+)
+
+shinyApp(app$ui, app$server)
diff --git a/inst/teal_app.lock b/inst/teal_app.lock
new file mode 100644
index 000000000..9bbf330de
--- /dev/null
+++ b/inst/teal_app.lock
@@ -0,0 +1,5853 @@
+{
+ "R": {
+ "Version": "4.4.1",
+ "Repositories": [
+ {
+ "Name": "NON_VALIDATED",
+ "URL": "https://packages.roche.com/Non-Validated/2024-10-14+2K_YKWmH"
+ },
+ {
+ "Name": "CRAN",
+ "URL": "https://packages.roche.com/CRAN/2024-10-14"
+ }
+ ]
+ },
+ "Packages": {
+ "DT": {
+ "Package": "DT",
+ "Version": "0.33",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "A Wrapper of the JavaScript Library 'DataTables'",
+ "Authors@R": "c( person(\"Yihui\", \"Xie\", role = \"aut\"), person(\"Joe\", \"Cheng\", email = \"joe@posit.co\", role = c(\"aut\", \"cre\")), person(\"Xianying\", \"Tan\", role = \"aut\"), person(\"JJ\", \"Allaire\", role = \"ctb\"), person(\"Maximilian\", \"Girlich\", role = \"ctb\"), person(\"Greg\", \"Freedman Ellis\", role = \"ctb\"), person(\"Johannes\", \"Rauh\", role = \"ctb\"), person(\"SpryMedia Limited\", role = c(\"ctb\", \"cph\"), comment = \"DataTables in htmlwidgets/lib\"), person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js in htmlwidgets/lib\"), person(\"Leon\", \"Gersen\", role = c(\"ctb\", \"cph\"), comment = \"noUiSlider in htmlwidgets/lib\"), person(\"Bartek\", \"Szopka\", role = c(\"ctb\", \"cph\"), comment = \"jquery.highlight.js in htmlwidgets/lib\"), person(\"Alex\", \"Pickering\", role = c(\"ctb\")), person(\"William\", \"Holmes\", role = c(\"ctb\")), person(\"Mikko\", \"Marttila\", role = c(\"ctb\")), person(\"Andres\", \"Quintero\", role = c(\"ctb\")), person(\"Stéphane\", \"Laurent\", role = c(\"ctb\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "Data objects in R can be rendered as HTML tables using the JavaScript library 'DataTables' (typically via R Markdown or Shiny). The 'DataTables' library has been included in this R package. The package name 'DT' is an abbreviation of 'DataTables'.",
+ "URL": "https://github.com/rstudio/DT",
+ "BugReports": "https://github.com/rstudio/DT/issues",
+ "License": "GPL-3 | file LICENSE",
+ "Imports": [
+ "htmltools (>= 0.3.6)",
+ "htmlwidgets (>= 1.3)",
+ "httpuv",
+ "jsonlite (>= 0.9.16)",
+ "magrittr",
+ "crosstalk",
+ "jquerylib",
+ "promises"
+ ],
+ "Suggests": [
+ "knitr (>= 1.8)",
+ "rmarkdown",
+ "shiny (>= 1.6)",
+ "bslib",
+ "future",
+ "testit",
+ "tibble"
+ ],
+ "VignetteBuilder": "knitr",
+ "RoxygenNote": "7.3.1",
+ "Encoding": "UTF-8",
+ "NeedsCompilation": "no",
+ "Author": "Yihui Xie [aut], Joe Cheng [aut, cre], Xianying Tan [aut], JJ Allaire [ctb], Maximilian Girlich [ctb], Greg Freedman Ellis [ctb], Johannes Rauh [ctb], SpryMedia Limited [ctb, cph] (DataTables in htmlwidgets/lib), Brian Reavis [ctb, cph] (selectize.js in htmlwidgets/lib), Leon Gersen [ctb, cph] (noUiSlider in htmlwidgets/lib), Bartek Szopka [ctb, cph] (jquery.highlight.js in htmlwidgets/lib), Alex Pickering [ctb], William Holmes [ctb], Mikko Marttila [ctb], Andres Quintero [ctb], Stéphane Laurent [ctb], Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Joe Cheng ",
+ "Repository": "RSPM"
+ },
+ "DescTools": {
+ "Package": "DescTools",
+ "Version": "0.99.59",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Tools for Descriptive Statistics",
+ "Date": "2025-01-25",
+ "Authors@R": "c( person(given=\"Andri\", family=\"Signorell\", email = \"andri@signorell.net\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4311-1969\")), person(\"Ken\" , \"Aho\", role = c(\"ctb\")), person(\"Andreas\" , \"Alfons\", role = c(\"ctb\")), person(\"Nanina\" , \"Anderegg\", role = c(\"ctb\")), person(\"Tomas\" , \"Aragon\", role = c(\"ctb\")), person(\"Chandima\" , \"Arachchige\", role = c(\"ctb\")), person(\"Antti\" , \"Arppe\", role = c(\"ctb\")), person(\"Adrian\" , \"Baddeley\", role = c(\"ctb\")), person(\"Kamil\" , \"Barton\", role = c(\"ctb\")), person(\"Ben\" , \"Bolker\", role = c(\"ctb\")), person(\"Hans W.\" , \"Borchers\", role = c(\"ctb\")), person(\"Frederico\" , \"Caeiro\", role = c(\"ctb\")), person(\"Stephane\" , \"Champely\", role = c(\"ctb\")), person(\"Daniel\" , \"Chessel\", role = c(\"ctb\")), person(\"Leanne\" , \"Chhay\", role = c(\"ctb\")), person(\"Nicholas\" , \"Cooper\", role = c(\"ctb\")), person(\"Clint\" , \"Cummins\", role = c(\"ctb\")), person(\"Michael\" , \"Dewey\", role = c(\"ctb\")), person(\"Harold C.\" , \"Doran\", role = c(\"ctb\")), person(\"Stephane\" , \"Dray\", role = c(\"ctb\")), person(\"Charles\" , \"Dupont\", role = c(\"ctb\")), person(\"Dirk\" , \"Eddelbuettel\", role = c(\"ctb\")), person(\"Claus\" , \"Ekstrom\", role = c(\"ctb\")), person(\"Martin\" , \"Elff\", role = c(\"ctb\")), person(\"Jeff\" , \"Enos\", role = c(\"ctb\")), person(\"Richard W.\" , \"Farebrother\", role = c(\"ctb\")), person(\"John\" , \"Fox\", role = c(\"ctb\")), person(\"Romain\" , \"Francois\", role = c(\"ctb\")), person(\"Michael\" , \"Friendly\", role = c(\"ctb\")), person(\"Tal\" , \"Galili\", role = c(\"ctb\")), person(\"Matthias\" , \"Gamer\", role = c(\"ctb\")), person(\"Joseph L.\" , \"Gastwirth\", role = c(\"ctb\")), person(\"Vilmantas\" , \"Gegzna\", role = c(\"ctb\")), person(\"Yulia R.\" , \"Gel\", role = c(\"ctb\")), person(\"Sereina\" , \"Graber\", role = c(\"ctb\")), person(\"Juergen\" , \"Gross\", role = c(\"ctb\")), person(\"Gabor\" , \"Grothendieck\", role = c(\"ctb\")), person(\"Frank E.\" , \"Harrell Jr\", role = c(\"ctb\")), person(\"Richard\" , \"Heiberger\", role = c(\"ctb\")), person(\"Michael\" , \"Hoehle\", role = c(\"ctb\")), person(\"Christian W.\" , \"Hoffmann\", role = c(\"ctb\")), person(\"Soeren\" , \"Hojsgaard\", role = c(\"ctb\")), person(\"Torsten\" , \"Hothorn\", role = c(\"ctb\")), person(\"Markus\" , \"Huerzeler\", role = c(\"ctb\")), person(\"Wallace W.\" , \"Hui\", role = c(\"ctb\")), person(\"Pete\" , \"Hurd\", role = c(\"ctb\")), person(\"Rob J.\" , \"Hyndman\", role = c(\"ctb\")), person(\"Christopher\" , \"Jackson\", role = c(\"ctb\")), person(\"Matthias\" , \"Kohl\", role = c(\"ctb\")), person(\"Mikko\" , \"Korpela\", role = c(\"ctb\")), person(\"Max\" , \"Kuhn\", role = c(\"ctb\")), person(\"Detlew\" , \"Labes\", role = c(\"ctb\")), person(\"Friederich\" , \"Leisch\", role = c(\"ctb\")), person(\"Jim\" , \"Lemon\", role = c(\"ctb\")), person(\"Dong\" , \"Li\", role = c(\"ctb\")), person(\"Martin\" , \"Maechler\", role = c(\"ctb\")), person(\"Arni\" , \"Magnusson\", role = c(\"ctb\")), person(\"Ben\" , \"Mainwaring\", role = c(\"ctb\")), person(\"Daniel\" , \"Malter\", role = c(\"ctb\")), person(\"George\" , \"Marsaglia\", role = c(\"ctb\")), person(\"John\" , \"Marsaglia\", role = c(\"ctb\")), person(\"Alina\" , \"Matei\", role = c(\"ctb\")), person(\"David\" , \"Meyer\", role = c(\"ctb\")), person(\"Weiwen\" , \"Miao\", role = c(\"ctb\")), person(\"Giovanni\" , \"Millo\", role = c(\"ctb\")), person(\"Yongyi\" , \"Min\", role = c(\"ctb\")), person(\"David\" , \"Mitchell\", role = c(\"ctb\")), person(\"Cyril Flurin\" , \"Moser\", role = c(\"ctb\")), person(\"Franziska\" , \"Mueller\", role = c(\"ctb\")), person(\"Markus\" , \"Naepflin\", role = c(\"ctb\")), person(\"Danielle\" , \"Navarro\", role = c(\"ctb\")), person(\"Henric\" , \"Nilsson\", role = c(\"ctb\")), person(\"Klaus\" , \"Nordhausen\", role = c(\"ctb\")), person(\"Derek\" , \"Ogle\", role = c(\"ctb\")), person(\"Hong\" , \"Ooi\", role = c(\"ctb\")), person(\"Nick\" , \"Parsons\", role = c(\"ctb\")), person(\"Sandrine\" , \"Pavoine\", role = c(\"ctb\")), person(\"Tony\" , \"Plate\", role = c(\"ctb\")), person(\"Luke\" , \"Prendergast\", role = c(\"ctb\")), person(\"Roland\" , \"Rapold\", role = c(\"ctb\")), person(\"William\" , \"Revelle\", role = c(\"ctb\")), person(\"Tyler\" , \"Rinker\", role = c(\"ctb\")), person(\"Brian D.\" , \"Ripley\", role = c(\"ctb\")), person(\"Caroline\" , \"Rodriguez\", role = c(\"ctb\")), person(\"Nathan\" , \"Russell\", role = c(\"ctb\")), person(\"Nick\" , \"Sabbe\", role = c(\"ctb\")), person(\"Ralph\" , \"Scherer\", role = c(\"ctb\")), person(\"Venkatraman E.\", \"Seshan\", role = c(\"ctb\")), person(\"Michael\" , \"Smithson\", role = c(\"ctb\")), person(\"Greg\" , \"Snow\", role = c(\"ctb\")), person(\"Karline\" , \"Soetaert\", role = c(\"ctb\")), person(\"Werner A.\" , \"Stahel\", role = c(\"ctb\")), person(\"Alec\" , \"Stephenson\", role = c(\"ctb\")), person(\"Mark\" , \"Stevenson\", role = c(\"ctb\")), person(\"Ralf\" , \"Stubner\", role = c(\"ctb\")), person(\"Matthias\" , \"Templ\", role = c(\"ctb\")), person(\"Duncan\" , \"Temple Lang\", role = c(\"ctb\")), person(\"Terry\" , \"Therneau\", role = c(\"ctb\")), person(\"Yves\" , \"Tille\", role = c(\"ctb\")), person(\"Luis\" , \"Torgo\", role = c(\"ctb\")), person(\"Adrian\" , \"Trapletti\", role = c(\"ctb\")), person(\"Joshua\" , \"Ulrich\", role = c(\"ctb\")), person(\"Kevin\" , \"Ushey\", role = c(\"ctb\")), person(\"Jeremy\" , \"VanDerWal\", role = c(\"ctb\")), person(\"Bill\" , \"Venables\", role = c(\"ctb\")), person(\"John\" , \"Verzani\", role = c(\"ctb\")), person(\"Pablo J.\" , \"Villacorta Iglesias\", role = c(\"ctb\")), person(\"Gregory R.\" , \"Warnes\", role = c(\"ctb\")), person(\"Stefan\" , \"Wellek\", role = c(\"ctb\")), person(\"Hadley\" , \"Wickham\", role = c(\"ctb\")), person(\"Rand R.\" , \"Wilcox\", role = c(\"ctb\")), person(\"Peter\" , \"Wolf\", role = c(\"ctb\")), person(\"Daniel\" , \"Wollschlaeger\", role = c(\"ctb\")), person(\"Joseph\" , \"Wood\", role = c(\"ctb\")), person(\"Ying\" , \"Wu\", role = c(\"ctb\")), person(\"Thomas\" , \"Yee\", role = c(\"ctb\")), person(\"Achim\" , \"Zeileis\", role = c(\"ctb\")) )",
+ "Description": "A collection of miscellaneous basic statistic functions and convenience wrappers for efficiently describing data. The author's intention was to create a toolbox, which facilitates the (notoriously time consuming) first descriptive tasks in data analysis, consisting of calculating descriptive statistics, drawing graphical summaries and reporting the results. The package contains furthermore functions to produce documents using MS Word (or PowerPoint) and functions to import data from Excel. Many of the included functions can be found scattered in other packages and other sources written partly by Titans of R. The reason for collecting them here, was primarily to have them consolidated in ONE instead of dozens of packages (which themselves might depend on other packages which are not needed at all), and to provide a common and consistent interface as far as function and arguments naming, NA handling, recycling rules etc. are concerned. Google style guides were used as naming rules (in absence of convincing alternatives). The 'BigCamelCase' style was consequently applied to functions borrowed from contributed R packages as well.",
+ "Suggests": [
+ "RDCOMClient",
+ "tcltk",
+ "VGAM",
+ "R.rsp",
+ "testthat (>= 3.0.0)"
+ ],
+ "Depends": [
+ "base",
+ "stats",
+ "R (>= 4.2.0)"
+ ],
+ "Imports": [
+ "graphics",
+ "grDevices",
+ "methods",
+ "MASS",
+ "utils",
+ "boot",
+ "mvtnorm",
+ "expm",
+ "Rcpp (>= 0.12.10)",
+ "rstudioapi",
+ "Exact",
+ "gld",
+ "data.table",
+ "readxl",
+ "haven",
+ "httr",
+ "withr",
+ "cli"
+ ],
+ "LinkingTo": [
+ "Rcpp"
+ ],
+ "License": "GPL (>= 2)",
+ "LazyLoad": "yes",
+ "LazyData": "yes",
+ "Additional_repositories": "http://www.omegahat.net/R",
+ "URL": "https://andrisignorell.github.io/DescTools/, https://github.com/AndriSignorell/DescTools/",
+ "BugReports": "https://github.com/AndriSignorell/DescTools/issues",
+ "RoxygenNote": "7.3.2",
+ "Encoding": "UTF-8",
+ "NeedsCompilation": "yes",
+ "SystemRequirements": "C++17",
+ "VignetteBuilder": "R.rsp",
+ "Config/testthat/edition": "3",
+ "Author": "Andri Signorell [aut, cre] (), Ken Aho [ctb], Andreas Alfons [ctb], Nanina Anderegg [ctb], Tomas Aragon [ctb], Chandima Arachchige [ctb], Antti Arppe [ctb], Adrian Baddeley [ctb], Kamil Barton [ctb], Ben Bolker [ctb], Hans W. Borchers [ctb], Frederico Caeiro [ctb], Stephane Champely [ctb], Daniel Chessel [ctb], Leanne Chhay [ctb], Nicholas Cooper [ctb], Clint Cummins [ctb], Michael Dewey [ctb], Harold C. Doran [ctb], Stephane Dray [ctb], Charles Dupont [ctb], Dirk Eddelbuettel [ctb], Claus Ekstrom [ctb], Martin Elff [ctb], Jeff Enos [ctb], Richard W. Farebrother [ctb], John Fox [ctb], Romain Francois [ctb], Michael Friendly [ctb], Tal Galili [ctb], Matthias Gamer [ctb], Joseph L. Gastwirth [ctb], Vilmantas Gegzna [ctb], Yulia R. Gel [ctb], Sereina Graber [ctb], Juergen Gross [ctb], Gabor Grothendieck [ctb], Frank E. Harrell Jr [ctb], Richard Heiberger [ctb], Michael Hoehle [ctb], Christian W. Hoffmann [ctb], Soeren Hojsgaard [ctb], Torsten Hothorn [ctb], Markus Huerzeler [ctb], Wallace W. Hui [ctb], Pete Hurd [ctb], Rob J. Hyndman [ctb], Christopher Jackson [ctb], Matthias Kohl [ctb], Mikko Korpela [ctb], Max Kuhn [ctb], Detlew Labes [ctb], Friederich Leisch [ctb], Jim Lemon [ctb], Dong Li [ctb], Martin Maechler [ctb], Arni Magnusson [ctb], Ben Mainwaring [ctb], Daniel Malter [ctb], George Marsaglia [ctb], John Marsaglia [ctb], Alina Matei [ctb], David Meyer [ctb], Weiwen Miao [ctb], Giovanni Millo [ctb], Yongyi Min [ctb], David Mitchell [ctb], Cyril Flurin Moser [ctb], Franziska Mueller [ctb], Markus Naepflin [ctb], Danielle Navarro [ctb], Henric Nilsson [ctb], Klaus Nordhausen [ctb], Derek Ogle [ctb], Hong Ooi [ctb], Nick Parsons [ctb], Sandrine Pavoine [ctb], Tony Plate [ctb], Luke Prendergast [ctb], Roland Rapold [ctb], William Revelle [ctb], Tyler Rinker [ctb], Brian D. Ripley [ctb], Caroline Rodriguez [ctb], Nathan Russell [ctb], Nick Sabbe [ctb], Ralph Scherer [ctb], Venkatraman E. Seshan [ctb], Michael Smithson [ctb], Greg Snow [ctb], Karline Soetaert [ctb], Werner A. Stahel [ctb], Alec Stephenson [ctb], Mark Stevenson [ctb], Ralf Stubner [ctb], Matthias Templ [ctb], Duncan Temple Lang [ctb], Terry Therneau [ctb], Yves Tille [ctb], Luis Torgo [ctb], Adrian Trapletti [ctb], Joshua Ulrich [ctb], Kevin Ushey [ctb], Jeremy VanDerWal [ctb], Bill Venables [ctb], John Verzani [ctb], Pablo J. Villacorta Iglesias [ctb], Gregory R. Warnes [ctb], Stefan Wellek [ctb], Hadley Wickham [ctb], Rand R. Wilcox [ctb], Peter Wolf [ctb], Daniel Wollschlaeger [ctb], Joseph Wood [ctb], Ying Wu [ctb], Thomas Yee [ctb], Achim Zeileis [ctb]",
+ "Maintainer": "Andri Signorell ",
+ "Repository": "CRAN"
+ },
+ "Exact": {
+ "Package": "Exact",
+ "Version": "3.3",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Unconditional Exact Test",
+ "Authors@R": "person(\"Peter\", \"Calhoun\", email=\"calhoun.peter@gmail.com\", role=c(\"aut\", \"cre\"))",
+ "Author": "Peter Calhoun [aut, cre]",
+ "Maintainer": "Peter Calhoun ",
+ "Description": "Performs unconditional exact tests and power calculations for 2x2 contingency tables. For comparing two independent proportions, performs Barnard's test (1945) using the original CSM test (Barnard, 1947 ), using Fisher's p-value referred to as Boschloo's test (1970) , or using a Z-statistic (Suissa and Shuster, 1985, ). For comparing two binary proportions, performs unconditional exact test using McNemar's Z-statistic (Berger and Sidik, 2003, ), using McNemar's conditional p-value, using McNemar's Z-statistic with continuity correction, or using CSM test. Calculates confidence intervals for the difference in proportion. This package interacts with pre-computed data available through the ExactData R package, which is available in a 'drat' repository. Install the ExactData R package from GitHub at . The ExactData R package is approximately 85 MB.",
+ "License": "GPL-2",
+ "Depends": [
+ "R (>= 3.5.0)"
+ ],
+ "Imports": [
+ "graphics",
+ "stats",
+ "utils",
+ "rootSolve"
+ ],
+ "Suggests": [
+ "ExactData"
+ ],
+ "Additional_repositories": "https://pcalhoun1.github.io/drat",
+ "NeedsCompilation": "no",
+ "Repository": "CRAN"
+ },
+ "MASS": {
+ "Package": "MASS",
+ "Version": "7.3-64",
+ "Source": "Repository",
+ "Priority": "recommended",
+ "Date": "2025-01-06",
+ "Revision": "$Rev: 3680 $",
+ "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\"), email = \"Brian.Ripley@R-project.org\"), person(\"Bill\", \"Venables\", role = c(\"aut\", \"cph\")), person(c(\"Douglas\", \"M.\"), \"Bates\", role = \"ctb\"), person(\"Kurt\", \"Hornik\", role = \"trl\", comment = \"partial port ca 1998\"), person(\"Albrecht\", \"Gebhardt\", role = \"trl\", comment = \"partial port ca 1998\"), person(\"David\", \"Firth\", role = \"ctb\", comment = \"support functions for polr\"))",
+ "Description": "Functions and datasets to support Venables and Ripley, \"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",
+ "Author": "Brian Ripley [aut, cre, cph], Bill Venables [aut, cph], Douglas M. Bates [ctb], Kurt Hornik [trl] (partial port ca 1998), Albrecht Gebhardt [trl] (partial port ca 1998), David Firth [ctb] (support functions for polr)",
+ "Maintainer": "Brian Ripley ",
+ "Repository": "CRAN"
+ },
+ "Matrix": {
+ "Package": "Matrix",
+ "Version": "1.7-2",
+ "Source": "Repository",
+ "VersionNote": "do also bump src/version.h, inst/include/Matrix/version.h",
+ "Date": "2025-01-20",
+ "Priority": "recommended",
+ "Title": "Sparse and Dense Matrix Classes and Methods",
+ "Description": "A rich hierarchy of sparse and dense matrix classes, including general, symmetric, triangular, and diagonal matrices with numeric, logical, or pattern entries. Efficient methods for operating on such matrices, often wrapping the 'BLAS', 'LAPACK', and '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": "c(person(\"Douglas\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Martin\", \"Maechler\", role = c(\"aut\", \"cre\"), email = \"mmaechler+Matrix@gmail.com\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Mikael\", \"Jagan\", role = \"aut\", comment = c(ORCID = \"0000-0002-3542-2938\")), person(\"Timothy A.\", \"Davis\", role = \"ctb\", comment = c(ORCID = \"0000-0001-7614-6899\", \"SuiteSparse libraries\", \"collaborators listed in dir(system.file(\\\"doc\\\", \\\"SuiteSparse\\\", package=\\\"Matrix\\\"), pattern=\\\"License\\\", full.names=TRUE, recursive=TRUE)\")), person(\"George\", \"Karypis\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2753-1437\", \"METIS library\", \"Copyright: Regents of the University of Minnesota\")), person(\"Jason\", \"Riedy\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4345-4200\", \"GNU Octave's condest() and onenormest()\", \"Copyright: Regents of the University of California\")), person(\"Jens\", \"Oehlschlägel\", role = \"ctb\", comment = \"initial nearPD()\"), person(\"R Core Team\", role = \"ctb\", comment = c(ROR = \"02zz1nj61\", \"base R's matrix implementation\")))",
+ "Depends": [
+ "R (>= 4.4)",
+ "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",
+ "Author": "Douglas Bates [aut] (), Martin Maechler [aut, cre] (), Mikael Jagan [aut] (), Timothy A. Davis [ctb] (, SuiteSparse libraries, collaborators listed in dir(system.file(\"doc\", \"SuiteSparse\", package=\"Matrix\"), pattern=\"License\", full.names=TRUE, recursive=TRUE)), George Karypis [ctb] (, METIS library, Copyright: Regents of the University of Minnesota), Jason Riedy [ctb] (, GNU Octave's condest() and onenormest(), Copyright: Regents of the University of California), Jens Oehlschlägel [ctb] (initial nearPD()), R Core Team [ctb] (02zz1nj61, base R's matrix implementation)",
+ "Maintainer": "Martin Maechler ",
+ "Repository": "CRAN"
+ },
+ "R.cache": {
+ "Package": "R.cache",
+ "Version": "0.16.0",
+ "Source": "Repository",
+ "Depends": [
+ "R (>= 2.14.0)"
+ ],
+ "Imports": [
+ "utils",
+ "R.methodsS3 (>= 1.8.1)",
+ "R.oo (>= 1.24.0)",
+ "R.utils (>= 2.10.1)",
+ "digest (>= 0.6.13)"
+ ],
+ "Title": "Fast and Light-Weight Caching (Memoization) of Objects and Results to Speed Up Computations",
+ "Authors@R": "c(person(\"Henrik\", \"Bengtsson\", role=c(\"aut\", \"cre\", \"cph\"), email = \"henrikb@braju.com\"))",
+ "Author": "Henrik Bengtsson [aut, cre, cph]",
+ "Maintainer": "Henrik Bengtsson ",
+ "Description": "Memoization can be used to speed up repetitive and computational expensive function calls. The first time a function that implements memoization is called the results are stored in a cache memory. The next time the function is called with the same set of parameters, the results are momentarily retrieved from the cache avoiding repeating the calculations. With this package, any R object can be cached in a key-value storage where the key can be an arbitrary set of R objects. The cache memory is persistent (on the file system).",
+ "License": "LGPL (>= 2.1)",
+ "LazyLoad": "TRUE",
+ "URL": "https://github.com/HenrikBengtsson/R.cache",
+ "BugReports": "https://github.com/HenrikBengtsson/R.cache/issues",
+ "RoxygenNote": "7.2.1",
+ "NeedsCompilation": "no",
+ "Repository": "CRAN"
+ },
+ "R.methodsS3": {
+ "Package": "R.methodsS3",
+ "Version": "1.8.2",
+ "Source": "Repository",
+ "Depends": [
+ "R (>= 2.13.0)"
+ ],
+ "Imports": [
+ "utils"
+ ],
+ "Suggests": [
+ "codetools"
+ ],
+ "Title": "S3 Methods Simplified",
+ "Authors@R": "c(person(\"Henrik\", \"Bengtsson\", role=c(\"aut\", \"cre\", \"cph\"), email = \"henrikb@braju.com\"))",
+ "Author": "Henrik Bengtsson [aut, cre, cph]",
+ "Maintainer": "Henrik Bengtsson ",
+ "Description": "Methods that simplify the setup of S3 generic functions and S3 methods. Major effort has been made in making definition of methods as simple as possible with a minimum of maintenance for package developers. For example, generic functions are created automatically, if missing, and naming conflict are automatically solved, if possible. The method setMethodS3() is a good start for those who in the future may want to migrate to S4. This is a cross-platform package implemented in pure R that generates standard S3 methods.",
+ "License": "LGPL (>= 2.1)",
+ "LazyLoad": "TRUE",
+ "URL": "https://github.com/HenrikBengtsson/R.methodsS3",
+ "BugReports": "https://github.com/HenrikBengtsson/R.methodsS3/issues",
+ "NeedsCompilation": "no",
+ "Repository": "CRAN"
+ },
+ "R.oo": {
+ "Package": "R.oo",
+ "Version": "1.27.0",
+ "Source": "Repository",
+ "Depends": [
+ "R (>= 2.13.0)",
+ "R.methodsS3 (>= 1.8.2)"
+ ],
+ "Imports": [
+ "methods",
+ "utils"
+ ],
+ "Suggests": [
+ "tools"
+ ],
+ "Title": "R Object-Oriented Programming with or without References",
+ "Authors@R": "c(person(\"Henrik\", \"Bengtsson\", role=c(\"aut\", \"cre\", \"cph\"), email = \"henrikb@braju.com\"))",
+ "Author": "Henrik Bengtsson [aut, cre, cph]",
+ "Maintainer": "Henrik Bengtsson ",
+ "Description": "Methods and classes for object-oriented programming in R with or without references. Large effort has been made on making definition of methods as simple as possible with a minimum of maintenance for package developers. The package has been developed since 2001 and is now considered very stable. This is a cross-platform package implemented in pure R that defines standard S3 classes without any tricks.",
+ "License": "LGPL (>= 2.1)",
+ "LazyLoad": "TRUE",
+ "URL": "https://github.com/HenrikBengtsson/R.oo",
+ "BugReports": "https://github.com/HenrikBengtsson/R.oo/issues",
+ "NeedsCompilation": "no",
+ "Repository": "CRAN"
+ },
+ "R.utils": {
+ "Package": "R.utils",
+ "Version": "2.12.3",
+ "Source": "Repository",
+ "Depends": [
+ "R (>= 2.14.0)",
+ "R.oo"
+ ],
+ "Imports": [
+ "methods",
+ "utils",
+ "tools",
+ "R.methodsS3"
+ ],
+ "Suggests": [
+ "datasets",
+ "digest (>= 0.6.10)"
+ ],
+ "Title": "Various Programming Utilities",
+ "Authors@R": "c(person(\"Henrik\", \"Bengtsson\", role=c(\"aut\", \"cre\", \"cph\"), email = \"henrikb@braju.com\"))",
+ "Author": "Henrik Bengtsson [aut, cre, cph]",
+ "Maintainer": "Henrik Bengtsson ",
+ "Description": "Utility functions useful when programming and developing R packages.",
+ "License": "LGPL (>= 2.1)",
+ "LazyLoad": "TRUE",
+ "URL": "https://henrikbengtsson.github.io/R.utils/, https://github.com/HenrikBengtsson/R.utils",
+ "BugReports": "https://github.com/HenrikBengtsson/R.utils/issues",
+ "NeedsCompilation": "no",
+ "Repository": "CRAN"
+ },
+ "R6": {
+ "Package": "R6",
+ "Version": "2.6.0",
+ "Source": "Repository",
+ "Title": "Encapsulated Classes with Reference Semantics",
+ "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "Creates classes with reference semantics, similar to R's built-in reference classes. Compared to reference classes, R6 classes are simpler and lighter-weight, and they are not built on S4 classes so they do not require the methods package. These classes allow public and private members, and they support inheritance, even when the 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, scales",
+ "Config/testthat/edition": "3",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.3.2",
+ "NeedsCompilation": "no",
+ "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Winston Chang ",
+ "Repository": "CRAN"
+ },
+ "RColorBrewer": {
+ "Package": "RColorBrewer",
+ "Version": "1.1-3",
+ "Source": "Repository",
+ "Date": "2022-04-03",
+ "Title": "ColorBrewer Palettes",
+ "Authors@R": "c(person(given = \"Erich\", family = \"Neuwirth\", role = c(\"aut\", \"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) designed by Cynthia Brewer as described at http://colorbrewer2.org.",
+ "License": "Apache License 2.0",
+ "NeedsCompilation": "no",
+ "Repository": "RSPM",
+ "Encoding": "UTF-8"
+ },
+ "Rcpp": {
+ "Package": "Rcpp",
+ "Version": "1.0.14",
+ "Source": "Repository",
+ "Title": "Seamless R and C++ Integration",
+ "Date": "2025-01-11",
+ "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Romain\", \"Francois\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"JJ\", \"Allaire\", role = \"aut\", comment = c(ORCID = \"0000-0003-0174-9868\")), person(\"Kevin\", \"Ushey\", role = \"aut\", comment = c(ORCID = \"0000-0003-2880-7407\")), person(\"Qiang\", \"Kou\", role = \"aut\", comment = c(ORCID = \"0000-0001-6786-5453\")), person(\"Nathan\", \"Russell\", role = \"aut\"), person(\"Iñaki\", \"Ucar\", role = \"aut\", comment = c(ORCID = \"0000-0001-6403-5550\")), person(\"Doug\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"John\", \"Chambers\", role = \"aut\"))",
+ "Description": "The 'Rcpp' package provides R functions as well as C++ classes which offer a seamless integration of R and C++. Many R data types and objects can be mapped back and forth to C++ equivalents which facilitates both writing of new code as well as easier integration of third-party libraries. Documentation about 'Rcpp' is provided by several vignettes included in this package, via the 'Rcpp Gallery' site at , the paper by Eddelbuettel and Francois (2011, ), the book by Eddelbuettel (2013, ) and the paper by Eddelbuettel and Balamuta (2018, ); see 'citation(\"Rcpp\")' for details.",
+ "Imports": [
+ "methods",
+ "utils"
+ ],
+ "Suggests": [
+ "tinytest",
+ "inline",
+ "rbenchmark",
+ "pkgKitten (>= 0.1.2)"
+ ],
+ "URL": "https://www.rcpp.org, https://dirk.eddelbuettel.com/code/rcpp.html, https://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",
+ "Author": "Dirk Eddelbuettel [aut, cre] (), Romain Francois [aut] (), JJ Allaire [aut] (), Kevin Ushey [aut] (), Qiang Kou [aut] (), Nathan Russell [aut], Iñaki Ucar [aut] (), Doug Bates [aut] (), John Chambers [aut]",
+ "Maintainer": "Dirk Eddelbuettel ",
+ "Repository": "CRAN"
+ },
+ "arrow": {
+ "Package": "arrow",
+ "Version": "17.0.0.1",
+ "Source": "Repository",
+ "Title": "Integration to 'Apache' 'Arrow'",
+ "Authors@R": "c( person(\"Neal\", \"Richardson\", email = \"neal.p.richardson@gmail.com\", role = c(\"aut\")), person(\"Ian\", \"Cook\", email = \"ianmcook@gmail.com\", role = c(\"aut\")), person(\"Nic\", \"Crane\", email = \"thisisnic@gmail.com\", role = c(\"aut\")), person(\"Dewey\", \"Dunnington\", role = c(\"aut\"), email = \"dewey@fishandwhistle.net\", comment = c(ORCID = \"0000-0002-9415-4582\")), person(\"Romain\", \"Fran\\u00e7ois\", role = c(\"aut\"), comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Jonathan\", \"Keane\", email = \"jkeane@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Drago\\u0219\", \"Moldovan-Gr\\u00fcnfeld\", email = \"dragos.mold@gmail.com\", role = c(\"aut\")), person(\"Jeroen\", \"Ooms\", email = \"jeroen@berkeley.edu\", role = c(\"aut\")), person(\"Jacob\", \"Wujciak-Jens\", email = \"jacob@wujciak.de\", role = c(\"aut\")), person(\"Javier\", \"Luraschi\", email = \"javier@rstudio.com\", role = c(\"ctb\")), person(\"Karl\", \"Dunkle Werner\", email = \"karldw@users.noreply.github.com\", role = c(\"ctb\"), comment = c(ORCID = \"0000-0003-0523-7309\")), person(\"Jeffrey\", \"Wong\", email = \"jeffreyw@netflix.com\", role = c(\"ctb\")), person(\"Apache Arrow\", email = \"dev@arrow.apache.org\", role = c(\"aut\", \"cph\")) )",
+ "Description": "'Apache' 'Arrow' is a cross-language development platform for in-memory data. It specifies a standardized language-independent columnar memory format for flat and hierarchical data, organized for efficient analytic operations on modern hardware. This package provides an interface to the 'Arrow C++' library.",
+ "Depends": [
+ "R (>= 4.0)"
+ ],
+ "License": "Apache License (>= 2.0)",
+ "URL": "https://github.com/apache/arrow/, https://arrow.apache.org/docs/r/",
+ "BugReports": "https://github.com/apache/arrow/issues",
+ "Encoding": "UTF-8",
+ "Language": "en-US",
+ "SystemRequirements": "C++17; for AWS S3 support on Linux, libcurl and openssl (optional); cmake >= 3.16 (build-time only, and only for full source build)",
+ "Biarch": "true",
+ "Imports": [
+ "assertthat",
+ "bit64 (>= 0.9-7)",
+ "glue",
+ "methods",
+ "purrr",
+ "R6",
+ "rlang (>= 1.0.0)",
+ "stats",
+ "tidyselect (>= 1.0.0)",
+ "utils",
+ "vctrs"
+ ],
+ "RoxygenNote": "7.3.1",
+ "Config/testthat/edition": "3",
+ "Config/build/bootstrap": "TRUE",
+ "Suggests": [
+ "blob",
+ "curl",
+ "cli",
+ "DBI",
+ "dbplyr",
+ "decor",
+ "distro",
+ "dplyr",
+ "duckdb (>= 0.2.8)",
+ "hms",
+ "jsonlite",
+ "knitr",
+ "lubridate",
+ "pillar",
+ "pkgload",
+ "reticulate",
+ "rmarkdown",
+ "stringi",
+ "stringr",
+ "sys",
+ "testthat (>= 3.1.0)",
+ "tibble",
+ "tzdb",
+ "withr"
+ ],
+ "LinkingTo": [
+ "cpp11 (>= 0.4.2)"
+ ],
+ "Collate": "'arrowExports.R' 'enums.R' 'arrow-object.R' 'type.R' 'array-data.R' 'arrow-datum.R' 'array.R' 'arrow-info.R' 'arrow-package.R' 'arrow-tabular.R' 'buffer.R' 'chunked-array.R' 'io.R' 'compression.R' 'scalar.R' 'compute.R' 'config.R' 'csv.R' 'dataset.R' 'dataset-factory.R' 'dataset-format.R' 'dataset-partition.R' 'dataset-scan.R' 'dataset-write.R' 'dictionary.R' 'dplyr-across.R' 'dplyr-arrange.R' 'dplyr-by.R' 'dplyr-collect.R' 'dplyr-count.R' 'dplyr-datetime-helpers.R' 'dplyr-distinct.R' 'dplyr-eval.R' 'dplyr-filter.R' 'dplyr-funcs-agg.R' 'dplyr-funcs-augmented.R' 'dplyr-funcs-conditional.R' 'dplyr-funcs-datetime.R' 'dplyr-funcs-doc.R' 'dplyr-funcs-math.R' 'dplyr-funcs-simple.R' 'dplyr-funcs-string.R' 'dplyr-funcs-type.R' 'expression.R' 'dplyr-funcs.R' 'dplyr-glimpse.R' 'dplyr-group-by.R' 'dplyr-join.R' 'dplyr-mutate.R' 'dplyr-select.R' 'dplyr-slice.R' 'dplyr-summarize.R' 'dplyr-union.R' 'record-batch.R' 'table.R' 'dplyr.R' 'duckdb.R' 'extension.R' 'feather.R' 'field.R' 'filesystem.R' 'flight.R' 'install-arrow.R' 'ipc-stream.R' 'json.R' 'memory-pool.R' 'message.R' 'metadata.R' 'parquet.R' 'python.R' 'query-engine.R' 'record-batch-reader.R' 'record-batch-writer.R' 'reexports-bit64.R' 'reexports-tidyselect.R' 'schema.R' 'udf.R' 'util.R'",
+ "NeedsCompilation": "yes",
+ "Author": "Neal Richardson [aut], Ian Cook [aut], Nic Crane [aut], Dewey Dunnington [aut] (), Romain François [aut] (), Jonathan Keane [aut, cre], Dragoș Moldovan-Grünfeld [aut], Jeroen Ooms [aut], Jacob Wujciak-Jens [aut], Javier Luraschi [ctb], Karl Dunkle Werner [ctb] (), Jeffrey Wong [ctb], Apache Arrow [aut, cph]",
+ "Maintainer": "Jonathan Keane ",
+ "Repository": "RSPM"
+ },
+ "askpass": {
+ "Package": "askpass",
+ "Version": "1.2.1",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Password Entry Utilities for R, Git, and SSH",
+ "Authors@R": "person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\"))",
+ "Description": "Cross-platform utilities for prompting the user for credentials or a passphrase, for example to authenticate with a server or read a protected key. Includes native programs for MacOS and Windows, hence no 'tcltk' is required. Password entry can be invoked in two different ways: directly from R via the askpass() function, or indirectly as password-entry back-end for 'ssh-agent' or 'git-credential' via the SSH_ASKPASS and GIT_ASKPASS environment variables. Thereby the user can be prompted for credentials or a passphrase if needed when R calls out to git or ssh.",
+ "License": "MIT + file LICENSE",
+ "URL": "https://r-lib.r-universe.dev/askpass",
+ "BugReports": "https://github.com/r-lib/askpass/issues",
+ "Encoding": "UTF-8",
+ "Imports": [
+ "sys (>= 2.1)"
+ ],
+ "RoxygenNote": "7.2.3",
+ "Suggests": [
+ "testthat"
+ ],
+ "Language": "en-US",
+ "NeedsCompilation": "yes",
+ "Author": "Jeroen Ooms [aut, cre] ()",
+ "Maintainer": "Jeroen Ooms ",
+ "Repository": "RSPM"
+ },
+ "assertthat": {
+ "Package": "assertthat",
+ "Version": "0.2.1",
+ "Source": "Repository",
+ "Title": "Easy Pre and Post Assertions",
+ "Authors@R": "person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", c(\"aut\", \"cre\"))",
+ "Description": "An extension to stopifnot() that makes it easy to declare the pre and post conditions that you code should satisfy, while also producing friendly error messages so that your users know what's gone wrong.",
+ "License": "GPL-3",
+ "Imports": [
+ "tools"
+ ],
+ "Suggests": [
+ "testthat",
+ "covr"
+ ],
+ "RoxygenNote": "6.0.1",
+ "Collate": "'assert-that.r' 'on-failure.r' 'assertions-file.r' 'assertions-scalar.R' 'assertions.r' 'base.r' 'base-comparison.r' 'base-is.r' 'base-logical.r' 'base-misc.r' 'utils.r' 'validate-that.R'",
+ "NeedsCompilation": "no",
+ "Author": "Hadley Wickham [aut, cre]",
+ "Maintainer": "Hadley Wickham ",
+ "Repository": "RSPM",
+ "Encoding": "UTF-8"
+ },
+ "backports": {
+ "Package": "backports",
+ "Version": "1.5.0",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Reimplementations of Functions Introduced Since R-3.0.0",
+ "Authors@R": "c( person(\"Michel\", \"Lang\", NULL, \"michellang@gmail.com\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0001-9754-0393\")), person(\"Duncan\", \"Murdoch\", NULL, \"murdoch.duncan@gmail.com\", role = c(\"aut\")), person(\"R Core Team\", role = \"aut\"))",
+ "Maintainer": "Michel Lang ",
+ "Description": "Functions introduced or changed since R v3.0.0 are re-implemented in this package. The backports are conditionally exported in order to let R resolve the function name to either the implemented backport, or the respective base version, if available. Package developers can make use of new functions or arguments by selectively importing specific backports to support older installations.",
+ "URL": "https://github.com/r-lib/backports",
+ "BugReports": "https://github.com/r-lib/backports/issues",
+ "License": "GPL-2 | GPL-3",
+ "NeedsCompilation": "yes",
+ "ByteCompile": "yes",
+ "Depends": [
+ "R (>= 3.0.0)"
+ ],
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.3.1",
+ "Author": "Michel Lang [cre, aut] (), Duncan Murdoch [aut], R Core Team [aut]",
+ "Repository": "RSPM"
+ },
+ "base64enc": {
+ "Package": "base64enc",
+ "Version": "0.1-3",
+ "Source": "Repository",
+ "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",
+ "Repository": "RSPM",
+ "Encoding": "UTF-8"
+ },
+ "bit": {
+ "Package": "bit",
+ "Version": "4.5.0.1",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Classes and Methods for Fast Memory-Efficient Boolean Selections",
+ "Date": "2024-09-17",
+ "Authors@R": "c(person(given = \"Jens\", family = \"Oehlschlägel\", role = c(\"aut\", \"cre\"), email = \"Jens.Oehlschlaegel@truecluster.com\"), person(given = \"Brian\", family = \"Ripley\", role = \"ctb\"))",
+ "Author": "Jens Oehlschlägel [aut, cre], Brian Ripley [ctb]",
+ "Maintainer": "Jens Oehlschlägel ",
+ "Depends": [
+ "R (>= 3.4.0)"
+ ],
+ "Suggests": [
+ "testthat (>= 0.11.0)",
+ "roxygen2",
+ "knitr",
+ "markdown",
+ "rmarkdown",
+ "microbenchmark",
+ "bit64 (>= 4.0.0)",
+ "ff (>= 4.0.0)"
+ ],
+ "Description": "Provided are classes for boolean and skewed boolean vectors, fast boolean methods, fast unique and non-unique integer sorting, fast set operations on sorted and unsorted sets of integers, and foundations for ff (range index, compression, chunked processing).",
+ "License": "GPL-2 | GPL-3",
+ "LazyLoad": "yes",
+ "ByteCompile": "yes",
+ "Encoding": "UTF-8",
+ "URL": "https://github.com/truecluster/bit",
+ "VignetteBuilder": "knitr, rmarkdown",
+ "RoxygenNote": "7.3.2",
+ "NeedsCompilation": "yes",
+ "Repository": "CRAN"
+ },
+ "bit64": {
+ "Package": "bit64",
+ "Version": "4.6.0-1",
+ "Source": "Repository",
+ "Title": "A S3 Class for Vectors of 64bit Integers",
+ "Authors@R": "c( person(\"Michael\", \"Chirico\", email = \"michaelchirico4@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Jens\", \"Oehlschlägel\", role = \"aut\"), person(\"Leonardo\", \"Silvestri\", role = \"ctb\"), person(\"Ofek\", \"Shilon\", role = \"ctb\") )",
+ "Depends": [
+ "R (>= 3.4.0)",
+ "bit (>= 4.0.0)"
+ ],
+ "Description": "Package 'bit64' provides serializable S3 atomic 64bit (signed) integers. These are useful for handling database keys and exact counting in +-2^63. WARNING: do not use them as replacement for 32bit integers, integer64 are not supported for subscripting by R-core and they have different semantics when combined with double, e.g. integer64 + double => integer64. Class integer64 can be used in vectors, matrices, arrays and data.frames. Methods are available for coercion from and to logicals, integers, doubles, characters and factors as well as many elementwise and summary functions. Many fast algorithmic operations such as 'match' and 'order' support inter- active data exploration and manipulation and optionally leverage caching.",
+ "License": "GPL-2 | GPL-3",
+ "LazyLoad": "yes",
+ "ByteCompile": "yes",
+ "URL": "https://github.com/r-lib/bit64",
+ "Encoding": "UTF-8",
+ "Imports": [
+ "graphics",
+ "methods",
+ "stats",
+ "utils"
+ ],
+ "Suggests": [
+ "testthat (>= 3.0.3)",
+ "withr"
+ ],
+ "Config/testthat/edition": "3",
+ "Config/needs/development": "testthat",
+ "RoxygenNote": "7.3.2",
+ "NeedsCompilation": "yes",
+ "Author": "Michael Chirico [aut, cre], Jens Oehlschlägel [aut], Leonardo Silvestri [ctb], Ofek Shilon [ctb]",
+ "Maintainer": "Michael Chirico ",
+ "Repository": "CRAN"
+ },
+ "boot": {
+ "Package": "boot",
+ "Version": "1.3-31",
+ "Source": "Repository",
+ "Priority": "recommended",
+ "Date": "2024-08-28",
+ "Authors@R": "c(person(\"Angelo\", \"Canty\", role = \"aut\", email = \"cantya@mcmaster.ca\", comment = \"author of original code for S\"), person(\"Brian\", \"Ripley\", role = c(\"aut\", \"trl\"), email = \"ripley@stats.ox.ac.uk\", comment = \"conversion to R, maintainer 1999--2022, author of parallel support\"), person(\"Alessandra R.\", \"Brazzale\", role = c(\"ctb\", \"cre\"), email = \"brazzale@stat.unipd.it\", comment = \"minor bug fixes\"))",
+ "Maintainer": "Alessandra R. Brazzale ",
+ "Note": "Maintainers are not available to give advice on using a package they did not author.",
+ "Description": "Functions and datasets for bootstrapping from the book \"Bootstrap Methods and Their Application\" by A. C. Davison and 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",
+ "Author": "Angelo Canty [aut] (author of original code for S), Brian Ripley [aut, trl] (conversion to R, maintainer 1999--2022, author of parallel support), Alessandra R. Brazzale [ctb, cre] (minor bug fixes)",
+ "Repository": "RSPM",
+ "Encoding": "UTF-8"
+ },
+ "bslib": {
+ "Package": "bslib",
+ "Version": "0.9.0",
+ "Source": "Repository",
+ "Title": "Custom 'Bootstrap' 'Sass' Themes for 'shiny' and 'rmarkdown'",
+ "Authors@R": "c( person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Garrick\", \"Aden-Buie\", , \"garrick@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-7111-0077\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Javi\", \"Aguilar\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap colorpicker library\"), person(\"Thomas\", \"Park\", role = c(\"ctb\", \"cph\"), comment = \"Bootswatch library\"), person(, \"PayPal\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap accessibility plugin\") )",
+ "Description": "Simplifies custom 'CSS' styling of both 'shiny' and 'rmarkdown' via 'Bootstrap' 'Sass'. Supports 'Bootstrap' 3, 4 and 5 as well as their various 'Bootswatch' themes. An interactive widget is 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 (>= 0.5.8)",
+ "jquerylib (>= 0.1.3)",
+ "jsonlite",
+ "lifecycle",
+ "memoise (>= 2.0.1)",
+ "mime",
+ "rlang",
+ "sass (>= 0.4.9)"
+ ],
+ "Suggests": [
+ "bsicons",
+ "curl",
+ "fontawesome",
+ "future",
+ "ggplot2",
+ "knitr",
+ "magrittr",
+ "rappdirs",
+ "rmarkdown (>= 2.7)",
+ "shiny (> 1.8.1)",
+ "testthat",
+ "thematic",
+ "tools",
+ "utils",
+ "withr",
+ "yaml"
+ ],
+ "Config/Needs/deploy": "BH, chiflights22, colourpicker, commonmark, cpp11, cpsievert/chiflights22, cpsievert/histoslider, dplyr, DT, ggplot2, ggridges, gt, hexbin, histoslider, htmlwidgets, lattice, leaflet, lubridate, markdown, modelr, plotly, reactable, reshape2, rprojroot, rsconnect, rstudio/shiny, scales, styler, tibble",
+ "Config/Needs/routine": "chromote, desc, renv",
+ "Config/Needs/website": "brio, crosstalk, dplyr, DT, ggplot2, glue, htmlwidgets, leaflet, lorem, palmerpenguins, plotly, purrr, rprojroot, rstudio/htmltools, scales, stringr, tidyr, webshot2",
+ "Config/testthat/edition": "3",
+ "Config/testthat/parallel": "true",
+ "Config/testthat/start-first": "zzzz-bs-sass, fonts, zzz-precompile, theme-*, rmd-*",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.3.2",
+ "Collate": "'accordion.R' 'breakpoints.R' 'bs-current-theme.R' 'bs-dependencies.R' 'bs-global.R' 'bs-remove.R' 'bs-theme-layers.R' 'bs-theme-preset-bootswatch.R' 'bs-theme-preset-brand.R' 'bs-theme-preset-builtin.R' 'bs-theme-preset.R' 'utils.R' 'bs-theme-preview.R' 'bs-theme-update.R' 'bs-theme.R' 'bslib-package.R' 'buttons.R' 'card.R' 'deprecated.R' 'files.R' 'fill.R' 'imports.R' 'input-dark-mode.R' 'input-switch.R' 'layout.R' 'nav-items.R' 'nav-update.R' 'navbar_options.R' 'navs-legacy.R' 'navs.R' 'onLoad.R' 'page.R' 'popover.R' 'precompiled.R' 'print.R' 'shiny-devmode.R' 'sidebar.R' 'staticimports.R' 'tooltip.R' 'utils-deps.R' 'utils-shiny.R' 'utils-tags.R' 'value-box.R' 'version-default.R' 'versions.R'",
+ "NeedsCompilation": "no",
+ "Author": "Carson Sievert [aut, cre] (), Joe Cheng [aut], Garrick Aden-Buie [aut] (), Posit Software, PBC [cph, fnd], Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Javi Aguilar [ctb, cph] (Bootstrap colorpicker library), Thomas Park [ctb, cph] (Bootswatch library), PayPal [ctb, cph] (Bootstrap accessibility plugin)",
+ "Maintainer": "Carson Sievert ",
+ "Repository": "CRAN"
+ },
+ "cachem": {
+ "Package": "cachem",
+ "Version": "1.1.0",
+ "Source": "Repository",
+ "Title": "Cache R Objects with Automatic Pruning",
+ "Description": "Key-value stores with automatic pruning. Caches can limit either their total size or the age of the oldest object (or both), automatically pruning objects to maintain the constraints.",
+ "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", c(\"aut\", \"cre\")), 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",
+ "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Winston Chang ",
+ "Repository": "RSPM"
+ },
+ "callr": {
+ "Package": "callr",
+ "Version": "3.7.6",
+ "Source": "Repository",
+ "Title": "Call R from R",
+ "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\", \"cph\"), comment = c(ORCID = \"0000-0001-7098-9676\")), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"Ascent Digital Services\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "It is sometimes useful to perform a computation in a separate R process, without affecting the current R process at all. This packages does exactly that.",
+ "License": "MIT + file LICENSE",
+ "URL": "https://callr.r-lib.org, https://github.com/r-lib/callr",
+ "BugReports": "https://github.com/r-lib/callr/issues",
+ "Depends": [
+ "R (>= 3.4)"
+ ],
+ "Imports": [
+ "processx (>= 3.6.1)",
+ "R6",
+ "utils"
+ ],
+ "Suggests": [
+ "asciicast (>= 2.3.1)",
+ "cli (>= 1.1.0)",
+ "mockery",
+ "ps",
+ "rprojroot",
+ "spelling",
+ "testthat (>= 3.2.0)",
+ "withr (>= 2.3.0)"
+ ],
+ "Config/Needs/website": "r-lib/asciicast, glue, htmlwidgets, igraph, tibble, tidyverse/tidytemplate",
+ "Config/testthat/edition": "3",
+ "Encoding": "UTF-8",
+ "Language": "en-US",
+ "RoxygenNote": "7.3.1.9000",
+ "NeedsCompilation": "no",
+ "Author": "Gábor Csárdi [aut, cre, cph] (), Winston Chang [aut], Posit Software, PBC [cph, fnd], Ascent Digital Services [cph, fnd]",
+ "Maintainer": "Gábor Csárdi ",
+ "Repository": "RSPM"
+ },
+ "cellranger": {
+ "Package": "cellranger",
+ "Version": "1.1.0",
+ "Source": "Repository",
+ "Title": "Translate Spreadsheet Cell Ranges to Rows and Columns",
+ "Authors@R": "c( person(\"Jennifer\", \"Bryan\", , \"jenny@stat.ubc.ca\", c(\"cre\", \"aut\")), person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", \"ctb\") )",
+ "Description": "Helper functions to work with spreadsheets and the \"A1:D10\" style 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",
+ "Author": "Jennifer Bryan [cre, aut], Hadley Wickham [ctb]",
+ "Maintainer": "Jennifer Bryan ",
+ "Repository": "RSPM",
+ "Encoding": "UTF-8"
+ },
+ "checkmate": {
+ "Package": "checkmate",
+ "Version": "2.3.2",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Fast and Versatile Argument Checks",
+ "Description": "Tests and assertions to perform frequent argument checks. A substantial part of the package was written in C to minimize any worries about execution time overhead.",
+ "Authors@R": "c( person(\"Michel\", \"Lang\", NULL, \"michellang@gmail.com\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0001-9754-0393\")), person(\"Bernd\", \"Bischl\", NULL, \"bernd_bischl@gmx.net\", role = \"ctb\"), person(\"Dénes\", \"Tóth\", NULL, \"toth.denes@kogentum.hu\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4262-3217\")) )",
+ "URL": "https://mllg.github.io/checkmate/, https://github.com/mllg/checkmate",
+ "URLNote": "https://github.com/mllg/checkmate",
+ "BugReports": "https://github.com/mllg/checkmate/issues",
+ "NeedsCompilation": "yes",
+ "ByteCompile": "yes",
+ "Encoding": "UTF-8",
+ "Depends": [
+ "R (>= 3.0.0)"
+ ],
+ "Imports": [
+ "backports (>= 1.1.0)",
+ "utils"
+ ],
+ "Suggests": [
+ "R6",
+ "fastmatch",
+ "data.table (>= 1.9.8)",
+ "devtools",
+ "ggplot2",
+ "knitr",
+ "magrittr",
+ "microbenchmark",
+ "rmarkdown",
+ "testthat (>= 3.0.4)",
+ "tinytest (>= 1.1.0)",
+ "tibble"
+ ],
+ "License": "BSD_3_clause + file LICENSE",
+ "VignetteBuilder": "knitr",
+ "RoxygenNote": "7.3.2",
+ "Collate": "'AssertCollection.R' 'allMissing.R' 'anyInfinite.R' 'anyMissing.R' 'anyNaN.R' 'asInteger.R' 'assert.R' 'helper.R' 'makeExpectation.R' 'makeTest.R' 'makeAssertion.R' 'checkAccess.R' 'checkArray.R' 'checkAtomic.R' 'checkAtomicVector.R' 'checkCharacter.R' 'checkChoice.R' 'checkClass.R' 'checkComplex.R' 'checkCount.R' 'checkDataFrame.R' 'checkDataTable.R' 'checkDate.R' 'checkDirectoryExists.R' 'checkDisjunct.R' 'checkDouble.R' 'checkEnvironment.R' 'checkFALSE.R' 'checkFactor.R' 'checkFileExists.R' 'checkFlag.R' 'checkFormula.R' 'checkFunction.R' 'checkInt.R' 'checkInteger.R' 'checkIntegerish.R' 'checkList.R' 'checkLogical.R' 'checkMatrix.R' 'checkMultiClass.R' 'checkNamed.R' 'checkNames.R' 'checkNull.R' 'checkNumber.R' 'checkNumeric.R' 'checkOS.R' 'checkPOSIXct.R' 'checkPathForOutput.R' 'checkPermutation.R' 'checkR6.R' 'checkRaw.R' 'checkScalar.R' 'checkScalarNA.R' 'checkSetEqual.R' 'checkString.R' 'checkSubset.R' 'checkTRUE.R' 'checkTibble.R' 'checkVector.R' 'coalesce.R' 'isIntegerish.R' 'matchArg.R' 'qassert.R' 'qassertr.R' 'vname.R' 'wfwl.R' 'zzz.R'",
+ "Author": "Michel Lang [cre, aut] (), Bernd Bischl [ctb], Dénes Tóth [ctb] ()",
+ "Maintainer": "Michel Lang ",
+ "Repository": "RSPM"
+ },
+ "class": {
+ "Package": "class",
+ "Version": "7.3-23",
+ "Source": "Repository",
+ "Priority": "recommended",
+ "Date": "2025-01-01",
+ "Depends": [
+ "R (>= 3.0.0)",
+ "stats",
+ "utils"
+ ],
+ "Imports": [
+ "MASS"
+ ],
+ "Authors@R": "c(person(\"Brian\", \"Ripley\", role = c(\"aut\", \"cre\", \"cph\"), email = \"Brian.Ripley@R-project.org\"), person(\"William\", \"Venables\", role = \"cph\"))",
+ "Description": "Various functions for classification, including k-nearest neighbour, Learning Vector Quantization and Self-Organizing Maps.",
+ "Title": "Functions for Classification",
+ "ByteCompile": "yes",
+ "License": "GPL-2 | GPL-3",
+ "URL": "http://www.stats.ox.ac.uk/pub/MASS4/",
+ "NeedsCompilation": "yes",
+ "Author": "Brian Ripley [aut, cre, cph], William Venables [cph]",
+ "Maintainer": "Brian Ripley ",
+ "Repository": "CRAN"
+ },
+ "cli": {
+ "Package": "cli",
+ "Version": "3.6.4",
+ "Source": "Repository",
+ "Title": "Helpers for Developing Command Line Interfaces",
+ "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"gabor@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Kirill\", \"Müller\", role = \"ctb\"), person(\"Salim\", \"Brüggemann\", , \"salim-b@pm.me\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "A suite of tools to build attractive command line interfaces ('CLIs'), from semantic elements: headings, lists, alerts, paragraphs, etc. Supports custom themes via a 'CSS'-like language. It also contains a number of lower level 'CLI' elements: rules, boxes, trees, and 'Unicode' symbols with 'ASCII' alternatives. It support ANSI 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",
+ "htmltools",
+ "htmlwidgets",
+ "knitr",
+ "methods",
+ "processx",
+ "ps (>= 1.3.4.9000)",
+ "rlang (>= 1.0.2.9003)",
+ "rmarkdown",
+ "rprojroot",
+ "rstudioapi",
+ "testthat (>= 3.2.0)",
+ "tibble",
+ "whoami",
+ "withr"
+ ],
+ "Config/Needs/website": "r-lib/asciicast, bench, brio, cpp11, decor, desc, fansi, prettyunits, sessioninfo, tidyverse/tidytemplate, usethis, vctrs",
+ "Config/testthat/edition": "3",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.3.2",
+ "NeedsCompilation": "yes",
+ "Author": "Gábor Csárdi [aut, cre], Hadley Wickham [ctb], Kirill Müller [ctb], Salim Brüggemann [ctb] (), Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Gábor Csárdi ",
+ "Repository": "CRAN"
+ },
+ "clipr": {
+ "Package": "clipr",
+ "Version": "0.8.0",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Read and Write from the System Clipboard",
+ "Authors@R": "c( person(\"Matthew\", \"Lincoln\", , \"matthew.d.lincoln@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4387-3384\")), person(\"Louis\", \"Maddox\", role = \"ctb\"), person(\"Steve\", \"Simpson\", role = \"ctb\"), person(\"Jennifer\", \"Bryan\", role = \"ctb\") )",
+ "Description": "Simple utility functions to read from and write to the Windows, OS X, and X11 clipboards.",
+ "License": "GPL-3",
+ "URL": "https://github.com/mdlincoln/clipr, http://matthewlincoln.net/clipr/",
+ "BugReports": "https://github.com/mdlincoln/clipr/issues",
+ "Imports": [
+ "utils"
+ ],
+ "Suggests": [
+ "covr",
+ "knitr",
+ "rmarkdown",
+ "rstudioapi (>= 0.5)",
+ "testthat (>= 2.0.0)"
+ ],
+ "VignetteBuilder": "knitr",
+ "Encoding": "UTF-8",
+ "Language": "en-US",
+ "RoxygenNote": "7.1.2",
+ "SystemRequirements": "xclip (https://github.com/astrand/xclip) or xsel (http://www.vergenet.net/~conrad/software/xsel/) for accessing the X11 clipboard, or wl-clipboard (https://github.com/bugaevc/wl-clipboard) for systems using Wayland.",
+ "NeedsCompilation": "no",
+ "Author": "Matthew Lincoln [aut, cre] (), Louis Maddox [ctb], Steve Simpson [ctb], Jennifer Bryan [ctb]",
+ "Maintainer": "Matthew Lincoln ",
+ "Repository": "RSPM"
+ },
+ "colorspace": {
+ "Package": "colorspace",
+ "Version": "2.1-1",
+ "Source": "Repository",
+ "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\"), person(given = \"Paul\", family = \"Murrell\", role = \"aut\", email = \"paul@stat.auckland.ac.nz\", comment = c(ORCID = \"0000-0002-3224-8858\")), person(given = \"Kurt\", family = \"Hornik\", role = \"aut\", email = \"Kurt.Hornik@R-project.org\", comment = c(ORCID = \"0000-0003-4198-9911\")), person(given = c(\"Jason\", \"C.\"), family = \"Fisher\", role = \"aut\", email = \"jfisher@usgs.gov\", comment = c(ORCID = \"0000-0001-9032-8912\")), person(given = \"Reto\", family = \"Stauffer\", role = \"aut\", email = \"Reto.Stauffer@uibk.ac.at\", comment = c(ORCID = \"0000-0002-3798-5507\")), person(given = c(\"Claus\", \"O.\"), family = \"Wilke\", role = \"aut\", email = \"wilke@austin.utexas.edu\", comment = c(ORCID = \"0000-0002-7470-9261\")), person(given = c(\"Claire\", \"D.\"), family = \"McWhite\", role = \"aut\", email = \"claire.mcwhite@utmail.utexas.edu\", comment = c(ORCID = \"0000-0001-7346-3047\")), person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")))",
+ "Description": "Carries out mapping between assorted color spaces including RGB, HSV, HLS, CIEXYZ, CIELUV, HCL (polar CIELUV), CIELAB, and polar CIELAB. Qualitative, sequential, and diverging color palettes based on HCL colors are provided along with corresponding ggplot2 color scales. Color palette choice is aided by an interactive app (with either a Tcl/Tk or a shiny graphical user interface) and shiny apps with an HCL color picker and a color vision deficiency emulator. Plotting functions for displaying and assessing palettes include color swatches, visualizations of the HCL space, and trajectories in HCL and/or RGB spectrum. Color manipulation functions include: desaturation, lightening/darkening, mixing, and simulation of color vision deficiencies (deutanomaly, protanomaly, tritanomaly). Details can be found on the project web page at and in the accompanying scientific paper: Zeileis et al. (2020, Journal of Statistical Software, ).",
+ "Depends": [
+ "R (>= 3.0.0)",
+ "methods"
+ ],
+ "Imports": [
+ "graphics",
+ "grDevices",
+ "stats"
+ ],
+ "Suggests": [
+ "datasets",
+ "utils",
+ "KernSmooth",
+ "MASS",
+ "kernlab",
+ "mvtnorm",
+ "vcd",
+ "tcltk",
+ "shiny",
+ "shinyjs",
+ "ggplot2",
+ "dplyr",
+ "scales",
+ "grid",
+ "png",
+ "jpeg",
+ "knitr",
+ "rmarkdown",
+ "RColorBrewer",
+ "rcartocolor",
+ "scico",
+ "viridis",
+ "wesanderson"
+ ],
+ "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",
+ "Author": "Ross Ihaka [aut], Paul Murrell [aut] (), Kurt Hornik [aut] (), Jason C. Fisher [aut] (), Reto Stauffer [aut] (), Claus O. Wilke [aut] (), Claire D. McWhite [aut] (), Achim Zeileis [aut, cre] ()",
+ "Maintainer": "Achim Zeileis ",
+ "Repository": "RSPM"
+ },
+ "commonmark": {
+ "Package": "commonmark",
+ "Version": "1.9.2",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "High Performance CommonMark and Github Markdown Rendering in R",
+ "Authors@R": "c( person(\"Jeroen\", \"Ooms\", ,\"jeroenooms@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"John MacFarlane\", role = \"cph\", comment = \"Author of cmark\"))",
+ "Description": "The CommonMark specification defines a rationalized version of markdown syntax. This package uses the 'cmark' reference implementation for converting markdown text into various formats including html, latex and groff man. In addition it exposes the markdown parse tree in xml format. Also includes opt-in support for GFM extensions including tables, autolinks, and strikethrough text.",
+ "License": "BSD_2_clause + file LICENSE",
+ "URL": "https://docs.ropensci.org/commonmark/ https://ropensci.r-universe.dev/commonmark",
+ "BugReports": "https://github.com/r-lib/commonmark/issues",
+ "Suggests": [
+ "curl",
+ "testthat",
+ "xml2"
+ ],
+ "RoxygenNote": "7.2.3",
+ "Language": "en-US",
+ "Encoding": "UTF-8",
+ "NeedsCompilation": "yes",
+ "Author": "Jeroen Ooms [aut, cre] (), John MacFarlane [cph] (Author of cmark)",
+ "Maintainer": "Jeroen Ooms ",
+ "Repository": "RSPM"
+ },
+ "cowplot": {
+ "Package": "cowplot",
+ "Version": "1.1.3",
+ "Source": "Repository",
+ "Title": "Streamlined Plot Theme and Plot Annotations for 'ggplot2'",
+ "Authors@R": "person( given = \"Claus O.\", family = \"Wilke\", role = c(\"aut\", \"cre\"), email = \"wilke@austin.utexas.edu\", comment = c(ORCID = \"0000-0002-7470-9261\") )",
+ "Description": "Provides various features that help with creating publication-quality figures with 'ggplot2', such as a set of themes, functions to align plots and arrange them into complex compound figures, and functions that make it easy to annotate plots and or mix plots with images. The package was originally written for internal use in the Wilke lab, hence the name (Claus O. Wilke's plot package). It has also been used extensively in the book Fundamentals of Data Visualization.",
+ "URL": "https://wilkelab.org/cowplot/",
+ "BugReports": "https://github.com/wilkelab/cowplot/issues",
+ "Depends": [
+ "R (>= 3.5.0)"
+ ],
+ "Imports": [
+ "ggplot2 (>= 3.4.0)",
+ "grid",
+ "gtable",
+ "grDevices",
+ "methods",
+ "rlang",
+ "scales"
+ ],
+ "License": "GPL-2",
+ "Suggests": [
+ "Cairo",
+ "covr",
+ "dplyr",
+ "forcats",
+ "gridGraphics (>= 0.4-0)",
+ "knitr",
+ "lattice",
+ "magick",
+ "maps",
+ "PASWR",
+ "patchwork",
+ "rmarkdown",
+ "ragg",
+ "testthat (>= 1.0.0)",
+ "tidyr",
+ "vdiffr (>= 0.3.0)",
+ "VennDiagram"
+ ],
+ "VignetteBuilder": "knitr",
+ "Collate": "'add_sub.R' 'align_plots.R' 'as_grob.R' 'as_gtable.R' 'axis_canvas.R' 'cowplot.R' 'draw.R' 'get_plot_component.R' 'get_axes.R' 'get_titles.R' 'get_legend.R' 'get_panel.R' 'gtable.R' 'key_glyph.R' 'plot_grid.R' 'save.R' 'set_null_device.R' 'setup.R' 'stamp.R' 'themes.R' 'utils_ggplot2.R'",
+ "RoxygenNote": "7.2.3",
+ "Encoding": "UTF-8",
+ "NeedsCompilation": "no",
+ "Author": "Claus O. Wilke [aut, cre] ()",
+ "Maintainer": "Claus O. Wilke ",
+ "Repository": "CRAN"
+ },
+ "cpp11": {
+ "Package": "cpp11",
+ "Version": "0.5.1",
+ "Source": "Repository",
+ "Title": "A C++11 Interface for R's C Interface",
+ "Authors@R": "c( person(\"Davis\", \"Vaughan\", email = \"davis@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4777-038X\")), person(\"Jim\",\"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Romain\", \"François\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Benjamin\", \"Kietzman\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "Provides a header only, C++11 interface to R's C interface. Compared to other approaches 'cpp11' strives to be safe against long jumps from the C API as well as C++ exceptions, conform to normal R function semantics and supports interaction with 'ALTREP' 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",
+ "knitr",
+ "lobstr",
+ "mockery",
+ "progress",
+ "rmarkdown",
+ "scales",
+ "Rcpp",
+ "testthat (>= 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, vctrs",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.3.2",
+ "NeedsCompilation": "no",
+ "Author": "Davis Vaughan [aut, cre] (), Jim Hester [aut] (), Romain François [aut] (), Benjamin Kietzman [ctb], Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Davis Vaughan ",
+ "Repository": "CRAN"
+ },
+ "crayon": {
+ "Package": "crayon",
+ "Version": "1.5.3",
+ "Source": "Repository",
+ "Title": "Colored Terminal Output",
+ "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Brodie\", \"Gaslam\", , \"brodie.gaslam@yahoo.com\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "The crayon package is now superseded. Please use the 'cli' package for new projects. Colored terminal output on terminals that support 'ANSI' color and highlight codes. It also works in 'Emacs' 'ESS'. 'ANSI' color support is automatically detected. Colors and highlighting can be combined and nested. New styles can also be created easily. This package was inspired by the 'chalk' 'JavaScript' 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' 'aab-num-ansi-colors.R' 'aac-num-ansi-colors.R' 'ansi-256.R' 'ansi-palette.R' 'combine.R' 'string.R' 'utils.R' 'crayon-package.R' 'disposable.R' 'enc-utils.R' 'has_ansi.R' 'has_color.R' 'link.R' 'styles.R' 'machinery.R' 'parts.R' 'print.R' 'style-var.R' 'show.R' 'string_operations.R'",
+ "NeedsCompilation": "no",
+ "Author": "Gábor Csárdi [aut, cre], Brodie Gaslam [ctb], Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Gábor Csárdi ",
+ "Repository": "RSPM"
+ },
+ "crosstalk": {
+ "Package": "crosstalk",
+ "Version": "1.2.1",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Inter-Widget Interactivity for HTML Widgets",
+ "Authors@R": "c( person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@posit.co\"), person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"carson@posit.co\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(family = \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(family = \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(family = \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js library\"), person(\"Kristopher Michael\", \"Kowal\", role = c(\"ctb\", \"cph\"), comment = \"es5-shim library\"), person(family = \"es5-shim contributors\", role = c(\"ctb\", \"cph\"), comment = \"es5-shim library\"), person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"), comment = \"ion.rangeSlider library\"), person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"), comment = \"Javascript strftime library\") )",
+ "Description": "Provides building blocks for allowing HTML widgets to communicate with each other, with Shiny or without (i.e. static .html files). Currently supports linked brushing and filtering.",
+ "License": "MIT + file LICENSE",
+ "Imports": [
+ "htmltools (>= 0.3.6)",
+ "jsonlite",
+ "lazyeval",
+ "R6"
+ ],
+ "Suggests": [
+ "shiny",
+ "ggplot2",
+ "testthat (>= 2.1.0)",
+ "sass",
+ "bslib"
+ ],
+ "URL": "https://rstudio.github.io/crosstalk/, https://github.com/rstudio/crosstalk",
+ "BugReports": "https://github.com/rstudio/crosstalk/issues",
+ "RoxygenNote": "7.2.3",
+ "Encoding": "UTF-8",
+ "NeedsCompilation": "no",
+ "Author": "Joe Cheng [aut], Carson Sievert [aut, cre] (), Posit Software, PBC [cph, fnd], jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Brian Reavis [ctb, cph] (selectize.js library), Kristopher Michael Kowal [ctb, cph] (es5-shim library), es5-shim contributors [ctb, cph] (es5-shim library), Denis Ineshin [ctb, cph] (ion.rangeSlider library), Sami Samhuri [ctb, cph] (Javascript strftime library)",
+ "Maintainer": "Carson Sievert ",
+ "Repository": "RSPM"
+ },
+ "curl": {
+ "Package": "curl",
+ "Version": "6.2.0",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "A Modern and Flexible Web Client for R",
+ "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Posit Software, PBC\", role = \"cph\"))",
+ "Description": "Bindings to 'libcurl' for performing fully configurable HTTP/FTP requests where responses can be processed in memory, on disk, or streaming via the callback or connection interfaces. Some knowledge of 'libcurl' is recommended; for a more-user-friendly web client see the 'httr2' package which builds on this package with http specific tools and logic.",
+ "License": "MIT + file LICENSE",
+ "SystemRequirements": "libcurl (>= 7.62): libcurl-devel (rpm) or libcurl4-openssl-dev (deb)",
+ "URL": "https://jeroen.r-universe.dev/curl",
+ "BugReports": "https://github.com/jeroen/curl/issues",
+ "Suggests": [
+ "spelling",
+ "testthat (>= 1.0.0)",
+ "knitr",
+ "jsonlite",
+ "later",
+ "rmarkdown",
+ "httpuv (>= 1.4.4)",
+ "webutils"
+ ],
+ "VignetteBuilder": "knitr",
+ "Depends": [
+ "R (>= 3.0.0)"
+ ],
+ "RoxygenNote": "7.3.2.9000",
+ "Encoding": "UTF-8",
+ "Language": "en-US",
+ "NeedsCompilation": "yes",
+ "Author": "Jeroen Ooms [aut, cre] (), Hadley Wickham [ctb], Posit Software, PBC [cph]",
+ "Maintainer": "Jeroen Ooms ",
+ "Repository": "CRAN"
+ },
+ "data.table": {
+ "Package": "data.table",
+ "Version": "1.16.4",
+ "Source": "Repository",
+ "Title": "Extension of `data.frame`",
+ "Depends": [
+ "R (>= 3.3.0)"
+ ],
+ "Imports": [
+ "methods"
+ ],
+ "Suggests": [
+ "bit64 (>= 4.0.0)",
+ "bit (>= 4.0.4)",
+ "R.utils",
+ "xts",
+ "zoo (>= 1.8-1)",
+ "yaml",
+ "knitr",
+ "markdown"
+ ],
+ "Description": "Fast aggregation of large data (e.g. 100GB in RAM), fast ordered joins, fast add/modify/delete of columns by group using no copies at all, list columns, friendly and fast character-separated-value read/write. Offers a natural and flexible syntax, for faster development.",
+ "License": "MPL-2.0 | file LICENSE",
+ "URL": "https://r-datatable.com, https://Rdatatable.gitlab.io/data.table, https://github.com/Rdatatable/data.table",
+ "BugReports": "https://github.com/Rdatatable/data.table/issues",
+ "VignetteBuilder": "knitr",
+ "Encoding": "UTF-8",
+ "ByteCompile": "TRUE",
+ "Authors@R": "c( person(\"Tyson\",\"Barrett\", role=c(\"aut\",\"cre\"), email=\"t.barrett88@gmail.com\", comment = c(ORCID=\"0000-0002-2137-1391\")), person(\"Matt\",\"Dowle\", role=\"aut\", email=\"mattjdowle@gmail.com\"), person(\"Arun\",\"Srinivasan\", role=\"aut\", email=\"asrini@pm.me\"), person(\"Jan\",\"Gorecki\", role=\"aut\"), person(\"Michael\",\"Chirico\", role=\"aut\", comment = c(ORCID=\"0000-0003-0787-087X\")), person(\"Toby\",\"Hocking\", role=\"aut\", comment = c(ORCID=\"0000-0002-3146-0865\")), person(\"Benjamin\",\"Schwendinger\",role=\"aut\", comment = c(ORCID=\"0000-0003-3315-8114\")), person(\"Pasha\",\"Stetsenko\", role=\"ctb\"), person(\"Tom\",\"Short\", role=\"ctb\"), person(\"Steve\",\"Lianoglou\", role=\"ctb\"), person(\"Eduard\",\"Antonyan\", role=\"ctb\"), person(\"Markus\",\"Bonsch\", role=\"ctb\"), person(\"Hugh\",\"Parsonage\", role=\"ctb\"), person(\"Scott\",\"Ritchie\", role=\"ctb\"), person(\"Kun\",\"Ren\", role=\"ctb\"), person(\"Xianying\",\"Tan\", role=\"ctb\"), person(\"Rick\",\"Saporta\", role=\"ctb\"), person(\"Otto\",\"Seiskari\", role=\"ctb\"), person(\"Xianghui\",\"Dong\", role=\"ctb\"), person(\"Michel\",\"Lang\", role=\"ctb\"), person(\"Watal\",\"Iwasaki\", role=\"ctb\"), person(\"Seth\",\"Wenchel\", role=\"ctb\"), person(\"Karl\",\"Broman\", role=\"ctb\"), person(\"Tobias\",\"Schmidt\", role=\"ctb\"), person(\"David\",\"Arenburg\", role=\"ctb\"), person(\"Ethan\",\"Smith\", role=\"ctb\"), person(\"Francois\",\"Cocquemas\", role=\"ctb\"), person(\"Matthieu\",\"Gomez\", role=\"ctb\"), person(\"Philippe\",\"Chataignon\", role=\"ctb\"), person(\"Nello\",\"Blaser\", role=\"ctb\"), person(\"Dmitry\",\"Selivanov\", role=\"ctb\"), person(\"Andrey\",\"Riabushenko\", role=\"ctb\"), person(\"Cheng\",\"Lee\", role=\"ctb\"), person(\"Declan\",\"Groves\", role=\"ctb\"), person(\"Daniel\",\"Possenriede\", role=\"ctb\"), person(\"Felipe\",\"Parages\", role=\"ctb\"), person(\"Denes\",\"Toth\", role=\"ctb\"), person(\"Mus\",\"Yaramaz-David\", role=\"ctb\"), person(\"Ayappan\",\"Perumal\", role=\"ctb\"), person(\"James\",\"Sams\", role=\"ctb\"), person(\"Martin\",\"Morgan\", role=\"ctb\"), person(\"Michael\",\"Quinn\", role=\"ctb\"), person(\"@javrucebo\",\"\", role=\"ctb\"), person(\"@marc-outins\",\"\", role=\"ctb\"), person(\"Roy\",\"Storey\", role=\"ctb\"), person(\"Manish\",\"Saraswat\", role=\"ctb\"), person(\"Morgan\",\"Jacob\", role=\"ctb\"), person(\"Michael\",\"Schubmehl\", role=\"ctb\"), person(\"Davis\",\"Vaughan\", role=\"ctb\"), person(\"Leonardo\",\"Silvestri\", role=\"ctb\"), person(\"Jim\",\"Hester\", role=\"ctb\"), person(\"Anthony\",\"Damico\", role=\"ctb\"), person(\"Sebastian\",\"Freundt\", role=\"ctb\"), person(\"David\",\"Simons\", role=\"ctb\"), person(\"Elliott\",\"Sales de Andrade\", role=\"ctb\"), person(\"Cole\",\"Miller\", role=\"ctb\"), person(\"Jens Peder\",\"Meldgaard\", role=\"ctb\"), person(\"Vaclav\",\"Tlapak\", role=\"ctb\"), person(\"Kevin\",\"Ushey\", role=\"ctb\"), person(\"Dirk\",\"Eddelbuettel\", role=\"ctb\"), person(\"Tony\",\"Fischetti\", role=\"ctb\"), person(\"Ofek\",\"Shilon\", role=\"ctb\"), person(\"Vadim\",\"Khotilovich\", role=\"ctb\"), person(\"Hadley\",\"Wickham\", role=\"ctb\"), person(\"Bennet\",\"Becker\", role=\"ctb\"), person(\"Kyle\",\"Haynes\", role=\"ctb\"), person(\"Boniface Christian\",\"Kamgang\", role=\"ctb\"), person(\"Olivier\",\"Delmarcell\", role=\"ctb\"), person(\"Josh\",\"O'Brien\", role=\"ctb\"), person(\"Dereck\",\"de Mezquita\", role=\"ctb\"), person(\"Michael\",\"Czekanski\", role=\"ctb\"), person(\"Dmitry\", \"Shemetov\", role=\"ctb\"), person(\"Nitish\", \"Jha\", role=\"ctb\"), person(\"Joshua\", \"Wu\", role=\"ctb\"), person(\"Iago\", \"Giné-Vázquez\", role=\"ctb\"), person(\"Anirban\", \"Chetia\", role=\"ctb\"), person(\"Doris\", \"Amoakohene\", role=\"ctb\"), person(\"Ivan\", \"Krylov\", role=\"ctb\") )",
+ "NeedsCompilation": "yes",
+ "Author": "Tyson Barrett [aut, cre] (), Matt Dowle [aut], Arun Srinivasan [aut], Jan Gorecki [aut], Michael Chirico [aut] (), Toby Hocking [aut] (), Benjamin Schwendinger [aut] (), Pasha Stetsenko [ctb], Tom Short [ctb], Steve Lianoglou [ctb], Eduard Antonyan [ctb], Markus Bonsch [ctb], Hugh Parsonage [ctb], Scott Ritchie [ctb], Kun Ren [ctb], Xianying Tan [ctb], Rick Saporta [ctb], Otto Seiskari [ctb], Xianghui Dong [ctb], Michel Lang [ctb], Watal Iwasaki [ctb], Seth Wenchel [ctb], Karl Broman [ctb], Tobias Schmidt [ctb], David Arenburg [ctb], Ethan Smith [ctb], Francois Cocquemas [ctb], Matthieu Gomez [ctb], Philippe Chataignon [ctb], Nello Blaser [ctb], Dmitry Selivanov [ctb], Andrey Riabushenko [ctb], Cheng Lee [ctb], Declan Groves [ctb], Daniel Possenriede [ctb], Felipe Parages [ctb], Denes Toth [ctb], Mus Yaramaz-David [ctb], Ayappan Perumal [ctb], James Sams [ctb], Martin Morgan [ctb], Michael Quinn [ctb], @javrucebo [ctb], @marc-outins [ctb], Roy Storey [ctb], Manish Saraswat [ctb], Morgan Jacob [ctb], Michael Schubmehl [ctb], Davis Vaughan [ctb], Leonardo Silvestri [ctb], Jim Hester [ctb], Anthony Damico [ctb], Sebastian Freundt [ctb], David Simons [ctb], Elliott Sales de Andrade [ctb], Cole Miller [ctb], Jens Peder Meldgaard [ctb], Vaclav Tlapak [ctb], Kevin Ushey [ctb], Dirk Eddelbuettel [ctb], Tony Fischetti [ctb], Ofek Shilon [ctb], Vadim Khotilovich [ctb], Hadley Wickham [ctb], Bennet Becker [ctb], Kyle Haynes [ctb], Boniface Christian Kamgang [ctb], Olivier Delmarcell [ctb], Josh O'Brien [ctb], Dereck de Mezquita [ctb], Michael Czekanski [ctb], Dmitry Shemetov [ctb], Nitish Jha [ctb], Joshua Wu [ctb], Iago Giné-Vázquez [ctb], Anirban Chetia [ctb], Doris Amoakohene [ctb], Ivan Krylov [ctb]",
+ "Maintainer": "Tyson Barrett ",
+ "Repository": "CRAN"
+ },
+ "desc": {
+ "Package": "desc",
+ "Version": "1.4.3",
+ "Source": "Repository",
+ "Title": "Manipulate DESCRIPTION Files",
+ "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Kirill\", \"Müller\", role = \"aut\"), person(\"Jim\", \"Hester\", , \"james.f.hester@gmail.com\", role = \"aut\"), person(\"Maëlle\", \"Salmon\", role = \"ctb\", comment = c(ORCID = \"0000-0002-2815-0399\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Maintainer": "Gábor Csárdi ",
+ "Description": "Tools to read, write, create, and manipulate DESCRIPTION files. It is intended for packages that create or manipulate other packages.",
+ "License": "MIT + file LICENSE",
+ "URL": "https://desc.r-lib.org/, https://github.com/r-lib/desc",
+ "BugReports": "https://github.com/r-lib/desc/issues",
+ "Depends": [
+ "R (>= 3.4)"
+ ],
+ "Imports": [
+ "cli",
+ "R6",
+ "utils"
+ ],
+ "Suggests": [
+ "callr",
+ "covr",
+ "gh",
+ "spelling",
+ "testthat",
+ "whoami",
+ "withr"
+ ],
+ "Config/Needs/website": "tidyverse/tidytemplate",
+ "Config/testthat/edition": "3",
+ "Encoding": "UTF-8",
+ "Language": "en-US",
+ "RoxygenNote": "7.2.3",
+ "Collate": "'assertions.R' 'authors-at-r.R' 'built.R' 'classes.R' 'collate.R' 'constants.R' 'deps.R' 'desc-package.R' 'description.R' 'encoding.R' 'find-package-root.R' 'latex.R' 'non-oo-api.R' 'package-archives.R' 'read.R' 'remotes.R' 'str.R' 'syntax_checks.R' 'urls.R' 'utils.R' 'validate.R' 'version.R'",
+ "NeedsCompilation": "no",
+ "Author": "Gábor Csárdi [aut, cre], Kirill Müller [aut], Jim Hester [aut], Maëlle Salmon [ctb] (), Posit Software, PBC [cph, fnd]",
+ "Repository": "RSPM"
+ },
+ "digest": {
+ "Package": "digest",
+ "Version": "0.6.37",
+ "Source": "Repository",
+ "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Antoine\", \"Lucas\", role=\"ctb\"), person(\"Jarek\", \"Tuszynski\", role=\"ctb\"), person(\"Henrik\", \"Bengtsson\", role=\"ctb\", comment = c(ORCID = \"0000-0002-7579-5165\")), person(\"Simon\", \"Urbanek\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2297-1732\")), person(\"Mario\", \"Frasca\", role=\"ctb\"), person(\"Bryan\", \"Lewis\", role=\"ctb\"), person(\"Murray\", \"Stokely\", role=\"ctb\"), person(\"Hannes\", \"Muehleisen\", role=\"ctb\"), person(\"Duncan\", \"Murdoch\", role=\"ctb\"), person(\"Jim\", \"Hester\", role=\"ctb\"), person(\"Wush\", \"Wu\", role=\"ctb\", comment = c(ORCID = \"0000-0001-5180-0567\")), person(\"Qiang\", \"Kou\", role=\"ctb\", comment = c(ORCID = \"0000-0001-6786-5453\")), person(\"Thierry\", \"Onkelinx\", role=\"ctb\", comment = c(ORCID = \"0000-0001-8804-4216\")), person(\"Michel\", \"Lang\", role=\"ctb\", comment = c(ORCID = \"0000-0001-9754-0393\")), person(\"Viliam\", \"Simko\", role=\"ctb\"), person(\"Kurt\", \"Hornik\", role=\"ctb\", comment = c(ORCID = \"0000-0003-4198-9911\")), person(\"Radford\", \"Neal\", role=\"ctb\", comment = c(ORCID = \"0000-0002-2473-3407\")), person(\"Kendon\", \"Bell\", role=\"ctb\", comment = c(ORCID = \"0000-0002-9093-8312\")), person(\"Matthew\", \"de Queljoe\", role=\"ctb\"), person(\"Dmitry\", \"Selivanov\", role=\"ctb\"), person(\"Ion\", \"Suruceanu\", role=\"ctb\"), person(\"Bill\", \"Denney\", role=\"ctb\"), person(\"Dirk\", \"Schumacher\", role=\"ctb\"), person(\"András\", \"Svraka\", role=\"ctb\"), person(\"Sergey\", \"Fedorov\", role=\"ctb\"), person(\"Will\", \"Landau\", role=\"ctb\", comment = c(ORCID = \"0000-0003-1878-3253\")), person(\"Floris\", \"Vanderhaeghe\", role=\"ctb\", comment = c(ORCID = \"0000-0002-6378-6229\")), person(\"Kevin\", \"Tappe\", role=\"ctb\"), person(\"Harris\", \"McGehee\", role=\"ctb\"), person(\"Tim\", \"Mastny\", role=\"ctb\"), person(\"Aaron\", \"Peikert\", role=\"ctb\", comment = c(ORCID = \"0000-0001-7813-818X\")), person(\"Mark\", \"van der Loo\", role=\"ctb\", comment = c(ORCID = \"0000-0002-9807-4686\")), person(\"Chris\", \"Muir\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2555-3878\")), person(\"Moritz\", \"Beller\", role=\"ctb\", comment = c(ORCID = \"0000-0003-4852-0526\")), person(\"Sebastian\", \"Campbell\", role=\"ctb\"), person(\"Winston\", \"Chang\", role=\"ctb\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Dean\", \"Attali\", role=\"ctb\", comment = c(ORCID = \"0000-0002-5645-3493\")), person(\"Michael\", \"Chirico\", role=\"ctb\", comment = c(ORCID = \"0000-0003-0787-087X\")), person(\"Kevin\", \"Ushey\", role=\"ctb\"))",
+ "Date": "2024-08-19",
+ "Title": "Create Compact Hash Digests of R Objects",
+ "Description": "Implementation of a function 'digest()' for the creation of hash digests of arbitrary R objects (using the 'md5', 'sha-1', 'sha-256', 'crc32', 'xxhash', 'murmurhash', 'spookyhash', 'blake3', 'crc32c', 'xxh3_64', and 'xxh3_128' algorithms) permitting easy comparison of R language objects, as well as functions such as'hmac()' to create hash-based message authentication code. Please note that this package is not meant to be deployed for cryptographic purposes for which more comprehensive (and widely tested) libraries such as 'OpenSSL' should be used.",
+ "URL": "https://github.com/eddelbuettel/digest, https://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",
+ "Author": "Dirk Eddelbuettel [aut, cre] (), Antoine Lucas [ctb], Jarek Tuszynski [ctb], Henrik Bengtsson [ctb] (), Simon Urbanek [ctb] (), Mario Frasca [ctb], Bryan Lewis [ctb], Murray Stokely [ctb], Hannes Muehleisen [ctb], Duncan Murdoch [ctb], Jim Hester [ctb], Wush Wu [ctb] (), Qiang Kou [ctb] (), Thierry Onkelinx [ctb] (), Michel Lang [ctb] (), Viliam Simko [ctb], Kurt Hornik [ctb] (), Radford Neal [ctb] (), Kendon Bell [ctb] (), Matthew de Queljoe [ctb], Dmitry Selivanov [ctb], Ion Suruceanu [ctb], Bill Denney [ctb], Dirk Schumacher [ctb], András Svraka [ctb], Sergey Fedorov [ctb], Will Landau [ctb] (), Floris Vanderhaeghe [ctb] (), Kevin Tappe [ctb], Harris McGehee [ctb], Tim Mastny [ctb], Aaron Peikert [ctb] (), Mark van der Loo [ctb] (), Chris Muir [ctb] (), Moritz Beller [ctb] (), Sebastian Campbell [ctb], Winston Chang [ctb] (), Dean Attali [ctb] (), Michael Chirico [ctb] (), Kevin Ushey [ctb]",
+ "Maintainer": "Dirk Eddelbuettel ",
+ "Repository": "CRAN"
+ },
+ "dplyr": {
+ "Package": "dplyr",
+ "Version": "1.1.4",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "A Grammar of Data Manipulation",
+ "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Romain\", \"François\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Lionel\", \"Henry\", role = \"aut\"), person(\"Kirill\", \"Müller\", role = \"aut\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4777-038X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "A fast, consistent tool for working with data frame like 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 (>= 1.0.3)",
+ "magrittr (>= 1.5)",
+ "methods",
+ "pillar (>= 1.9.0)",
+ "R6",
+ "rlang (>= 1.1.0)",
+ "tibble (>= 3.2.0)",
+ "tidyselect (>= 1.2.0)",
+ "utils",
+ "vctrs (>= 0.6.4)"
+ ],
+ "Suggests": [
+ "bench",
+ "broom",
+ "callr",
+ "covr",
+ "DBI",
+ "dbplyr (>= 2.2.1)",
+ "ggplot2",
+ "knitr",
+ "Lahman",
+ "lobstr",
+ "microbenchmark",
+ "nycflights13",
+ "purrr",
+ "rmarkdown",
+ "RMySQL",
+ "RPostgreSQL",
+ "RSQLite",
+ "stringi (>= 1.7.6)",
+ "testthat (>= 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",
+ "Author": "Hadley Wickham [aut, cre] (), Romain François [aut] (), Lionel Henry [aut], Kirill Müller [aut] (), Davis Vaughan [aut] (), Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Hadley Wickham ",
+ "Repository": "RSPM"
+ },
+ "e1071": {
+ "Package": "e1071",
+ "Version": "1.7-16",
+ "Source": "Repository",
+ "Title": "Misc Functions of the Department of Statistics, Probability Theory Group (Formerly: E1071), TU Wien",
+ "Imports": [
+ "graphics",
+ "grDevices",
+ "class",
+ "stats",
+ "methods",
+ "utils",
+ "proxy"
+ ],
+ "Suggests": [
+ "cluster",
+ "mlbench",
+ "nnet",
+ "randomForest",
+ "rpart",
+ "SparseM",
+ "xtable",
+ "Matrix",
+ "MASS",
+ "slam"
+ ],
+ "Authors@R": "c(person(given = \"David\", family = \"Meyer\", role = c(\"aut\", \"cre\"), email = \"David.Meyer@R-project.org\", comment = c(ORCID = \"0000-0002-5196-3048\")), person(given = \"Evgenia\", family = \"Dimitriadou\", role = c(\"aut\",\"cph\")), person(given = \"Kurt\", family = \"Hornik\", role = \"aut\", email = \"Kurt.Hornik@R-project.org\", comment = c(ORCID = \"0000-0003-4198-9911\")), person(given = \"Andreas\", family = \"Weingessel\", role = \"aut\"), person(given = \"Friedrich\", family = \"Leisch\", role = \"aut\"), person(given = \"Chih-Chung\", family = \"Chang\", role = c(\"ctb\",\"cph\"), comment = \"libsvm C++-code\"), person(given = \"Chih-Chen\", family = \"Lin\", role = c(\"ctb\",\"cph\"), comment = \"libsvm C++-code\"))",
+ "Description": "Functions for latent class analysis, short time Fourier transform, fuzzy clustering, support vector machines, shortest path computation, bagged clustering, naive Bayes classifier, generalized k-nearest neighbour ...",
+ "License": "GPL-2 | GPL-3",
+ "LazyLoad": "yes",
+ "NeedsCompilation": "yes",
+ "Author": "David Meyer [aut, cre] (), Evgenia Dimitriadou [aut, cph], Kurt Hornik [aut] (), Andreas Weingessel [aut], Friedrich Leisch [aut], Chih-Chung Chang [ctb, cph] (libsvm C++-code), Chih-Chen Lin [ctb, cph] (libsvm C++-code)",
+ "Maintainer": "David Meyer ",
+ "Repository": "CRAN"
+ },
+ "evaluate": {
+ "Package": "evaluate",
+ "Version": "1.0.3",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Parsing and Evaluation Tools that Provide More Details than the Default",
+ "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Yihui\", \"Xie\", role = \"aut\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Michael\", \"Lawrence\", role = \"ctb\"), person(\"Thomas\", \"Kluyver\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Barret\", \"Schloerke\", role = \"ctb\"), person(\"Adam\", \"Ryczkowski\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Michel\", \"Lang\", role = \"ctb\"), person(\"Karolis\", \"Koncevičius\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "Parsing and evaluation tools that make it easy to recreate 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",
+ "rlang",
+ "knitr",
+ "testthat (>= 3.0.0)",
+ "withr"
+ ],
+ "Config/Needs/website": "tidyverse/tidytemplate",
+ "Config/testthat/edition": "3",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.3.2",
+ "NeedsCompilation": "no",
+ "Author": "Hadley Wickham [aut, cre], Yihui Xie [aut] (), Michael Lawrence [ctb], Thomas Kluyver [ctb], Jeroen Ooms [ctb], Barret Schloerke [ctb], Adam Ryczkowski [ctb], Hiroaki Yutani [ctb], Michel Lang [ctb], Karolis Koncevičius [ctb], Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Hadley Wickham ",
+ "Repository": "CRAN"
+ },
+ "expm": {
+ "Package": "expm",
+ "Version": "1.0-0",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Matrix Exponential, Log, 'etc'",
+ "Date": "2024-08-19",
+ "Authors@R": "c(person(\"Martin\", \"Maechler\", role=c(\"aut\",\"cre\"), email=\"maechler@stat.math.ethz.ch\", comment = c(ORCID = \"0000-0002-8685-9910\")) , person(\"Christophe\",\"Dutang\", role = \"aut\", comment = c(ORCID = \"0000-0001-6732-1501\")) , person(\"Vincent\", \"Goulet\", role = \"aut\", comment = c(ORCID = \"0000-0002-9315-5719\")) , person(\"Douglas\", \"Bates\", role = \"ctb\", comment = \"cosmetic clean up, in svn r42\") , person(\"David\", \"Firth\", role = \"ctb\", comment = \"expm(method= \\\"PadeO\\\" and \\\"TaylorO\\\")\") , person(\"Marina\", \"Shapira\", role = \"ctb\", comment = \"expm(method= \\\"PadeO\\\" and \\\"TaylorO\\\")\") , person(\"Michael\", \"Stadelmann\", role = \"ctb\", comment = \"\\\"Higham08*\\\" methods, see ?expm.Higham08...\") )",
+ "Contact": "expm-developers@lists.R-forge.R-project.org",
+ "Description": "Computation of the matrix exponential, logarithm, sqrt, and related quantities, using traditional and modern methods.",
+ "Depends": [
+ "Matrix"
+ ],
+ "Imports": [
+ "methods"
+ ],
+ "Suggests": [
+ "RColorBrewer",
+ "sfsmisc",
+ "Rmpfr"
+ ],
+ "BuildResaveData": "no",
+ "License": "GPL (>= 2)",
+ "URL": "https://R-Forge.R-project.org/projects/expm/",
+ "BugReports": "https://R-forge.R-project.org/tracker/?atid=472&group_id=107",
+ "Encoding": "UTF-8",
+ "NeedsCompilation": "yes",
+ "Author": "Martin Maechler [aut, cre] (), Christophe Dutang [aut] (), Vincent Goulet [aut] (), Douglas Bates [ctb] (cosmetic clean up, in svn r42), David Firth [ctb] (expm(method= \"PadeO\" and \"TaylorO\")), Marina Shapira [ctb] (expm(method= \"PadeO\" and \"TaylorO\")), Michael Stadelmann [ctb] (\"Higham08*\" methods, see ?expm.Higham08...)",
+ "Maintainer": "Martin Maechler ",
+ "Repository": "CRAN"
+ },
+ "fansi": {
+ "Package": "fansi",
+ "Version": "1.0.6",
+ "Source": "Repository",
+ "Title": "ANSI Control Sequence Aware String Functions",
+ "Description": "Counterparts to R string manipulation functions that account for the effects of ANSI text formatting control sequences.",
+ "Authors@R": "c( person(\"Brodie\", \"Gaslam\", email=\"brodie.gaslam@yahoo.com\", role=c(\"aut\", \"cre\")), person(\"Elliott\", \"Sales De Andrade\", role=\"ctb\"), person(family=\"R Core Team\", email=\"R-core@r-project.org\", role=\"cph\", comment=\"UTF8 byte length calcs from src/util.c\" ))",
+ "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' 'nchar.R' 'strwrap.R' 'strtrim.R' 'strsplit.R' 'substr2.R' 'trimws.R' 'tohtml.R' 'unhandled.R' 'normalize.R' 'sgr.R'",
+ "NeedsCompilation": "yes",
+ "Author": "Brodie Gaslam [aut, cre], Elliott Sales De Andrade [ctb], R Core Team [cph] (UTF8 byte length calcs from src/util.c)",
+ "Maintainer": "Brodie Gaslam ",
+ "Repository": "RSPM"
+ },
+ "farver": {
+ "Package": "farver",
+ "Version": "2.1.2",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "High Performance Colour Space Manipulation",
+ "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Berendea\", \"Nicolae\", role = \"aut\", comment = \"Author of the ColorSpace C++ library\"), person(\"Romain\", \"François\", , \"romain@purrple.cat\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "The encoding of colour can be handled in many different ways, using different colour spaces. As different colour spaces have different uses, efficient conversion between these representations are important. The 'farver' package provides a set of functions that gives access to very fast colour space conversion and comparisons implemented in C++, and offers speed improvements over the 'convertColor' function in the 'grDevices' package.",
+ "License": "MIT + file LICENSE",
+ "URL": "https://farver.data-imaginist.com, https://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",
+ "Author": "Thomas Lin Pedersen [cre, aut] (), Berendea Nicolae [aut] (Author of the ColorSpace C++ library), Romain François [aut] (), Posit, PBC [cph, fnd]",
+ "Maintainer": "Thomas Lin Pedersen ",
+ "Repository": "RSPM"
+ },
+ "fastmap": {
+ "Package": "fastmap",
+ "Version": "1.2.0",
+ "Source": "Repository",
+ "Title": "Fast Data Structures",
+ "Authors@R": "c( person(\"Winston\", \"Chang\", email = \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(given = \"Tessil\", role = \"cph\", comment = \"hopscotch_map library\") )",
+ "Description": "Fast implementation of data structures, including a key-value store, stack, and queue. Environments are commonly used as key-value stores in R, but every time a new key is used, it is added to R's global symbol table, causing a small amount of memory leakage. This can be problematic in cases where many different keys are used. Fastmap avoids this memory leak 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",
+ "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd], Tessil [cph] (hopscotch_map library)",
+ "Maintainer": "Winston Chang ",
+ "Repository": "RSPM"
+ },
+ "flextable": {
+ "Package": "flextable",
+ "Version": "0.9.7",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Functions for Tabular Reporting",
+ "Authors@R": "c( person(\"David\", \"Gohel\", , \"david.gohel@ardata.fr\", role = c(\"aut\", \"cre\")), person(\"ArData\", role = \"cph\"), person(\"Clementine\", \"Jager\", role = \"ctb\"), person(\"Eli\", \"Daniels\", role = \"ctb\"), person(\"Panagiotis\", \"Skintzos\", , \"panagiotis.skintzos@ardata.fr\", role = \"aut\"), person(\"Quentin\", \"Fazilleau\", role = \"ctb\"), person(\"Maxim\", \"Nazarov\", role = \"ctb\"), person(\"Titouan\", \"Robert\", role = \"ctb\"), person(\"Michael\", \"Barrowman\", role = \"ctb\"), person(\"Atsushi\", \"Yasumoto\", role = \"ctb\"), person(\"Paul\", \"Julian\", role = \"ctb\"), person(\"Sean\", \"Browning\", role = \"ctb\"), person(\"Rémi\", \"Thériault\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4315-6788\")), person(\"Samuel\", \"Jobert\", role = \"ctb\"), person(\"Keith\", \"Newman\", role = \"ctb\") )",
+ "Description": "Use a grammar for creating and customizing pretty tables. The following formats are supported: 'HTML', 'PDF', 'RTF', 'Microsoft Word', 'Microsoft PowerPoint' and R 'Grid Graphics'. 'R Markdown', 'Quarto' and the package 'officer' can be used to produce the result files. The syntax is the same for the user regardless of the type of output to be produced. A set of functions allows the creation, definition of cell arrangement, addition of headers or footers, formatting and definition of cell content with text and or images. The package also offers a set of high-level functions that allow tabular reporting of statistical models and the creation of complex cross tabulations.",
+ "License": "GPL-3",
+ "URL": "https://ardata-fr.github.io/flextable-book/, https://davidgohel.github.io/flextable/",
+ "BugReports": "https://github.com/davidgohel/flextable/issues",
+ "Imports": [
+ "data.table (>= 1.13.0)",
+ "gdtools (>= 0.4.0)",
+ "graphics",
+ "grDevices",
+ "grid",
+ "htmltools",
+ "knitr",
+ "officer (>= 0.6.7)",
+ "ragg",
+ "rlang",
+ "rmarkdown (>= 2.0)",
+ "stats",
+ "utils",
+ "uuid (>= 0.1-4)",
+ "xml2"
+ ],
+ "Suggests": [
+ "bookdown (>= 0.40)",
+ "broom",
+ "broom.mixed",
+ "chromote",
+ "cluster",
+ "commonmark",
+ "doconv (>= 0.3.0)",
+ "equatags",
+ "ggplot2",
+ "lme4",
+ "magick",
+ "mgcv",
+ "nlme",
+ "officedown",
+ "pdftools",
+ "pkgdown (>= 2.0.0)",
+ "scales",
+ "svglite",
+ "tables (>= 0.9.17)",
+ "testthat (>= 3.0.0)",
+ "webshot2",
+ "withr",
+ "xtable"
+ ],
+ "VignetteBuilder": "knitr",
+ "Config/testthat/edition": "3",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.3.2",
+ "NeedsCompilation": "no",
+ "Author": "David Gohel [aut, cre], ArData [cph], Clementine Jager [ctb], Eli Daniels [ctb], Panagiotis Skintzos [aut], Quentin Fazilleau [ctb], Maxim Nazarov [ctb], Titouan Robert [ctb], Michael Barrowman [ctb], Atsushi Yasumoto [ctb], Paul Julian [ctb], Sean Browning [ctb], Rémi Thériault [ctb] (), Samuel Jobert [ctb], Keith Newman [ctb]",
+ "Maintainer": "David Gohel ",
+ "Repository": "CRAN"
+ },
+ "fontBitstreamVera": {
+ "Package": "fontBitstreamVera",
+ "Version": "0.1.1",
+ "Source": "Repository",
+ "Title": "Fonts with 'Bitstream Vera Fonts' License",
+ "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel.hry@gmail.com\", c(\"cre\", \"aut\")), person(\"Bitstream\", role = \"cph\"))",
+ "Description": "Provides fonts licensed under the 'Bitstream Vera Fonts' license for the 'fontquiver' package.",
+ "Depends": [
+ "R (>= 3.0.0)"
+ ],
+ "License": "file LICENCE",
+ "Encoding": "UTF-8",
+ "LazyData": "true",
+ "RoxygenNote": "5.0.1",
+ "NeedsCompilation": "no",
+ "Author": "Lionel Henry [cre, aut], Bitstream [cph]",
+ "Maintainer": "Lionel Henry ",
+ "License_is_FOSS": "yes",
+ "Repository": "CRAN"
+ },
+ "fontLiberation": {
+ "Package": "fontLiberation",
+ "Version": "0.1.0",
+ "Source": "Repository",
+ "Title": "Liberation Fonts",
+ "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", \"cre\"), person(\"Pravin Satpute\", role = \"aut\"), person(\"Steve Matteson\", role = \"aut\"), person(\"Red Hat, Inc\", role = \"cph\"), person(\"Google Corporation\", role = \"cph\"))",
+ "Description": "A placeholder for the Liberation fontset intended for the `fontquiver` package. This fontset covers the 12 combinations of families (sans, serif, mono) and faces (plain, bold, italic, bold italic) supported in R graphics devices.",
+ "Depends": [
+ "R (>= 3.0)"
+ ],
+ "License": "file LICENSE",
+ "Encoding": "UTF-8",
+ "LazyData": "true",
+ "RoxygenNote": "5.0.1",
+ "NeedsCompilation": "no",
+ "Author": "Lionel Henry [cre], Pravin Satpute [aut], Steve Matteson [aut], Red Hat, Inc [cph], Google Corporation [cph]",
+ "Maintainer": "Lionel Henry ",
+ "Repository": "CRAN",
+ "License_is_FOSS": "yes"
+ },
+ "fontawesome": {
+ "Package": "fontawesome",
+ "Version": "0.5.3",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Easily Work with 'Font Awesome' Icons",
+ "Description": "Easily and flexibly insert 'Font Awesome' icons into 'R Markdown' documents and 'Shiny' apps. These icons can be inserted into HTML content through inline 'SVG' tags or 'i' tags. There is also a utility function for exporting 'Font Awesome' icons as 'PNG' images for those situations where raster graphics are needed.",
+ "Authors@R": "c( person(\"Richard\", \"Iannone\", , \"rich@posit.co\", c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"ctb\"), person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome font\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "License": "MIT + file LICENSE",
+ "URL": "https://github.com/rstudio/fontawesome, https://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)",
+ "testthat (>= 3.0.0)",
+ "rsvg"
+ ],
+ "Config/testthat/edition": "3",
+ "NeedsCompilation": "no",
+ "Author": "Richard Iannone [aut, cre] (), Christophe Dervieux [ctb] (), Winston Chang [ctb], Dave Gandy [ctb, cph] (Font-Awesome font), Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Richard Iannone ",
+ "Repository": "CRAN"
+ },
+ "fontquiver": {
+ "Package": "fontquiver",
+ "Version": "0.2.1",
+ "Source": "Repository",
+ "Title": "Set of Installed Fonts",
+ "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", c(\"cre\", \"aut\")), person(\"RStudio\", role = \"cph\"), person(\"George Douros\", role = \"cph\", comment = \"Symbola font\"))",
+ "Description": "Provides a set of fonts with permissive licences. This is useful when you want to avoid system fonts to make sure your outputs are reproducible.",
+ "Depends": [
+ "R (>= 3.0.0)"
+ ],
+ "Imports": [
+ "fontBitstreamVera (>= 0.1.0)",
+ "fontLiberation (>= 0.1.0)"
+ ],
+ "Suggests": [
+ "testthat",
+ "htmltools"
+ ],
+ "License": "GPL-3 | file LICENSE",
+ "Encoding": "UTF-8",
+ "LazyData": "true",
+ "RoxygenNote": "5.0.1",
+ "Collate": "'font-getters.R' 'fontset.R' 'fontset-bitstream-vera.R' 'fontset-dejavu.R' 'fontset-liberation.R' 'fontset-symbola.R' 'html-dependency.R' 'utils.R'",
+ "NeedsCompilation": "no",
+ "Author": "Lionel Henry [cre, aut], RStudio [cph], George Douros [cph] (Symbola font)",
+ "Maintainer": "Lionel Henry ",
+ "Repository": "CRAN"
+ },
+ "forcats": {
+ "Package": "forcats",
+ "Version": "1.0.0",
+ "Source": "Repository",
+ "Title": "Tools for Working with Categorical Variables (Factors)",
+ "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = c(\"aut\", \"cre\")), person(\"RStudio\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "Helpers for reordering factor levels (including moving specified levels to front, ordering by first appearance, reversing, and randomly shuffling), and tools for modifying factor levels (including collapsing rare levels into other, 'anonymising', and manually 'recoding').",
+ "License": "MIT + file LICENSE",
+ "URL": "https://forcats.tidyverse.org/, https://github.com/tidyverse/forcats",
+ "BugReports": "https://github.com/tidyverse/forcats/issues",
+ "Depends": [
+ "R (>= 3.4)"
+ ],
+ "Imports": [
+ "cli (>= 3.4.0)",
+ "glue",
+ "lifecycle",
+ "magrittr",
+ "rlang (>= 1.0.0)",
+ "tibble"
+ ],
+ "Suggests": [
+ "covr",
+ "dplyr",
+ "ggplot2",
+ "knitr",
+ "readr",
+ "rmarkdown",
+ "testthat (>= 3.0.0)",
+ "withr"
+ ],
+ "VignetteBuilder": "knitr",
+ "Config/Needs/website": "tidyverse/tidytemplate",
+ "Config/testthat/edition": "3",
+ "Encoding": "UTF-8",
+ "LazyData": "true",
+ "RoxygenNote": "7.2.3",
+ "NeedsCompilation": "no",
+ "Author": "Hadley Wickham [aut, cre], RStudio [cph, fnd]",
+ "Maintainer": "Hadley Wickham ",
+ "Repository": "RSPM"
+ },
+ "formatters": {
+ "Package": "formatters",
+ "Version": "0.5.10.9001",
+ "Source": "Repository",
+ "Title": "ASCII Formatting for Values and Tables",
+ "Date": "2025-02-05",
+ "Authors@R": "c( person(\"Gabriel\", \"Becker\", , \"gabembecker@gmail.com\", role = \"aut\", comment = \"original creator of the package\"), person(\"Adrian\", \"Waddell\", , \"adrian.waddell@gene.com\", role = \"aut\"), person(\"Davide\", \"Garolini\", , \"davide.garolini@roche.com\", role = \"aut\"), person(\"Emily\", \"de la Rua\", , \"emily.de_la_rua@contractors.roche.com\", role = \"aut\"), person(\"Abinaya\", \"Yogasekaram\", , \"abinaya.yogasekaram@contractors.roche.com\", role = \"ctb\"), person(\"Joe\", \"Zhu\", , \"joe.zhu@roche.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0001-7566-2787\")), person(\"F. Hoffmann-La Roche AG\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "We provide a framework for rendering complex tables to ASCII, and a set of formatters for transforming values or sets of values into ASCII-ready display strings.",
+ "License": "Apache License 2.0",
+ "URL": "https://insightsengineering.github.io/formatters/, https://github.com/insightsengineering/formatters/",
+ "BugReports": "https://github.com/insightsengineering/formatters/issues",
+ "Depends": [
+ "methods",
+ "R (>= 2.10)"
+ ],
+ "Imports": [
+ "checkmate (>= 2.1.0)",
+ "grid",
+ "htmltools (>= 0.5.3)",
+ "lifecycle (>= 0.2.0)",
+ "stringi (>= 1.7.12)"
+ ],
+ "Suggests": [
+ "dplyr (>= 1.0.9)",
+ "gt (>= 0.10.0)",
+ "huxtable (>= 2.0.0)",
+ "knitr (>= 1.42)",
+ "r2rtf (>= 0.3.2)",
+ "rmarkdown (>= 2.23)",
+ "testthat (>= 3.0.4)",
+ "withr (>= 2.0.0)"
+ ],
+ "VignetteBuilder": "knitr, rmarkdown",
+ "Config/Needs/verdepcheck": "mllg/checkmate, rstudio/htmltools, r-lib/lifecycle, tidyverse/dplyr, rstudio/gt, hughjonesd/huxtable, yihui/knitr, Merck/r2rtf, rstudio/rmarkdown, gagolews/stringi, r-lib/testthat, r-lib/withr",
+ "Config/Needs/website": "insightsengineering/nesttemplate",
+ "Encoding": "UTF-8",
+ "Language": "en-US",
+ "LazyData": "true",
+ "Roxygen": "list(markdown = TRUE)",
+ "RoxygenNote": "7.3.2",
+ "Collate": "'data.R' 'format_value.R' 'matrix_form.R' 'generics.R' 'labels.R' 'mpf_exporters.R' 'package.R' 'page_size.R' 'pagination.R' 'tostring.R' 'utils.R' 'zzz.R'",
+ "Config/pak/sysreqs": "libicu-dev",
+ "Repository": "https://pharmaverse.r-universe.dev",
+ "RemoteUrl": "https://github.com/insightsengineering/formatters",
+ "RemoteRef": "HEAD",
+ "RemoteSha": "ee566c9b53f010edae9d0d9a64af82b41cee7b66",
+ "NeedsCompilation": "no",
+ "Author": "Gabriel Becker [aut] (original creator of the package), Adrian Waddell [aut], Davide Garolini [aut], Emily de la Rua [aut], Abinaya Yogasekaram [ctb], Joe Zhu [aut, cre] (), F. Hoffmann-La Roche AG [cph, fnd]",
+ "Maintainer": "Joe Zhu "
+ },
+ "fs": {
+ "Package": "fs",
+ "Version": "1.6.5",
+ "Source": "Repository",
+ "Title": "Cross-Platform File System Operations Based on 'libuv'",
+ "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"libuv project contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Joyent, Inc. and other Node contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "A cross-platform interface to file system operations, built on top of the 'libuv' C library.",
+ "License": "MIT + file LICENSE",
+ "URL": "https://fs.r-lib.org, https://github.com/r-lib/fs",
+ "BugReports": "https://github.com/r-lib/fs/issues",
+ "Depends": [
+ "R (>= 3.6)"
+ ],
+ "Imports": [
+ "methods"
+ ],
+ "Suggests": [
+ "covr",
+ "crayon",
+ "knitr",
+ "pillar (>= 1.0.0)",
+ "rmarkdown",
+ "spelling",
+ "testthat (>= 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",
+ "Author": "Jim Hester [aut], Hadley Wickham [aut], Gábor Csárdi [aut, cre], libuv project contributors [cph] (libuv library), Joyent, Inc. and other Node contributors [cph] (libuv library), Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Gábor Csárdi ",
+ "Repository": "CRAN"
+ },
+ "gdtools": {
+ "Package": "gdtools",
+ "Version": "0.4.1",
+ "Source": "Repository",
+ "Title": "Utilities for Graphical Rendering and Fonts Management",
+ "Authors@R": "c( person(\"David\", \"Gohel\", , \"david.gohel@ardata.fr\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", role = \"aut\"), person(\"Jeroen\", \"Ooms\", , \"jeroen@berkeley.edu\", role = \"aut\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Yixuan\", \"Qiu\", role = \"ctb\"), person(\"R Core Team\", role = \"cph\", comment = \"Cairo code from X11 device\"), person(\"ArData\", role = \"cph\"), person(\"RStudio\", role = \"cph\") )",
+ "Description": "Tools are provided to compute metrics of formatted strings and to check the availability of a font. Another set of functions is provided to support the collection of fonts from 'Google Fonts' in a cache. Their use is simple within 'R Markdown' documents and 'shiny' applications but also with graphic productions generated with the 'ggiraph', 'ragg' and 'svglite' packages or with tabular productions from the 'flextable' package.",
+ "License": "GPL-3 | file LICENSE",
+ "URL": "https://davidgohel.github.io/gdtools/",
+ "BugReports": "https://github.com/davidgohel/gdtools/issues",
+ "Depends": [
+ "R (>= 4.0.0)"
+ ],
+ "Imports": [
+ "fontquiver (>= 0.2.0)",
+ "htmltools",
+ "Rcpp (>= 0.12.12)",
+ "systemfonts (>= 1.1.0)",
+ "tools"
+ ],
+ "Suggests": [
+ "curl",
+ "gfonts",
+ "methods",
+ "testthat"
+ ],
+ "LinkingTo": [
+ "Rcpp"
+ ],
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.3.2",
+ "SystemRequirements": "cairo, freetype2, fontconfig",
+ "NeedsCompilation": "yes",
+ "Author": "David Gohel [aut, cre], Hadley Wickham [aut], Lionel Henry [aut], Jeroen Ooms [aut] (), Yixuan Qiu [ctb], R Core Team [cph] (Cairo code from X11 device), ArData [cph], RStudio [cph]",
+ "Maintainer": "David Gohel ",
+ "Repository": "CRAN"
+ },
+ "generics": {
+ "Package": "generics",
+ "Version": "0.1.3",
+ "Source": "Repository",
+ "Title": "Common S3 Generics not Provided by Base R Methods Related to Model Fitting",
+ "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = c(\"aut\", \"cre\")), person(\"Max\", \"Kuhn\", , \"max@rstudio.com\", role = \"aut\"), person(\"Davis\", \"Vaughan\", , \"davis@rstudio.com\", role = \"aut\"), person(\"RStudio\", role = \"cph\") )",
+ "Description": "In order to reduce potential package dependencies and 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",
+ "Author": "Hadley Wickham [aut, cre], Max Kuhn [aut], Davis Vaughan [aut], RStudio [cph]",
+ "Maintainer": "Hadley Wickham ",
+ "Repository": "RSPM"
+ },
+ "ggplot2": {
+ "Package": "ggplot2",
+ "Version": "3.5.1",
+ "Source": "Repository",
+ "Title": "Create Elegant Data Visualisations Using the Grammar of Graphics",
+ "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Winston\", \"Chang\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Lionel\", \"Henry\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Kohske\", \"Takahashi\", role = \"aut\"), person(\"Claus\", \"Wilke\", role = \"aut\", comment = c(ORCID = \"0000-0002-7470-9261\")), person(\"Kara\", \"Woo\", role = \"aut\", comment = c(ORCID = \"0000-0002-5125-4188\")), person(\"Hiroaki\", \"Yutani\", role = \"aut\", comment = c(ORCID = \"0000-0002-3385-7233\")), person(\"Dewey\", \"Dunnington\", role = \"aut\", comment = c(ORCID = \"0000-0002-9415-4582\")), person(\"Teun\", \"van den Brand\", role = \"aut\", comment = c(ORCID = \"0000-0002-9335-7468\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "A system for 'declaratively' creating graphics, based on \"The Grammar of Graphics\". You provide the data, tell 'ggplot2' how to map variables to aesthetics, what graphical primitives to use, and it takes care of the details.",
+ "License": "MIT + file LICENSE",
+ "URL": "https://ggplot2.tidyverse.org, https://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",
+ "lifecycle (> 1.0.1)",
+ "MASS",
+ "mgcv",
+ "rlang (>= 1.1.0)",
+ "scales (>= 1.3.0)",
+ "stats",
+ "tibble",
+ "vctrs (>= 0.6.0)",
+ "withr (>= 2.5.0)"
+ ],
+ "Suggests": [
+ "covr",
+ "dplyr",
+ "ggplot2movies",
+ "hexbin",
+ "Hmisc",
+ "knitr",
+ "mapproj",
+ "maps",
+ "multcomp",
+ "munsell",
+ "nlme",
+ "profvis",
+ "quantreg",
+ "ragg (>= 1.2.6)",
+ "RColorBrewer",
+ "rmarkdown",
+ "rpart",
+ "sf (>= 0.7-3)",
+ "svglite (>= 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.1",
+ "Collate": "'ggproto.R' 'ggplot-global.R' 'aaa-.R' 'aes-colour-fill-alpha.R' 'aes-evaluation.R' 'aes-group-order.R' 'aes-linetype-size-shape.R' 'aes-position.R' 'compat-plyr.R' 'utilities.R' 'aes.R' 'utilities-checks.R' 'legend-draw.R' 'geom-.R' 'annotation-custom.R' 'annotation-logticks.R' 'geom-polygon.R' 'geom-map.R' 'annotation-map.R' 'geom-raster.R' 'annotation-raster.R' 'annotation.R' 'autolayer.R' 'autoplot.R' 'axis-secondary.R' 'backports.R' 'bench.R' 'bin.R' 'coord-.R' 'coord-cartesian-.R' 'coord-fixed.R' 'coord-flip.R' 'coord-map.R' 'coord-munch.R' 'coord-polar.R' 'coord-quickmap.R' 'coord-radial.R' 'coord-sf.R' 'coord-transform.R' 'data.R' 'docs_layer.R' 'facet-.R' 'facet-grid-.R' 'facet-null.R' 'facet-wrap.R' 'fortify-lm.R' 'fortify-map.R' 'fortify-multcomp.R' 'fortify-spatial.R' 'fortify.R' 'stat-.R' 'geom-abline.R' 'geom-rect.R' 'geom-bar.R' 'geom-bin2d.R' 'geom-blank.R' 'geom-boxplot.R' 'geom-col.R' 'geom-path.R' 'geom-contour.R' 'geom-count.R' 'geom-crossbar.R' 'geom-segment.R' 'geom-curve.R' 'geom-defaults.R' 'geom-ribbon.R' 'geom-density.R' 'geom-density2d.R' 'geom-dotplot.R' 'geom-errorbar.R' 'geom-errorbarh.R' 'geom-freqpoly.R' 'geom-function.R' 'geom-hex.R' 'geom-histogram.R' 'geom-hline.R' 'geom-jitter.R' 'geom-label.R' 'geom-linerange.R' 'geom-point.R' 'geom-pointrange.R' 'geom-quantile.R' 'geom-rug.R' 'geom-sf.R' 'geom-smooth.R' 'geom-spoke.R' 'geom-text.R' 'geom-tile.R' 'geom-violin.R' 'geom-vline.R' 'ggplot2-package.R' 'grob-absolute.R' 'grob-dotstack.R' 'grob-null.R' 'grouping.R' 'theme-elements.R' 'guide-.R' 'guide-axis.R' 'guide-axis-logticks.R' 'guide-axis-stack.R' 'guide-axis-theta.R' 'guide-legend.R' 'guide-bins.R' 'guide-colorbar.R' 'guide-colorsteps.R' 'guide-custom.R' 'layer.R' 'guide-none.R' 'guide-old.R' 'guides-.R' 'guides-grid.R' 'hexbin.R' 'import-standalone-obj-type.R' 'import-standalone-types-check.R' 'labeller.R' 'labels.R' 'layer-sf.R' 'layout.R' 'limits.R' 'margins.R' 'performance.R' 'plot-build.R' 'plot-construction.R' 'plot-last.R' 'plot.R' 'position-.R' 'position-collide.R' 'position-dodge.R' 'position-dodge2.R' 'position-identity.R' 'position-jitter.R' 'position-jitterdodge.R' 'position-nudge.R' 'position-stack.R' 'quick-plot.R' 'reshape-add-margins.R' 'save.R' 'scale-.R' 'scale-alpha.R' 'scale-binned.R' 'scale-brewer.R' 'scale-colour.R' 'scale-continuous.R' 'scale-date.R' 'scale-discrete-.R' 'scale-expansion.R' 'scale-gradient.R' 'scale-grey.R' 'scale-hue.R' 'scale-identity.R' 'scale-linetype.R' 'scale-linewidth.R' 'scale-manual.R' 'scale-shape.R' 'scale-size.R' 'scale-steps.R' 'scale-type.R' 'scale-view.R' 'scale-viridis.R' 'scales-.R' 'stat-align.R' 'stat-bin.R' 'stat-bin2d.R' 'stat-bindot.R' 'stat-binhex.R' 'stat-boxplot.R' 'stat-contour.R' 'stat-count.R' 'stat-density-2d.R' 'stat-density.R' 'stat-ecdf.R' 'stat-ellipse.R' 'stat-function.R' 'stat-identity.R' 'stat-qq-line.R' 'stat-qq.R' 'stat-quantilemethods.R' 'stat-sf-coordinates.R' 'stat-sf.R' 'stat-smooth-methods.R' 'stat-smooth.R' 'stat-sum.R' 'stat-summary-2d.R' 'stat-summary-bin.R' 'stat-summary-hex.R' 'stat-summary.R' 'stat-unique.R' 'stat-ydensity.R' 'summarise-plot.R' 'summary.R' 'theme.R' 'theme-defaults.R' 'theme-current.R' 'utilities-break.R' 'utilities-grid.R' 'utilities-help.R' 'utilities-matrix.R' 'utilities-patterns.R' 'utilities-resolution.R' 'utilities-tidy-eval.R' 'zxx.R' 'zzz.R'",
+ "NeedsCompilation": "no",
+ "Author": "Hadley Wickham [aut] (), Winston Chang [aut] (), Lionel Henry [aut], Thomas Lin Pedersen [aut, cre] (), Kohske Takahashi [aut], Claus Wilke [aut] (), Kara Woo [aut] (), Hiroaki Yutani [aut] (), Dewey Dunnington [aut] (), Teun van den Brand [aut] (), Posit, PBC [cph, fnd]",
+ "Maintainer": "Thomas Lin Pedersen ",
+ "Repository": "RSPM"
+ },
+ "gld": {
+ "Package": "gld",
+ "Version": "2.6.7",
+ "Source": "Repository",
+ "Date": "2025-01-17",
+ "Title": "Estimation and Use of the Generalised (Tukey) Lambda Distribution",
+ "Suggests": [],
+ "Imports": [
+ "stats",
+ "graphics",
+ "e1071",
+ "lmom"
+ ],
+ "Authors@R": "c(person(given=\"Robert\",family=\"King\", role=c(\"aut\",\"cre\"), email=\"Robert.King.Newcastle@gmail.com\", comment=c(ORCID=\"0000-0001-7495-6599\")), person(given=\"Benjamin\",family=\"Dean\", role=\"aut\", email=\"Benjamin.Dean@uon.edu.au\"), person(given=\"Sigbert\",family=\"Klinke\", role=\"aut\"), person(given=\"Paul\",family=\"van Staden\", role=\"aut\",email=\"paul.vanstaden@up.ac.za\", comment=c(ORCID=\"0000-0002-5710-5984\")) )",
+ "Description": "The generalised lambda distribution, or Tukey lambda distribution, provides a wide variety of shapes with one functional form. This package provides random numbers, quantiles, probabilities, densities and density quantiles for four different types of the distribution, the FKML (Freimer et al 1988), RS (Ramberg and Schmeiser 1974), GPD (van Staden and Loots 2009) and FM5 - see documentation for details. It provides the density function, distribution function, and Quantile-Quantile plots. It implements a variety of estimation methods for the distribution, including diagnostic plots. Estimation methods include the starship (all 4 types), method of L-Moments for the GPD and FKML types, and a number of methods for only the FKML type. These include maximum likelihood, maximum product of spacings, Titterington's method, Moments, Trimmed L-Moments and Distributional Least Absolutes.",
+ "License": "GPL (>= 2)",
+ "URL": "https://github.com/newystats/gld/",
+ "NeedsCompilation": "yes",
+ "Author": "Robert King [aut, cre] (), Benjamin Dean [aut], Sigbert Klinke [aut], Paul van Staden [aut] ()",
+ "Maintainer": "Robert King ",
+ "Repository": "CRAN"
+ },
+ "glue": {
+ "Package": "glue",
+ "Version": "1.8.0",
+ "Source": "Repository",
+ "Title": "Interpreted String Literals",
+ "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "An implementation of interpreted string literals, inspired by Python's Literal String Interpolation and Docstrings and Julia's Triple-Quoted String Literals .",
+ "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",
+ "rmarkdown",
+ "RSQLite",
+ "testthat (>= 3.2.0)",
+ "vctrs (>= 0.3.0)",
+ "waldo (>= 0.5.3)",
+ "withr"
+ ],
+ "VignetteBuilder": "knitr",
+ "ByteCompile": "true",
+ "Config/Needs/website": "bench, forcats, ggbeeswarm, ggplot2, R.utils, rprintf, tidyr, tidyverse/tidytemplate",
+ "Config/testthat/edition": "3",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.3.2",
+ "NeedsCompilation": "yes",
+ "Author": "Jim Hester [aut] (), Jennifer Bryan [aut, cre] (), Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Jennifer Bryan ",
+ "Repository": "RSPM"
+ },
+ "gridExtra": {
+ "Package": "gridExtra",
+ "Version": "2.3",
+ "Source": "Repository",
+ "Authors@R": "c(person(\"Baptiste\", \"Auguie\", email = \"baptiste.auguie@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Anton\", \"Antonov\", email = \"tonytonov@gmail.com\", role = c(\"ctb\")))",
+ "License": "GPL (>= 2)",
+ "Title": "Miscellaneous Functions for \"Grid\" Graphics",
+ "Type": "Package",
+ "Description": "Provides a number of user-level functions to work with \"grid\" graphics, notably to arrange multiple grid-based plots on a page, and draw tables.",
+ "VignetteBuilder": "knitr",
+ "Imports": [
+ "gtable",
+ "grid",
+ "grDevices",
+ "graphics",
+ "utils"
+ ],
+ "Suggests": [
+ "ggplot2",
+ "egg",
+ "lattice",
+ "knitr",
+ "testthat"
+ ],
+ "RoxygenNote": "6.0.1",
+ "NeedsCompilation": "no",
+ "Author": "Baptiste Auguie [aut, cre], Anton Antonov [ctb]",
+ "Maintainer": "Baptiste Auguie ",
+ "Repository": "RSPM",
+ "Encoding": "UTF-8"
+ },
+ "gtable": {
+ "Package": "gtable",
+ "Version": "0.3.6",
+ "Source": "Repository",
+ "Title": "Arrange 'Grobs' in Tables",
+ "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "Tools to make it easier to work with \"tables\" of 'grobs'. The 'gtable' package defines a 'gtable' grob class that specifies a grid along with a list of grobs and their placement in the grid. Further the package makes it easy to manipulate and combine 'gtable' objects 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",
+ "Author": "Hadley Wickham [aut], Thomas Lin Pedersen [aut, cre], Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Thomas Lin Pedersen ",
+ "Repository": "CRAN"
+ },
+ "haven": {
+ "Package": "haven",
+ "Version": "2.5.4",
+ "Source": "Repository",
+ "Title": "Import and Export 'SPSS', 'Stata' and 'SAS' Files",
+ "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Evan\", \"Miller\", role = c(\"aut\", \"cph\"), comment = \"Author of included ReadStat code\"), person(\"Danny\", \"Smith\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "Import foreign statistical formats into R via the embedded 'ReadStat' C library, .",
+ "License": "MIT + file LICENSE",
+ "URL": "https://haven.tidyverse.org, https://github.com/tidyverse/haven, https://github.com/WizardMac/ReadStat",
+ "BugReports": "https://github.com/tidyverse/haven/issues",
+ "Depends": [
+ "R (>= 3.6)"
+ ],
+ "Imports": [
+ "cli (>= 3.0.0)",
+ "forcats (>= 0.2.0)",
+ "hms",
+ "lifecycle",
+ "methods",
+ "readr (>= 0.1.0)",
+ "rlang (>= 0.4.0)",
+ "tibble",
+ "tidyselect",
+ "vctrs (>= 0.3.0)"
+ ],
+ "Suggests": [
+ "covr",
+ "crayon",
+ "fs",
+ "knitr",
+ "pillar (>= 1.4.0)",
+ "rmarkdown",
+ "testthat (>= 3.0.0)",
+ "utf8"
+ ],
+ "LinkingTo": [
+ "cpp11"
+ ],
+ "VignetteBuilder": "knitr",
+ "Config/Needs/website": "tidyverse/tidytemplate",
+ "Config/testthat/edition": "3",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.2.3",
+ "SystemRequirements": "GNU make, zlib: zlib1g-dev (deb), zlib-devel (rpm)",
+ "NeedsCompilation": "yes",
+ "Author": "Hadley Wickham [aut, cre], Evan Miller [aut, cph] (Author of included ReadStat code), Danny Smith [aut], Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Hadley Wickham ",
+ "Repository": "RSPM"
+ },
+ "highr": {
+ "Package": "highr",
+ "Version": "0.11",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Syntax Highlighting for R Source Code",
+ "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Yixuan\", \"Qiu\", role = \"aut\"), person(\"Christopher\", \"Gandrud\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\") )",
+ "Description": "Provides syntax highlighting for R source code. Currently it supports LaTeX and HTML output. Source code of other languages is supported 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",
+ "Author": "Yihui Xie [aut, cre] (), Yixuan Qiu [aut], Christopher Gandrud [ctb], Qiang Li [ctb]",
+ "Maintainer": "Yihui Xie ",
+ "Repository": "RSPM"
+ },
+ "hms": {
+ "Package": "hms",
+ "Version": "1.1.3",
+ "Source": "Repository",
+ "Title": "Pretty Time of Day",
+ "Date": "2023-03-21",
+ "Authors@R": "c( person(\"Kirill\", \"Müller\", role = c(\"aut\", \"cre\"), email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"R Consortium\", role = \"fnd\"), person(\"RStudio\", role = \"fnd\") )",
+ "Description": "Implements an S3 class for storing and formatting time-of-day values, based on the 'difftime' class.",
+ "Imports": [
+ "lifecycle",
+ "methods",
+ "pkgconfig",
+ "rlang (>= 1.0.2)",
+ "vctrs (>= 0.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",
+ "Author": "Kirill Müller [aut, cre] (), R Consortium [fnd], RStudio [fnd]",
+ "Maintainer": "Kirill Müller ",
+ "Repository": "RSPM"
+ },
+ "htmltools": {
+ "Package": "htmltools",
+ "Version": "0.5.8.1",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Tools for HTML",
+ "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Yihui\", \"Xie\", , \"yihui@posit.co\", role = \"aut\"), person(\"Jeff\", \"Allen\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "Tools for HTML generation and output.",
+ "License": "GPL (>= 2)",
+ "URL": "https://github.com/rstudio/htmltools, https://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 (>= 1.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.1",
+ "Collate": "'colors.R' 'fill.R' 'html_dependency.R' 'html_escape.R' 'html_print.R' 'htmltools-package.R' 'images.R' 'known_tags.R' 'selector.R' 'staticimports.R' 'tag_query.R' 'utils.R' 'tags.R' 'template.R'",
+ "NeedsCompilation": "yes",
+ "Author": "Joe Cheng [aut], Carson Sievert [aut, cre] (), Barret Schloerke [aut] (), Winston Chang [aut] (), Yihui Xie [aut], Jeff Allen [aut], Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Carson Sievert ",
+ "Repository": "RSPM"
+ },
+ "htmlwidgets": {
+ "Package": "htmlwidgets",
+ "Version": "1.6.4",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "HTML Widgets for R",
+ "Authors@R": "c( person(\"Ramnath\", \"Vaidyanathan\", role = c(\"aut\", \"cph\")), person(\"Yihui\", \"Xie\", role = \"aut\"), person(\"JJ\", \"Allaire\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Kenton\", \"Russell\", role = c(\"aut\", \"cph\")), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "A framework for creating HTML widgets that render in various contexts including the R console, 'R Markdown' documents, and 'Shiny' web applications.",
+ "License": "MIT + file LICENSE",
+ "URL": "https://github.com/ramnathv/htmlwidgets",
+ "BugReports": "https://github.com/ramnathv/htmlwidgets/issues",
+ "Imports": [
+ "grDevices",
+ "htmltools (>= 0.5.7)",
+ "jsonlite (>= 0.9.16)",
+ "knitr (>= 1.8)",
+ "rmarkdown",
+ "yaml"
+ ],
+ "Suggests": [
+ "testthat"
+ ],
+ "Enhances": [
+ "shiny (>= 1.1)"
+ ],
+ "VignetteBuilder": "knitr",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.2.3",
+ "NeedsCompilation": "no",
+ "Author": "Ramnath Vaidyanathan [aut, cph], Yihui Xie [aut], JJ Allaire [aut], Joe Cheng [aut], Carson Sievert [aut, cre] (), Kenton Russell [aut, cph], Ellis Hughes [ctb], Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Carson Sievert ",
+ "Repository": "RSPM"
+ },
+ "httpuv": {
+ "Package": "httpuv",
+ "Version": "1.6.15",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "HTTP and WebSocket Server Library",
+ "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit, PBC\", \"fnd\", role = \"cph\"), person(\"Hector\", \"Corrada Bravo\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Andrzej\", \"Krzemienski\", role = \"cph\", comment = \"optional.hpp\"), person(\"libuv project contributors\", role = \"cph\", comment = \"libuv library, see src/libuv/AUTHORS file\"), person(\"Joyent, Inc. and other Node contributors\", role = \"cph\", comment = \"libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file\"), person(\"Niels\", \"Provos\", role = \"cph\", comment = \"libuv subcomponent: tree.h\"), person(\"Internet Systems Consortium, Inc.\", role = \"cph\", comment = \"libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c\"), person(\"Alexander\", \"Chemeris\", role = \"cph\", comment = \"libuv subcomponent: stdint-msvc2008.h (from msinttypes)\"), person(\"Google, Inc.\", role = \"cph\", comment = \"libuv subcomponent: pthread-fixes.c\"), person(\"Sony Mobile Communcations AB\", role = \"cph\", comment = \"libuv subcomponent: pthread-fixes.c\"), person(\"Berkeley Software Design Inc.\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Kenneth\", \"MacKay\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016)\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Steve\", \"Reid\", role = \"aut\", comment = \"SHA-1 implementation\"), person(\"James\", \"Brown\", role = \"aut\", comment = \"SHA-1 implementation\"), person(\"Bob\", \"Trower\", role = \"aut\", comment = \"base64 implementation\"), person(\"Alexander\", \"Peslyak\", role = \"aut\", comment = \"MD5 implementation\"), person(\"Trantor Standard Systems\", role = \"cph\", comment = \"base64 implementation\"), person(\"Igor\", \"Sysoev\", role = \"cph\", comment = \"http-parser\") )",
+ "Description": "Provides low-level socket and protocol support for handling HTTP and WebSocket requests directly from within R. It is primarily intended as a building block for other packages, rather than making it particularly easy to create complete web applications using httpuv alone. httpuv is built on top of the libuv and http-parser C libraries, both of which were developed by Joyent, Inc. (See LICENSE 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' 'staticServer.R' 'static_paths.R' 'utils.R'",
+ "NeedsCompilation": "yes",
+ "Author": "Joe Cheng [aut], Winston Chang [aut, cre], Posit, PBC fnd [cph], Hector Corrada Bravo [ctb], Jeroen Ooms [ctb], Andrzej Krzemienski [cph] (optional.hpp), libuv project contributors [cph] (libuv library, see src/libuv/AUTHORS file), Joyent, Inc. and other Node contributors [cph] (libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file), Niels Provos [cph] (libuv subcomponent: tree.h), Internet Systems Consortium, Inc. [cph] (libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c), Alexander Chemeris [cph] (libuv subcomponent: stdint-msvc2008.h (from msinttypes)), Google, Inc. [cph] (libuv subcomponent: pthread-fixes.c), Sony Mobile Communcations AB [cph] (libuv subcomponent: pthread-fixes.c), Berkeley Software Design Inc. [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Kenneth MacKay [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016) [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Steve Reid [aut] (SHA-1 implementation), James Brown [aut] (SHA-1 implementation), Bob Trower [aut] (base64 implementation), Alexander Peslyak [aut] (MD5 implementation), Trantor Standard Systems [cph] (base64 implementation), Igor Sysoev [cph] (http-parser)",
+ "Maintainer": "Winston Chang ",
+ "Repository": "RSPM"
+ },
+ "httr": {
+ "Package": "httr",
+ "Version": "1.4.7",
+ "Source": "Repository",
+ "Title": "Tools for Working with URLs and HTTP",
+ "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "Useful tools for working with HTTP organised by HTTP verbs (GET(), POST(), etc). Configuration functions make it easy to control additional request components (authenticate(), add_headers() and so on).",
+ "License": "MIT + file LICENSE",
+ "URL": "https://httr.r-lib.org/, https://github.com/r-lib/httr",
+ "BugReports": "https://github.com/r-lib/httr/issues",
+ "Depends": [
+ "R (>= 3.5)"
+ ],
+ "Imports": [
+ "curl (>= 5.0.2)",
+ "jsonlite",
+ "mime",
+ "openssl (>= 0.8)",
+ "R6"
+ ],
+ "Suggests": [
+ "covr",
+ "httpuv",
+ "jpeg",
+ "knitr",
+ "png",
+ "readr",
+ "rmarkdown",
+ "testthat (>= 0.8.0)",
+ "xml2"
+ ],
+ "VignetteBuilder": "knitr",
+ "Config/Needs/website": "tidyverse/tidytemplate",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.2.3",
+ "NeedsCompilation": "no",
+ "Author": "Hadley Wickham [aut, cre], Posit, PBC [cph, fnd]",
+ "Maintainer": "Hadley Wickham ",
+ "Repository": "RSPM"
+ },
+ "isoband": {
+ "Package": "isoband",
+ "Version": "0.2.7",
+ "Source": "Repository",
+ "Title": "Generate Isolines and Isobands from Regularly Spaced Elevation Grids",
+ "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Claus O.\", \"Wilke\", , \"wilke@austin.utexas.edu\", role = \"aut\", comment = c(\"Original author\", ORCID = \"0000-0002-7470-9261\")), person(\"Thomas Lin\", \"Pedersen\", , \"thomasp85@gmail.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-5147-4711\")) )",
+ "Description": "A fast C++ implementation to generate contour lines (isolines) and contour polygons (isobands) from regularly spaced grids 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",
+ "testthat",
+ "xml2"
+ ],
+ "VignetteBuilder": "knitr",
+ "Config/Needs/website": "tidyverse/tidytemplate",
+ "Config/testthat/edition": "3",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.2.3",
+ "SystemRequirements": "C++11",
+ "NeedsCompilation": "yes",
+ "Author": "Hadley Wickham [aut, cre] (), Claus O. Wilke [aut] (Original author, ), Thomas Lin Pedersen [aut] ()",
+ "Maintainer": "Hadley Wickham ",
+ "Repository": "RSPM"
+ },
+ "jquerylib": {
+ "Package": "jquerylib",
+ "Version": "0.1.4",
+ "Source": "Repository",
+ "Title": "Obtain 'jQuery' as an HTML Dependency Object",
+ "Authors@R": "c( person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"carson@rstudio.com\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@rstudio.com\"), person(family = \"RStudio\", role = \"cph\"), person(family = \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt\") )",
+ "Description": "Obtain any major version of 'jQuery' () and use it in any webpage generated by 'htmltools' (e.g. 'shiny', 'htmlwidgets', and 'rmarkdown'). 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",
+ "Author": "Carson Sievert [aut, cre] (), Joe Cheng [aut], RStudio [cph], jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt)",
+ "Maintainer": "Carson Sievert ",
+ "Repository": "RSPM"
+ },
+ "jsonlite": {
+ "Package": "jsonlite",
+ "Version": "1.8.9",
+ "Source": "Repository",
+ "Title": "A Simple and Robust JSON Parser and Generator for R",
+ "License": "MIT + file LICENSE",
+ "Depends": [
+ "methods"
+ ],
+ "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Duncan\", \"Temple Lang\", role = \"ctb\"), person(\"Lloyd\", \"Hilaiel\", role = \"cph\", comment=\"author of bundled libyajl\"))",
+ "URL": "https://jeroen.r-universe.dev/jsonlite https://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 data and the web. Offers simple, flexible tools for working with JSON in R, and is particularly powerful for building pipelines and interacting with a web API. The implementation is based on the mapping described in the vignette (Ooms, 2014). In addition to converting JSON data from/to R objects, 'jsonlite' contains functions to stream, validate, and prettify JSON data. The unit tests included with the package verify that all edge cases are encoded and decoded consistently for use with dynamic data in systems and applications.",
+ "Suggests": [
+ "httr",
+ "vctrs",
+ "testthat",
+ "knitr",
+ "rmarkdown",
+ "R.rsp",
+ "sf"
+ ],
+ "RoxygenNote": "7.2.3",
+ "Encoding": "UTF-8",
+ "NeedsCompilation": "yes",
+ "Author": "Jeroen Ooms [aut, cre] (), Duncan Temple Lang [ctb], Lloyd Hilaiel [cph] (author of bundled libyajl)",
+ "Repository": "RSPM"
+ },
+ "knitr": {
+ "Package": "knitr",
+ "Version": "1.49",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "A General-Purpose Package for Dynamic Report Generation in R",
+ "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Abhraneel\", \"Sarma\", role = \"ctb\"), person(\"Adam\", \"Vogt\", role = \"ctb\"), person(\"Alastair\", \"Andrew\", role = \"ctb\"), person(\"Alex\", \"Zvoleff\", role = \"ctb\"), person(\"Amar\", \"Al-Zubaidi\", role = \"ctb\"), person(\"Andre\", \"Simon\", role = \"ctb\", comment = \"the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de\"), person(\"Aron\", \"Atkins\", role = \"ctb\"), person(\"Aaron\", \"Wolen\", role = \"ctb\"), person(\"Ashley\", \"Manton\", role = \"ctb\"), person(\"Atsushi\", \"Yasumoto\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8335-495X\")), person(\"Ben\", \"Baumer\", role = \"ctb\"), person(\"Brian\", \"Diggs\", role = \"ctb\"), person(\"Brian\", \"Zhang\", role = \"ctb\"), person(\"Bulat\", \"Yapparov\", role = \"ctb\"), person(\"Cassio\", \"Pereira\", role = \"ctb\"), person(\"Christophe\", \"Dervieux\", role = \"ctb\"), person(\"David\", \"Hall\", role = \"ctb\"), person(\"David\", \"Hugh-Jones\", role = \"ctb\"), person(\"David\", \"Robinson\", role = \"ctb\"), person(\"Doug\", \"Hemken\", role = \"ctb\"), person(\"Duncan\", \"Murdoch\", role = \"ctb\"), person(\"Elio\", \"Campitelli\", role = \"ctb\"), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Emily\", \"Riederer\", role = \"ctb\"), person(\"Fabian\", \"Hirschmann\", role = \"ctb\"), person(\"Fitch\", \"Simeon\", role = \"ctb\"), person(\"Forest\", \"Fang\", role = \"ctb\"), person(c(\"Frank\", \"E\", \"Harrell\", \"Jr\"), role = \"ctb\", comment = \"the Sweavel package at inst/misc/Sweavel.sty\"), person(\"Garrick\", \"Aden-Buie\", role = \"ctb\"), person(\"Gregoire\", \"Detrez\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Hao\", \"Zhu\", role = \"ctb\"), person(\"Heewon\", \"Jeon\", role = \"ctb\"), person(\"Henrik\", \"Bengtsson\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Ian\", \"Lyttle\", role = \"ctb\"), person(\"Hodges\", \"Daniel\", role = \"ctb\"), person(\"Jacob\", \"Bien\", role = \"ctb\"), person(\"Jake\", \"Burkhead\", role = \"ctb\"), person(\"James\", \"Manton\", role = \"ctb\"), person(\"Jared\", \"Lander\", role = \"ctb\"), person(\"Jason\", \"Punyon\", role = \"ctb\"), person(\"Javier\", \"Luraschi\", role = \"ctb\"), person(\"Jeff\", \"Arnold\", role = \"ctb\"), person(\"Jenny\", \"Bryan\", role = \"ctb\"), person(\"Jeremy\", \"Ashkenas\", role = c(\"ctb\", \"cph\"), comment = \"the CSS file at inst/misc/docco-classic.css\"), person(\"Jeremy\", \"Stephens\", role = \"ctb\"), person(\"Jim\", \"Hester\", role = \"ctb\"), person(\"Joe\", \"Cheng\", role = \"ctb\"), person(\"Johannes\", \"Ranke\", role = \"ctb\"), person(\"John\", \"Honaker\", role = \"ctb\"), person(\"John\", \"Muschelli\", role = \"ctb\"), person(\"Jonathan\", \"Keane\", role = \"ctb\"), person(\"JJ\", \"Allaire\", role = \"ctb\"), person(\"Johan\", \"Toloe\", role = \"ctb\"), person(\"Jonathan\", \"Sidi\", role = \"ctb\"), person(\"Joseph\", \"Larmarange\", role = \"ctb\"), person(\"Julien\", \"Barnier\", role = \"ctb\"), person(\"Kaiyin\", \"Zhong\", role = \"ctb\"), person(\"Kamil\", \"Slowikowski\", role = \"ctb\"), person(\"Karl\", \"Forner\", role = \"ctb\"), person(c(\"Kevin\", \"K.\"), \"Smith\", role = \"ctb\"), person(\"Kirill\", \"Mueller\", role = \"ctb\"), person(\"Kohske\", \"Takahashi\", role = \"ctb\"), person(\"Lorenz\", \"Walthert\", role = \"ctb\"), person(\"Lucas\", \"Gallindo\", role = \"ctb\"), person(\"Marius\", \"Hofert\", role = \"ctb\"), person(\"Martin\", \"Modrák\", role = \"ctb\"), person(\"Michael\", \"Chirico\", role = \"ctb\"), person(\"Michael\", \"Friendly\", role = \"ctb\"), person(\"Michal\", \"Bojanowski\", role = \"ctb\"), person(\"Michel\", \"Kuhlmann\", role = \"ctb\"), person(\"Miller\", \"Patrick\", role = \"ctb\"), person(\"Nacho\", \"Caballero\", role = \"ctb\"), person(\"Nick\", \"Salkowski\", role = \"ctb\"), person(\"Niels Richard\", \"Hansen\", role = \"ctb\"), person(\"Noam\", \"Ross\", role = \"ctb\"), person(\"Obada\", \"Mahdi\", role = \"ctb\"), person(\"Pavel N.\", \"Krivitsky\", role = \"ctb\", comment=c(ORCID = \"0000-0002-9101-3362\")), person(\"Pedro\", \"Faria\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\"), person(\"Ramnath\", \"Vaidyanathan\", role = \"ctb\"), person(\"Richard\", \"Cotton\", role = \"ctb\"), person(\"Robert\", \"Krzyzanowski\", role = \"ctb\"), person(\"Rodrigo\", \"Copetti\", role = \"ctb\"), person(\"Romain\", \"Francois\", role = \"ctb\"), person(\"Ruaridh\", \"Williamson\", role = \"ctb\"), person(\"Sagiru\", \"Mati\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1413-3974\")), person(\"Scott\", \"Kostyshak\", role = \"ctb\"), person(\"Sebastian\", \"Meyer\", role = \"ctb\"), person(\"Sietse\", \"Brouwer\", role = \"ctb\"), person(c(\"Simon\", \"de\"), \"Bernard\", role = \"ctb\"), person(\"Sylvain\", \"Rousseau\", role = \"ctb\"), person(\"Taiyun\", \"Wei\", role = \"ctb\"), person(\"Thibaut\", \"Assus\", role = \"ctb\"), person(\"Thibaut\", \"Lamadon\", role = \"ctb\"), person(\"Thomas\", \"Leeper\", role = \"ctb\"), person(\"Tim\", \"Mastny\", role = \"ctb\"), person(\"Tom\", \"Torsney-Weir\", role = \"ctb\"), person(\"Trevor\", \"Davis\", role = \"ctb\"), person(\"Viktoras\", \"Veitas\", role = \"ctb\"), person(\"Weicheng\", \"Zhu\", role = \"ctb\"), person(\"Wush\", \"Wu\", role = \"ctb\"), person(\"Zachary\", \"Foster\", role = \"ctb\"), person(\"Zhian N.\", \"Kamvar\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1458-7108\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "Provides a general-purpose tool for dynamic report generation in R using Literate Programming techniques.",
+ "Depends": [
+ "R (>= 3.6.0)"
+ ],
+ "Imports": [
+ "evaluate (>= 0.15)",
+ "highr (>= 0.11)",
+ "methods",
+ "tools",
+ "xfun (>= 0.48)",
+ "yaml (>= 2.1.19)"
+ ],
+ "Suggests": [
+ "bslib",
+ "codetools",
+ "DBI (>= 0.4-1)",
+ "digest",
+ "formatR",
+ "gifski",
+ "gridSVG",
+ "htmlwidgets (>= 0.7)",
+ "jpeg",
+ "JuliaCall (>= 0.11.1)",
+ "magick",
+ "litedown",
+ "markdown (>= 1.3)",
+ "png",
+ "ragg",
+ "reticulate (>= 1.4)",
+ "rgl (>= 0.95.1201)",
+ "rlang",
+ "rmarkdown",
+ "sass",
+ "showtext",
+ "styler (>= 1.2.0)",
+ "targets (>= 0.6.0)",
+ "testit",
+ "tibble",
+ "tikzDevice (>= 0.10)",
+ "tinytex (>= 0.46)",
+ "webshot",
+ "rstudioapi",
+ "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 reStructuredText require Pandoc (http://pandoc.org). The function rst2pdf() requires rst2pdf (https://github.com/rst2pdf/rst2pdf).",
+ "Collate": "'block.R' 'cache.R' 'utils.R' 'citation.R' 'hooks-html.R' 'plot.R' 'defaults.R' 'concordance.R' 'engine.R' 'highlight.R' 'themes.R' 'header.R' 'hooks-asciidoc.R' 'hooks-chunk.R' 'hooks-extra.R' 'hooks-latex.R' 'hooks-md.R' 'hooks-rst.R' 'hooks-textile.R' 'hooks.R' 'output.R' 'package.R' 'pandoc.R' 'params.R' 'parser.R' 'pattern.R' 'rocco.R' 'spin.R' 'table.R' 'template.R' 'utils-conversion.R' 'utils-rd2html.R' 'utils-string.R' 'utils-sweave.R' 'utils-upload.R' 'utils-vignettes.R' 'zzz.R'",
+ "RoxygenNote": "7.3.2",
+ "NeedsCompilation": "no",
+ "Author": "Yihui Xie [aut, cre] (), Abhraneel Sarma [ctb], Adam Vogt [ctb], Alastair Andrew [ctb], Alex Zvoleff [ctb], Amar Al-Zubaidi [ctb], Andre Simon [ctb] (the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de), Aron Atkins [ctb], Aaron Wolen [ctb], Ashley Manton [ctb], Atsushi Yasumoto [ctb] (), Ben Baumer [ctb], Brian Diggs [ctb], Brian Zhang [ctb], Bulat Yapparov [ctb], Cassio Pereira [ctb], Christophe Dervieux [ctb], David Hall [ctb], David Hugh-Jones [ctb], David Robinson [ctb], Doug Hemken [ctb], Duncan Murdoch [ctb], Elio Campitelli [ctb], Ellis Hughes [ctb], Emily Riederer [ctb], Fabian Hirschmann [ctb], Fitch Simeon [ctb], Forest Fang [ctb], Frank E Harrell Jr [ctb] (the Sweavel package at inst/misc/Sweavel.sty), Garrick Aden-Buie [ctb], Gregoire Detrez [ctb], Hadley Wickham [ctb], Hao Zhu [ctb], Heewon Jeon [ctb], Henrik Bengtsson [ctb], Hiroaki Yutani [ctb], Ian Lyttle [ctb], Hodges Daniel [ctb], Jacob Bien [ctb], Jake Burkhead [ctb], James Manton [ctb], Jared Lander [ctb], Jason Punyon [ctb], Javier Luraschi [ctb], Jeff Arnold [ctb], Jenny Bryan [ctb], Jeremy Ashkenas [ctb, cph] (the CSS file at inst/misc/docco-classic.css), Jeremy Stephens [ctb], Jim Hester [ctb], Joe Cheng [ctb], Johannes Ranke [ctb], John Honaker [ctb], John Muschelli [ctb], Jonathan Keane [ctb], JJ Allaire [ctb], Johan Toloe [ctb], Jonathan Sidi [ctb], Joseph Larmarange [ctb], Julien Barnier [ctb], Kaiyin Zhong [ctb], Kamil Slowikowski [ctb], Karl Forner [ctb], Kevin K. Smith [ctb], Kirill Mueller [ctb], Kohske Takahashi [ctb], Lorenz Walthert [ctb], Lucas Gallindo [ctb], Marius Hofert [ctb], Martin Modrák [ctb], Michael Chirico [ctb], Michael Friendly [ctb], Michal Bojanowski [ctb], Michel Kuhlmann [ctb], Miller Patrick [ctb], Nacho Caballero [ctb], Nick Salkowski [ctb], Niels Richard Hansen [ctb], Noam Ross [ctb], Obada Mahdi [ctb], Pavel N. Krivitsky [ctb] (), Pedro Faria [ctb], Qiang Li [ctb], Ramnath Vaidyanathan [ctb], Richard Cotton [ctb], Robert Krzyzanowski [ctb], Rodrigo Copetti [ctb], Romain Francois [ctb], Ruaridh Williamson [ctb], Sagiru Mati [ctb] (), Scott Kostyshak [ctb], Sebastian Meyer [ctb], Sietse Brouwer [ctb], Simon de Bernard [ctb], Sylvain Rousseau [ctb], Taiyun Wei [ctb], Thibaut Assus [ctb], Thibaut Lamadon [ctb], Thomas Leeper [ctb], Tim Mastny [ctb], Tom Torsney-Weir [ctb], Trevor Davis [ctb], Viktoras Veitas [ctb], Weicheng Zhu [ctb], Wush Wu [ctb], Zachary Foster [ctb], Zhian N. Kamvar [ctb] (), Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Yihui Xie ",
+ "Repository": "CRAN"
+ },
+ "labeling": {
+ "Package": "labeling",
+ "Version": "0.4.3",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Axis Labeling",
+ "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"
+ ],
+ "Repository": "RSPM",
+ "Encoding": "UTF-8"
+ },
+ "labelled": {
+ "Package": "labelled",
+ "Version": "2.14.0",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Manipulating Labelled Data",
+ "Maintainer": "Joseph Larmarange ",
+ "Authors@R": "c( person(\"Joseph\", \"Larmarange\", email = \"joseph@larmarange.net\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0001-7097-700X\")), person(\"Daniel\", \"Ludecke\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Michal\", \"Bojanowski\", role = \"ctb\"), person(\"François\", \"Briatte\", role = \"ctb\") )",
+ "Description": "Work with labelled data imported from 'SPSS' or 'Stata' with 'haven' or 'foreign'. This package provides useful functions to deal with \"haven_labelled\" and \"haven_labelled_spss\" classes introduced by 'haven' package.",
+ "License": "GPL (>= 3)",
+ "Encoding": "UTF-8",
+ "Depends": [
+ "R (>= 3.2)"
+ ],
+ "Imports": [
+ "haven (>= 2.4.1)",
+ "cli",
+ "dplyr (>= 1.1.0)",
+ "lifecycle",
+ "rlang (>= 1.1.0)",
+ "vctrs",
+ "stringr",
+ "tidyr",
+ "tidyselect"
+ ],
+ "Suggests": [
+ "testthat (>= 3.2.0)",
+ "knitr",
+ "rmarkdown",
+ "questionr",
+ "snakecase",
+ "spelling"
+ ],
+ "Enhances": [
+ "memisc"
+ ],
+ "URL": "https://larmarange.github.io/labelled/, https://github.com/larmarange/labelled",
+ "BugReports": "https://github.com/larmarange/labelled/issues",
+ "VignetteBuilder": "knitr",
+ "LazyData": "true",
+ "RoxygenNote": "7.3.2",
+ "Language": "en-US",
+ "Config/testthat/edition": "3",
+ "Config/Needs/check": "memisc",
+ "NeedsCompilation": "no",
+ "Author": "Joseph Larmarange [aut, cre] (), Daniel Ludecke [ctb], Hadley Wickham [ctb], Michal Bojanowski [ctb], François Briatte [ctb]",
+ "Repository": "CRAN"
+ },
+ "later": {
+ "Package": "later",
+ "Version": "1.4.1",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Utilities for Scheduling Functions to Execute Later with Event Loops",
+ "Authors@R": "c( person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@posit.co\"), person(\"Joe\", \"Cheng\", role = c(\"aut\"), email = \"joe@posit.co\"), person(\"Charlie\", \"Gao\", role = c(\"aut\"), email = \"charlie.gao@shikokuchuo.net\", comment = c(ORCID = \"0000-0002-0750-061X\")), person(family = \"Posit Software, PBC\", role = \"cph\"), person(\"Marcus\", \"Geelnard\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\"), person(\"Evan\", \"Nemerson\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\") )",
+ "Description": "Executes arbitrary R or C functions some time after the current time, after the R execution stack has emptied. The functions are scheduled 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",
+ "Author": "Winston Chang [aut, cre], Joe Cheng [aut], Charlie Gao [aut] (), Posit Software, PBC [cph], Marcus Geelnard [ctb, cph] (TinyCThread library, https://tinycthread.github.io/), Evan Nemerson [ctb, cph] (TinyCThread library, https://tinycthread.github.io/)",
+ "Maintainer": "Winston Chang ",
+ "Repository": "CRAN"
+ },
+ "lattice": {
+ "Package": "lattice",
+ "Version": "0.22-6",
+ "Source": "Repository",
+ "Date": "2024-03-20",
+ "Priority": "recommended",
+ "Title": "Trellis Graphics for R",
+ "Authors@R": "c(person(\"Deepayan\", \"Sarkar\", role = c(\"aut\", \"cre\"), email = \"deepayan.sarkar@r-project.org\", comment = c(ORCID = \"0000-0003-4107-1553\")), person(\"Felix\", \"Andrews\", role = \"ctb\"), person(\"Kevin\", \"Wright\", role = \"ctb\", comment = \"documentation\"), person(\"Neil\", \"Klepeis\", role = \"ctb\"), person(\"Johan\", \"Larsson\", role = \"ctb\", comment = \"miscellaneous improvements\"), person(\"Zhijian (Jason)\", \"Wen\", role = \"cph\", comment = \"filled contour code\"), person(\"Paul\", \"Murrell\", role = \"ctb\", email = \"paul@stat.auckland.ac.nz\"), person(\"Stefan\", \"Eng\", role = \"ctb\", comment = \"violin plot improvements\"), person(\"Achim\", \"Zeileis\", role = \"ctb\", comment = \"modern colors\"), person(\"Alexandre\", \"Courtiol\", role = \"ctb\", comment = \"generics for larrows, lpolygon, lrect and lsegments\") )",
+ "Description": "A powerful and elegant high-level data visualization system inspired by Trellis graphics, with an emphasis on multivariate data. Lattice is sufficient for typical graphics needs, and is also flexible enough to handle most nonstandard requirements. 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",
+ "Author": "Deepayan Sarkar [aut, cre] (), Felix Andrews [ctb], Kevin Wright [ctb] (documentation), Neil Klepeis [ctb], Johan Larsson [ctb] (miscellaneous improvements), Zhijian (Jason) Wen [cph] (filled contour code), Paul Murrell [ctb], Stefan Eng [ctb] (violin plot improvements), Achim Zeileis [ctb] (modern colors), Alexandre Courtiol [ctb] (generics for larrows, lpolygon, lrect and lsegments)",
+ "Maintainer": "Deepayan Sarkar ",
+ "Repository": "RSPM",
+ "Encoding": "UTF-8"
+ },
+ "lazyeval": {
+ "Package": "lazyeval",
+ "Version": "0.2.2",
+ "Source": "Repository",
+ "Title": "Lazy (Non-Standard) Evaluation",
+ "Description": "An alternative approach to non-standard evaluation using formulas. Provides a full implementation of LISP style 'quasiquotation', making it easier to generate code with other code.",
+ "Authors@R": "c( person(\"Hadley\", \"Wickham\", ,\"hadley@rstudio.com\", c(\"aut\", \"cre\")), person(\"RStudio\", role = \"cph\") )",
+ "License": "GPL-3",
+ "LazyData": "true",
+ "Depends": [
+ "R (>= 3.1.0)"
+ ],
+ "Suggests": [
+ "knitr",
+ "rmarkdown (>= 0.2.65)",
+ "testthat",
+ "covr"
+ ],
+ "VignetteBuilder": "knitr",
+ "RoxygenNote": "6.1.1",
+ "NeedsCompilation": "yes",
+ "Author": "Hadley Wickham [aut, cre], RStudio [cph]",
+ "Maintainer": "Hadley Wickham ",
+ "Repository": "RSPM",
+ "Encoding": "UTF-8"
+ },
+ "lifecycle": {
+ "Package": "lifecycle",
+ "Version": "1.0.4",
+ "Source": "Repository",
+ "Title": "Manage the Life Cycle of your Package Functions",
+ "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "Manage the life cycle of your exported functions with shared conventions, documentation badges, and user-friendly deprecation 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)",
+ "tibble",
+ "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",
+ "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut] (), Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Lionel Henry ",
+ "Repository": "RSPM"
+ },
+ "lmom": {
+ "Package": "lmom",
+ "Version": "3.2",
+ "Source": "Repository",
+ "Date": "2024-09-29",
+ "Title": "L-Moments",
+ "Author": "J. R. M. Hosking [aut, cre]",
+ "Maintainer": "J. R. M. Hosking ",
+ "Authors@R": "person(given = c(\"J.\", \"R.\", \"M.\"), family = \"Hosking\", role = c(\"aut\", \"cre\"), email = \"jrmhosking@gmail.com\")",
+ "Description": "Functions related to L-moments: computation of L-moments and trimmed L-moments of distributions and data samples; parameter estimation; L-moment ratio diagram; plot vs. quantiles of an extreme-value distribution.",
+ "Depends": [
+ "R (>= 3.0.0)"
+ ],
+ "Imports": [
+ "stats",
+ "graphics"
+ ],
+ "License": "Common Public License Version 1.0",
+ "NeedsCompilation": "yes",
+ "Repository": "CRAN"
+ },
+ "logger": {
+ "Package": "logger",
+ "Version": "0.4.0",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "A Lightweight, Modern and Flexible Logging Utility",
+ "Date": "2024-10-19",
+ "Authors@R": "c( person(\"Gergely\", \"Daróczi\", , \"daroczig@rapporter.net\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3149-8537\")), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"System1\", role = \"fnd\") )",
+ "Description": "Inspired by the the 'futile.logger' R package and 'logging' Python module, this utility provides a flexible and extensible way of formatting and delivering log messages with low overhead.",
+ "License": "MIT + file LICENSE",
+ "URL": "https://daroczig.github.io/logger/",
+ "BugReports": "https://github.com/daroczig/logger/issues",
+ "Depends": [
+ "R (>= 4.0.0)"
+ ],
+ "Imports": [
+ "utils"
+ ],
+ "Suggests": [
+ "botor",
+ "covr",
+ "crayon",
+ "devtools",
+ "glue",
+ "jsonlite",
+ "knitr",
+ "mirai (>= 1.3.0)",
+ "pander",
+ "parallel",
+ "R.utils",
+ "rmarkdown",
+ "roxygen2",
+ "RPushbullet",
+ "rsyslog",
+ "shiny",
+ "slackr (>= 1.4.1)",
+ "syslognet",
+ "telegram",
+ "testthat (>= 3.0.0)",
+ "withr"
+ ],
+ "Enhances": [
+ "futile.logger",
+ "log4r",
+ "logging"
+ ],
+ "VignetteBuilder": "knitr",
+ "Config/testthat/edition": "3",
+ "Config/testthat/parallel": "TRUE",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.3.2",
+ "NeedsCompilation": "no",
+ "Author": "Gergely Daróczi [aut, cre] (), Hadley Wickham [aut] (), System1 [fnd]",
+ "Maintainer": "Gergely Daróczi ",
+ "Repository": "CRAN"
+ },
+ "magrittr": {
+ "Package": "magrittr",
+ "Version": "2.0.3",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "A Forward-Pipe Operator for R",
+ "Authors@R": "c( person(\"Stefan Milton\", \"Bache\", , \"stefan@stefanbache.dk\", role = c(\"aut\", \"cph\"), comment = \"Original author and creator of magrittr\"), person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", role = \"cre\"), person(\"RStudio\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "Provides a mechanism for chaining commands with a new forward-pipe operator, %>%. This operator will forward a value, or the result of an expression, into the next function call/expression. There is flexible support for the type of right-hand side expressions. For more information, see package vignette. To quote Rene Magritte, \"Ceci n'est pas un pipe.\"",
+ "License": "MIT + file LICENSE",
+ "URL": "https://magrittr.tidyverse.org, https://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",
+ "Author": "Stefan Milton Bache [aut, cph] (Original author and creator of magrittr), Hadley Wickham [aut], Lionel Henry [cre], RStudio [cph, fnd]",
+ "Maintainer": "Lionel Henry ",
+ "Repository": "CRAN"
+ },
+ "memoise": {
+ "Package": "memoise",
+ "Version": "2.0.1",
+ "Source": "Repository",
+ "Title": "'Memoisation' of Functions",
+ "Authors@R": "c(person(given = \"Hadley\", family = \"Wickham\", role = \"aut\", email = \"hadley@rstudio.com\"), person(given = \"Jim\", family = \"Hester\", role = \"aut\"), person(given = \"Winston\", family = \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@rstudio.com\"), person(given = \"Kirill\", family = \"Müller\", role = \"aut\", email = \"krlmlr+r@mailbox.org\"), person(given = \"Daniel\", family = \"Cook\", role = \"aut\", email = \"danielecook@gmail.com\"), person(given = \"Mark\", family = \"Edmondson\", role = \"ctb\", email = \"r@sunholo.com\"))",
+ "Description": "Cache the results of a function so that when you call it again with the same arguments it returns the previously computed 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",
+ "testthat"
+ ],
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.1.2",
+ "NeedsCompilation": "no",
+ "Author": "Hadley Wickham [aut], Jim Hester [aut], Winston Chang [aut, cre], Kirill Müller [aut], Daniel Cook [aut], Mark Edmondson [ctb]",
+ "Maintainer": "Winston Chang ",
+ "Repository": "RSPM"
+ },
+ "mgcv": {
+ "Package": "mgcv",
+ "Version": "1.9-1",
+ "Source": "Repository",
+ "Author": "Simon Wood ",
+ "Maintainer": "Simon Wood ",
+ "Title": "Mixed GAM Computation Vehicle with Automatic Smoothness Estimation",
+ "Description": "Generalized additive (mixed) models, some of their extensions and other generalized ridge regression with multiple smoothing parameter estimation by (Restricted) Marginal Likelihood, Generalized Cross Validation and similar, or using iterated nested Laplace approximation for fully Bayesian inference. See Wood (2017) for an overview. Includes a gam() function, a wide variety of smoothers, 'JAGS' support and distributions beyond the exponential family.",
+ "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",
+ "Repository": "RSPM",
+ "Encoding": "UTF-8"
+ },
+ "mime": {
+ "Package": "mime",
+ "Version": "0.12",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Map Filenames to MIME Types",
+ "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Jeffrey\", \"Horner\", role = \"ctb\"), person(\"Beilei\", \"Bian\", role = \"ctb\") )",
+ "Description": "Guesses the MIME type from a filename extension using the data 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",
+ "Author": "Yihui Xie [aut, cre] (), Jeffrey Horner [ctb], Beilei Bian [ctb]",
+ "Maintainer": "Yihui Xie ",
+ "Repository": "RSPM"
+ },
+ "munsell": {
+ "Package": "munsell",
+ "Version": "0.5.1",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Utilities for Using Munsell Colours",
+ "Author": "Charlotte Wickham ",
+ "Maintainer": "Charlotte Wickham ",
+ "Description": "Provides easy access to, and manipulation of, the Munsell colours. Provides a mapping between Munsell's original notation (e.g. \"5R 5/10\") and hexadecimal strings suitable for use directly in R graphics. Also provides utilities to explore slices through the Munsell colour tree, to transform Munsell colours and display colour palettes.",
+ "Suggests": [
+ "ggplot2",
+ "testthat"
+ ],
+ "Imports": [
+ "colorspace",
+ "methods"
+ ],
+ "License": "MIT + file LICENSE",
+ "URL": "https://cran.r-project.org/package=munsell, https://github.com/cwickham/munsell/",
+ "RoxygenNote": "7.3.1",
+ "Encoding": "UTF-8",
+ "BugReports": "https://github.com/cwickham/munsell/issues",
+ "NeedsCompilation": "no",
+ "Repository": "RSPM"
+ },
+ "mvtnorm": {
+ "Package": "mvtnorm",
+ "Version": "1.3-3",
+ "Source": "Repository",
+ "Title": "Multivariate Normal and t Distributions",
+ "Date": "2025-01-09",
+ "Authors@R": "c(person(\"Alan\", \"Genz\", role = \"aut\"), person(\"Frank\", \"Bretz\", role = \"aut\"), person(\"Tetsuhisa\", \"Miwa\", role = \"aut\"), person(\"Xuefei\", \"Mi\", role = \"aut\"), person(\"Friedrich\", \"Leisch\", role = \"ctb\"), person(\"Fabian\", \"Scheipl\", role = \"ctb\"), person(\"Bjoern\", \"Bornkamp\", role = \"ctb\", comment = c(ORCID = \"0000-0002-6294-8185\")), person(\"Martin\", \"Maechler\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Torsten\", \"Hothorn\", role = c(\"aut\", \"cre\"), email = \"Torsten.Hothorn@R-project.org\", comment = c(ORCID = \"0000-0001-8301-0471\")))",
+ "Description": "Computes multivariate normal and t probabilities, quantiles, random deviates, and densities. Log-likelihoods for multivariate Gaussian models and Gaussian copulae parameterised by Cholesky factors of covariance or precision matrices are implemented for interval-censored and exact data, or a mix thereof. Score functions for these log-likelihoods are available. A class representing multiple lower triangular matrices and corresponding methods are part of this package.",
+ "Imports": [
+ "stats"
+ ],
+ "Depends": [
+ "R(>= 3.5.0)"
+ ],
+ "Suggests": [
+ "qrng",
+ "numDeriv"
+ ],
+ "License": "GPL-2",
+ "URL": "http://mvtnorm.R-forge.R-project.org",
+ "NeedsCompilation": "yes",
+ "Author": "Alan Genz [aut], Frank Bretz [aut], Tetsuhisa Miwa [aut], Xuefei Mi [aut], Friedrich Leisch [ctb], Fabian Scheipl [ctb], Bjoern Bornkamp [ctb] (), Martin Maechler [ctb] (), Torsten Hothorn [aut, cre] ()",
+ "Maintainer": "Torsten Hothorn ",
+ "Repository": "CRAN"
+ },
+ "nlme": {
+ "Package": "nlme",
+ "Version": "3.1-167",
+ "Source": "Repository",
+ "Date": "2025-01-27",
+ "Priority": "recommended",
+ "Title": "Linear and Nonlinear Mixed Effects Models",
+ "Authors@R": "c(person(\"José\", \"Pinheiro\", role = \"aut\", comment = \"S version\"), person(\"Douglas\", \"Bates\", role = \"aut\", comment = \"up to 2007\"), person(\"Saikat\", \"DebRoy\", role = \"ctb\", comment = \"up to 2002\"), person(\"Deepayan\", \"Sarkar\", role = \"ctb\", comment = \"up to 2005\"), person(\"EISPACK authors\", role = \"ctb\", comment = \"src/rs.f\"), person(\"Siem\", \"Heisterkamp\", role = \"ctb\", comment = \"Author fixed sigma\"), person(\"Bert\", \"Van Willigen\",role = \"ctb\", comment = \"Programmer fixed sigma\"), person(\"Johannes\", \"Ranke\", role = \"ctb\", comment = \"varConstProp()\"), person(\"R Core Team\", email = \"R-core@R-project.org\", role = c(\"aut\", \"cre\"), comment = c(ROR = \"02zz1nj61\")))",
+ "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",
+ "Author": "José Pinheiro [aut] (S version), Douglas Bates [aut] (up to 2007), Saikat DebRoy [ctb] (up to 2002), Deepayan Sarkar [ctb] (up to 2005), EISPACK authors [ctb] (src/rs.f), Siem Heisterkamp [ctb] (Author fixed sigma), Bert Van Willigen [ctb] (Programmer fixed sigma), Johannes Ranke [ctb] (varConstProp()), R Core Team [aut, cre] (02zz1nj61)",
+ "Maintainer": "R Core Team ",
+ "Repository": "CRAN"
+ },
+ "officer": {
+ "Package": "officer",
+ "Version": "0.6.7",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Manipulation of Microsoft Word and PowerPoint Documents",
+ "Authors@R": "c( person(\"David\", \"Gohel\", , \"david.gohel@ardata.fr\", role = c(\"aut\", \"cre\")), person(\"Stefan\", \"Moog\", , \"moogs@gmx.de\", role = \"aut\"), person(\"Mark\", \"Heckmann\", , \"heckmann.mark@gmail.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-0736-7417\")), person(\"ArData\", role = \"cph\"), person(\"Frank\", \"Hangler\", , \"frank@plotandscatter.com\", role = \"ctb\", comment = \"function body_replace_all_text\"), person(\"Liz\", \"Sander\", , \"lsander@civisanalytics.com\", role = \"ctb\", comment = \"several documentation fixes\"), person(\"Anton\", \"Victorson\", , \"anton@victorson.se\", role = \"ctb\", comment = \"fixes xml structures\"), person(\"Jon\", \"Calder\", , \"jonmcalder@gmail.com\", role = \"ctb\", comment = \"update vignettes\"), person(\"John\", \"Harrold\", , \"john.m.harrold@gmail.com\", role = \"ctb\", comment = \"function annotate_base\"), person(\"John\", \"Muschelli\", , \"muschellij2@gmail.com\", role = \"ctb\", comment = \"google doc compatibility\"), person(\"Bill\", \"Denney\", , \"wdenney@humanpredictions.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5759-428X\", \"function as.matrix.rpptx\")), person(\"Nikolai\", \"Beck\", , \"beck.nikolai@gmail.com\", role = \"ctb\", comment = \"set speaker notes for .pptx documents\"), person(\"Greg\", \"Leleu\", , \"gregoire.leleu@gmail.com\", role = \"ctb\", comment = \"fields functionality in ppt\"), person(\"Majid\", \"Eismann\", role = \"ctb\"), person(\"Hongyuan\", \"Jia\", , \"hongyuanjia@cqust.edu.cn\", role = \"ctb\", comment = c(ORCID = \"0000-0002-0075-8183\")) )",
+ "Description": "Access and manipulate 'Microsoft Word', 'RTF' and 'Microsoft PowerPoint' documents from R. The package focuses on tabular and graphical reporting from R; it also provides two functions that let users get document content into data objects. A set of functions lets add and remove images, tables and paragraphs of text in new or existing documents. The package does not require any installation of Microsoft products to be able to write Microsoft files.",
+ "License": "MIT + file LICENSE",
+ "URL": "https://ardata-fr.github.io/officeverse/, https://davidgohel.github.io/officer/",
+ "BugReports": "https://github.com/davidgohel/officer/issues",
+ "Imports": [
+ "cli",
+ "graphics",
+ "grDevices",
+ "openssl",
+ "R6",
+ "ragg",
+ "stats",
+ "utils",
+ "uuid",
+ "xml2 (>= 1.1.0)",
+ "zip (>= 2.1.0)"
+ ],
+ "Suggests": [
+ "devEMF",
+ "doconv (>= 0.3.0)",
+ "ggplot2",
+ "knitr",
+ "magick",
+ "rmarkdown",
+ "rsvg",
+ "testthat"
+ ],
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.3.2",
+ "NeedsCompilation": "no",
+ "Author": "David Gohel [aut, cre], Stefan Moog [aut], Mark Heckmann [aut] (), ArData [cph], Frank Hangler [ctb] (function body_replace_all_text), Liz Sander [ctb] (several documentation fixes), Anton Victorson [ctb] (fixes xml structures), Jon Calder [ctb] (update vignettes), John Harrold [ctb] (function annotate_base), John Muschelli [ctb] (google doc compatibility), Bill Denney [ctb] (, function as.matrix.rpptx), Nikolai Beck [ctb] (set speaker notes for .pptx documents), Greg Leleu [ctb] (fields functionality in ppt), Majid Eismann [ctb], Hongyuan Jia [ctb] ()",
+ "Maintainer": "David Gohel ",
+ "Repository": "CRAN"
+ },
+ "openssl": {
+ "Package": "openssl",
+ "Version": "2.3.2",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Toolkit for Encryption, Signatures and Certificates Based on OpenSSL",
+ "Authors@R": "c(person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Oliver\", \"Keyes\", role = \"ctb\"))",
+ "Description": "Bindings to OpenSSL libssl and libcrypto, plus custom SSH key parsers. Supports RSA, DSA and EC curves P-256, P-384, P-521, and curve25519. Cryptographic signatures can either be created and verified manually or via x509 certificates. AES can be used in cbc, ctr or gcm mode for symmetric encryption; RSA for asymmetric (public key) encryption or EC for Diffie Hellman. High-level envelope functions combine RSA and AES for encrypting arbitrary sized data. Other utilities include key generators, hash functions (md5, sha1, sha256, etc), base64 encoder, a secure random number generator, and 'bignum' math methods for manually performing crypto calculations on large multibyte integers.",
+ "License": "MIT + file LICENSE",
+ "URL": "https://jeroen.r-universe.dev/openssl",
+ "BugReports": "https://github.com/jeroen/openssl/issues",
+ "SystemRequirements": "OpenSSL >= 1.0.2",
+ "VignetteBuilder": "knitr",
+ "Imports": [
+ "askpass"
+ ],
+ "Suggests": [
+ "curl",
+ "testthat (>= 2.1.0)",
+ "digest",
+ "knitr",
+ "rmarkdown",
+ "jsonlite",
+ "jose",
+ "sodium"
+ ],
+ "RoxygenNote": "7.3.2",
+ "Encoding": "UTF-8",
+ "NeedsCompilation": "yes",
+ "Author": "Jeroen Ooms [aut, cre] (), Oliver Keyes [ctb]",
+ "Maintainer": "Jeroen Ooms ",
+ "Repository": "CRAN"
+ },
+ "osprey": {
+ "Package": "osprey",
+ "Version": "0.1.16.9018",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "R Package to Create TLGs",
+ "Date": "2025-01-31",
+ "Authors@R": "c( person(\"Nina\", \"Qi\", , \"qit3@gene.com\", role = c(\"aut\", \"cre\")), person(\"Dawid\", \"Kaledkowski\", , \"dawid.kaledkowski@roche.com\", role = \"aut\"), person(\"Chendi\", \"Liao\", , \"chendi.liao@roche.com\", role = \"aut\"), person(\"Liming\", \"Li\", , \"liming.li@roche.com\", role = \"aut\"), person(\"F. Hoffmann-La Roche AG\", role = c(\"cph\", \"fnd\")), person(\"Molly\", \"He\", role = \"ctb\"), person(\"Carolyn\", \"Zhang\", role = \"ctb\"), person(\"Tina\", \"Cho\", role = \"ctb\") )",
+ "Description": "Community effort to collect TLG code and create a catalogue.",
+ "License": "Apache License 2.0 | file LICENSE",
+ "URL": "https://insightsengineering.github.io/osprey/, https://github.com/insightsengineering/osprey/",
+ "BugReports": "https://github.com/insightsengineering/osprey/issues",
+ "Depends": [
+ "dplyr (>= 0.8.0)",
+ "ggplot2 (>= 3.5.0)",
+ "R (>= 3.6)"
+ ],
+ "Imports": [
+ "checkmate (>= 2.1.0)",
+ "cowplot",
+ "DescTools (>= 0.99.53)",
+ "grDevices",
+ "grid",
+ "gridExtra",
+ "gtable (>= 0.3.4)",
+ "methods",
+ "rlang (>= 1.1.0)",
+ "stats",
+ "stringr (>= 1.4.1)",
+ "tibble (>= 2.0.0)",
+ "tidyr (>= 1.0.0)"
+ ],
+ "Suggests": [
+ "knitr (>= 1.42)",
+ "nestcolor (>= 0.1.0)",
+ "rmarkdown (>= 2.23)",
+ "tern (>= 0.7.10)",
+ "testthat (>= 2.0)"
+ ],
+ "Config/Needs/verdepcheck": "tidyverse/dplyr, tidyverse/ggplot2, mllg/checkmate, wilkelab/cowplot, AndriSignorell/DescTools, baptiste/gridExtra, r-lib/gtable, r-lib/rlang, tidyverse/stringr, tidyverse/tibble, tidyverse/tidyr, yihui/knitr, insightsengineering/nestcolor, rstudio/rmarkdown, insightsengineering/tern, r-lib/testthat",
+ "Config/Needs/website": "insightsengineering/nesttemplate",
+ "Encoding": "UTF-8",
+ "Language": "en-US",
+ "LazyData": "true",
+ "Roxygen": "list(markdown = TRUE)",
+ "RoxygenNote": "7.3.2",
+ "Config/pak/sysreqs": "make libicu-dev libssl-dev libx11-dev zlib1g-dev",
+ "Repository": "https://pharmaverse.r-universe.dev",
+ "RemoteUrl": "https://github.com/insightsengineering/osprey",
+ "RemoteRef": "HEAD",
+ "RemoteSha": "eff27e6d997cf23a13d9c3e7d0134d88afebff45",
+ "NeedsCompilation": "no",
+ "Author": "Nina Qi [aut, cre], Dawid Kaledkowski [aut], Chendi Liao [aut], Liming Li [aut], F. Hoffmann-La Roche AG [cph, fnd], Molly He [ctb], Carolyn Zhang [ctb], Tina Cho [ctb]",
+ "Maintainer": "Nina Qi "
+ },
+ "pillar": {
+ "Package": "pillar",
+ "Version": "1.10.1",
+ "Source": "Repository",
+ "Title": "Coloured Formatting for Columns",
+ "Authors@R": "c(person(given = \"Kirill\", family = \"M\\u00fcller\", role = c(\"aut\", \"cre\"), email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(given = \"Hadley\", family = \"Wickham\", role = \"aut\"), person(given = \"RStudio\", role = \"cph\"))",
+ "Description": "Provides 'pillar' and 'colonnade' generics designed for formatting columns of data using the full range of colours 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)",
+ "glue",
+ "lifecycle",
+ "rlang (>= 1.0.2)",
+ "utf8 (>= 1.1.0)",
+ "utils",
+ "vctrs (>= 0.5.0)"
+ ],
+ "Suggests": [
+ "bit64",
+ "DBI",
+ "debugme",
+ "DiagrammeR",
+ "dplyr",
+ "formattable",
+ "ggplot2",
+ "knitr",
+ "lubridate",
+ "nanotime",
+ "nycflights13",
+ "palmerpenguins",
+ "rmarkdown",
+ "scales",
+ "stringi",
+ "survival",
+ "testthat (>= 3.1.1)",
+ "tibble",
+ "units (>= 0.7.2)",
+ "vdiffr",
+ "withr"
+ ],
+ "VignetteBuilder": "knitr",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.3.2.9000",
+ "Config/testthat/edition": "3",
+ "Config/testthat/parallel": "true",
+ "Config/testthat/start-first": "format_multi_fuzz, format_multi_fuzz_2, format_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",
+ "Author": "Kirill Müller [aut, cre] (), Hadley Wickham [aut], RStudio [cph]",
+ "Maintainer": "Kirill Müller ",
+ "Repository": "CRAN"
+ },
+ "pkgbuild": {
+ "Package": "pkgbuild",
+ "Version": "1.4.6",
+ "Source": "Repository",
+ "Title": "Find Tools Needed to Build R Packages",
+ "Authors@R": "c( person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "Provides functions used to build R packages. Locates compilers needed to build R packages on various platforms and ensures the PATH is configured appropriately so R can use them.",
+ "License": "MIT + file LICENSE",
+ "URL": "https://github.com/r-lib/pkgbuild, https://pkgbuild.r-lib.org",
+ "BugReports": "https://github.com/r-lib/pkgbuild/issues",
+ "Depends": [
+ "R (>= 3.5)"
+ ],
+ "Imports": [
+ "callr (>= 3.2.0)",
+ "cli (>= 3.4.0)",
+ "desc",
+ "processx",
+ "R6"
+ ],
+ "Suggests": [
+ "covr",
+ "cpp11",
+ "knitr",
+ "Rcpp",
+ "rmarkdown",
+ "testthat (>= 3.2.0)",
+ "withr (>= 2.3.0)"
+ ],
+ "Config/Needs/website": "tidyverse/tidytemplate",
+ "Config/testthat/edition": "3",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.3.2",
+ "NeedsCompilation": "no",
+ "Author": "Hadley Wickham [aut], Jim Hester [aut], Gábor Csárdi [aut, cre], Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Gábor Csárdi ",
+ "Repository": "CRAN"
+ },
+ "pkgconfig": {
+ "Package": "pkgconfig",
+ "Version": "2.0.3",
+ "Source": "Repository",
+ "Title": "Private Configuration for 'R' Packages",
+ "Author": "Gábor Csárdi",
+ "Maintainer": "Gábor Csárdi ",
+ "Description": "Set configuration options on a per-package basis. Options set by a given package only apply to that package, 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",
+ "Repository": "RSPM"
+ },
+ "pkgload": {
+ "Package": "pkgload",
+ "Version": "1.4.0",
+ "Source": "Repository",
+ "Title": "Simulate Package Installation and Attach",
+ "Authors@R": "c( person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"R Core team\", role = \"ctb\", comment = \"Some namespace and vignette code extracted from base R\") )",
+ "Description": "Simulates the process of installing a package and then attaching it. This is a key part of the 'devtools' package as it allows you to rapidly iterate while developing a package.",
+ "License": "GPL-3",
+ "URL": "https://github.com/r-lib/pkgload, https://pkgload.r-lib.org",
+ "BugReports": "https://github.com/r-lib/pkgload/issues",
+ "Depends": [
+ "R (>= 3.4.0)"
+ ],
+ "Imports": [
+ "cli (>= 3.3.0)",
+ "desc",
+ "fs",
+ "glue",
+ "lifecycle",
+ "methods",
+ "pkgbuild",
+ "processx",
+ "rlang (>= 1.1.1)",
+ "rprojroot",
+ "utils",
+ "withr (>= 2.4.3)"
+ ],
+ "Suggests": [
+ "bitops",
+ "jsonlite",
+ "mathjaxr",
+ "pak",
+ "Rcpp",
+ "remotes",
+ "rstudioapi",
+ "testthat (>= 3.2.1.1)",
+ "usethis"
+ ],
+ "Config/Needs/website": "tidyverse/tidytemplate, ggplot2",
+ "Config/testthat/edition": "3",
+ "Config/testthat/parallel": "TRUE",
+ "Config/testthat/start-first": "dll",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.3.1",
+ "NeedsCompilation": "no",
+ "Author": "Hadley Wickham [aut], Winston Chang [aut], Jim Hester [aut], Lionel Henry [aut, cre], Posit Software, PBC [cph, fnd], R Core team [ctb] (Some namespace and vignette code extracted from base R)",
+ "Maintainer": "Lionel Henry ",
+ "Repository": "RSPM"
+ },
+ "plotly": {
+ "Package": "plotly",
+ "Version": "4.10.4",
+ "Source": "Repository",
+ "Title": "Create Interactive Web Graphics via 'plotly.js'",
+ "Authors@R": "c(person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"cpsievert1@gmail.com\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Chris\", \"Parmer\", role = \"aut\", email = \"chris@plot.ly\"), person(\"Toby\", \"Hocking\", role = \"aut\", email = \"tdhock5@gmail.com\"), person(\"Scott\", \"Chamberlain\", role = \"aut\", email = \"myrmecocystus@gmail.com\"), person(\"Karthik\", \"Ram\", role = \"aut\", email = \"karthik.ram@gmail.com\"), person(\"Marianne\", \"Corvellec\", role = \"aut\", email = \"marianne.corvellec@igdore.org\", comment = c(ORCID = \"0000-0002-1994-3581\")), person(\"Pedro\", \"Despouy\", role = \"aut\", email = \"pedro@plot.ly\"), person(\"Salim\", \"Brüggemann\", role = \"ctb\", email = \"salim-b@pm.me\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Plotly Technologies Inc.\", role = \"cph\"))",
+ "License": "MIT + file LICENSE",
+ "Description": "Create interactive web graphics from 'ggplot2' graphs and/or a custom interface to the (MIT-licensed) JavaScript library 'plotly.js' inspired by the grammar of graphics.",
+ "URL": "https://plotly-r.com, https://github.com/plotly/plotly.R, https://plotly.com/r/",
+ "BugReports": "https://github.com/plotly/plotly.R/issues",
+ "Depends": [
+ "R (>= 3.2.0)",
+ "ggplot2 (>= 3.0.0)"
+ ],
+ "Imports": [
+ "tools",
+ "scales",
+ "httr (>= 1.3.0)",
+ "jsonlite (>= 1.6)",
+ "magrittr",
+ "digest",
+ "viridisLite",
+ "base64enc",
+ "htmltools (>= 0.3.6)",
+ "htmlwidgets (>= 1.5.2.9001)",
+ "tidyr (>= 1.0.0)",
+ "RColorBrewer",
+ "dplyr",
+ "vctrs",
+ "tibble",
+ "lazyeval (>= 0.2.0)",
+ "rlang (>= 0.4.10)",
+ "crosstalk",
+ "purrr",
+ "data.table",
+ "promises"
+ ],
+ "Suggests": [
+ "MASS",
+ "maps",
+ "hexbin",
+ "ggthemes",
+ "GGally",
+ "ggalluvial",
+ "testthat",
+ "knitr",
+ "shiny (>= 1.1.0)",
+ "shinytest (>= 1.3.0)",
+ "curl",
+ "rmarkdown",
+ "Cairo",
+ "broom",
+ "webshot",
+ "listviewer",
+ "dendextend",
+ "sf",
+ "png",
+ "IRdisplay",
+ "processx",
+ "plotlyGeoAssets",
+ "forcats",
+ "withr",
+ "palmerpenguins",
+ "rversions",
+ "reticulate",
+ "rsvg"
+ ],
+ "LazyData": "true",
+ "RoxygenNote": "7.2.3",
+ "Encoding": "UTF-8",
+ "Config/Needs/check": "tidyverse/ggplot2, rcmdcheck, devtools, reshape2",
+ "NeedsCompilation": "no",
+ "Author": "Carson Sievert [aut, cre] (), Chris Parmer [aut], Toby Hocking [aut], Scott Chamberlain [aut], Karthik Ram [aut], Marianne Corvellec [aut] (), Pedro Despouy [aut], Salim Brüggemann [ctb] (), Plotly Technologies Inc. [cph]",
+ "Maintainer": "Carson Sievert ",
+ "Repository": "CRAN"
+ },
+ "prettyunits": {
+ "Package": "prettyunits",
+ "Version": "1.2.0",
+ "Source": "Repository",
+ "Title": "Pretty, Human Readable Formatting of Quantities",
+ "Authors@R": "c( person(\"Gabor\", \"Csardi\", email=\"csardi.gabor@gmail.com\", role=c(\"aut\", \"cre\")), person(\"Bill\", \"Denney\", email=\"wdenney@humanpredictions.com\", role=c(\"ctb\"), comment=c(ORCID=\"0000-0002-5759-428X\")), person(\"Christophe\", \"Regouby\", email=\"christophe.regouby@free.fr\", role=c(\"ctb\")) )",
+ "Description": "Pretty, human readable formatting of quantities. Time intervals: '1337000' -> '15d 11h 23m 20s'. Vague time intervals: '2674000' -> 'about a month ago'. Bytes: '1337' -> '1.34 kB'. Rounding: '99' with 3 significant digits -> '99.0' p-values: '0.00001' -> '<0.0001'. Colors: '#FF0000' -> 'red'. 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",
+ "Author": "Gabor Csardi [aut, cre], Bill Denney [ctb] (), Christophe Regouby [ctb]",
+ "Maintainer": "Gabor Csardi ",
+ "Repository": "RSPM"
+ },
+ "processx": {
+ "Package": "processx",
+ "Version": "3.8.5",
+ "Source": "Repository",
+ "Title": "Execute and Control System Processes",
+ "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\", \"cph\"), comment = c(ORCID = \"0000-0001-7098-9676\")), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"Ascent Digital Services\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "Tools to run system processes in the background. It can check if a background process is running; wait on a background process to finish; get the exit status of finished processes; kill background processes. It can read the standard output and error of the processes, using non-blocking connections. 'processx' can poll a process for standard output or error, with a timeout. It can also poll several processes at once.",
+ "License": "MIT + file LICENSE",
+ "URL": "https://processx.r-lib.org, https://github.com/r-lib/processx",
+ "BugReports": "https://github.com/r-lib/processx/issues",
+ "Depends": [
+ "R (>= 3.4.0)"
+ ],
+ "Imports": [
+ "ps (>= 1.2.0)",
+ "R6",
+ "utils"
+ ],
+ "Suggests": [
+ "callr (>= 3.7.3)",
+ "cli (>= 3.3.0)",
+ "codetools",
+ "covr",
+ "curl",
+ "debugme",
+ "parallel",
+ "rlang (>= 1.0.2)",
+ "testthat (>= 3.0.0)",
+ "webfakes",
+ "withr"
+ ],
+ "Config/Needs/website": "tidyverse/tidytemplate",
+ "Config/testthat/edition": "3",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.3.1.9000",
+ "NeedsCompilation": "yes",
+ "Author": "Gábor Csárdi [aut, cre, cph] (), Winston Chang [aut], Posit Software, PBC [cph, fnd], Ascent Digital Services [cph, fnd]",
+ "Maintainer": "Gábor Csárdi ",
+ "Repository": "CRAN"
+ },
+ "progress": {
+ "Package": "progress",
+ "Version": "1.2.3",
+ "Source": "Repository",
+ "Title": "Terminal Progress Bars",
+ "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Rich\", \"FitzJohn\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "Configurable Progress bars, they may include percentage, elapsed time, and/or the estimated completion time. They work in terminals, in 'Emacs' 'ESS', 'RStudio', 'Windows' 'Rgui' and the 'macOS' 'R.app'. The package also provides a 'C++' 'API', that works with or without 'Rcpp'.",
+ "License": "MIT + file LICENSE",
+ "URL": "https://github.com/r-lib/progress#readme, http://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",
+ "Author": "Gábor Csárdi [aut, cre], Rich FitzJohn [aut], Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Gábor Csárdi ",
+ "Repository": "RSPM"
+ },
+ "promises": {
+ "Package": "promises",
+ "Version": "1.3.2",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Abstractions for Promise-Based Asynchronous Programming",
+ "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "Provides fundamental abstractions for doing asynchronous programming in R using promises. Asynchronous programming is useful for allowing a single R process to orchestrate multiple tasks in the background while also attending to something else. Semantics are similar to 'JavaScript' promises, but with a syntax that is idiomatic R.",
+ "License": "MIT + file LICENSE",
+ "URL": "https://rstudio.github.io/promises/, https://github.com/rstudio/promises",
+ "BugReports": "https://github.com/rstudio/promises/issues",
+ "Imports": [
+ "fastmap (>= 1.1.0)",
+ "later",
+ "magrittr (>= 1.5)",
+ "R6",
+ "Rcpp",
+ "rlang",
+ "stats"
+ ],
+ "Suggests": [
+ "future (>= 1.21.0)",
+ "knitr",
+ "purrr",
+ "rmarkdown",
+ "spelling",
+ "testthat",
+ "vembedr"
+ ],
+ "LinkingTo": [
+ "later",
+ "Rcpp"
+ ],
+ "VignetteBuilder": "knitr",
+ "Config/Needs/website": "rsconnect",
+ "Encoding": "UTF-8",
+ "Language": "en-US",
+ "RoxygenNote": "7.3.2",
+ "NeedsCompilation": "yes",
+ "Author": "Joe Cheng [aut, cre], Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Joe Cheng ",
+ "Repository": "CRAN"
+ },
+ "proxy": {
+ "Package": "proxy",
+ "Version": "0.4-27",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Distance and Similarity Measures",
+ "Authors@R": "c(person(given = \"David\", family = \"Meyer\", role = c(\"aut\", \"cre\"), email = \"David.Meyer@R-project.org\"), person(given = \"Christian\", family = \"Buchta\", role = \"aut\"))",
+ "Description": "Provides an extensible framework for the efficient calculation of auto- and cross-proximities, along with implementations of the most popular ones.",
+ "Depends": [
+ "R (>= 3.4.0)"
+ ],
+ "Imports": [
+ "stats",
+ "utils"
+ ],
+ "Suggests": [
+ "cba"
+ ],
+ "Collate": "registry.R database.R dist.R similarities.R dissimilarities.R util.R seal.R",
+ "License": "GPL-2",
+ "NeedsCompilation": "yes",
+ "Author": "David Meyer [aut, cre], Christian Buchta [aut]",
+ "Maintainer": "David Meyer ",
+ "Repository": "CRAN"
+ },
+ "ps": {
+ "Package": "ps",
+ "Version": "1.8.1",
+ "Source": "Repository",
+ "Title": "List, Query, Manipulate System Processes",
+ "Authors@R": "c( person(\"Jay\", \"Loden\", role = \"aut\"), person(\"Dave\", \"Daeschler\", role = \"aut\"), person(\"Giampaolo\", \"Rodola'\", role = \"aut\"), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Description": "List, query and manipulate all system processes, on 'Windows', 'Linux' and 'macOS'.",
+ "License": "MIT + file LICENSE",
+ "URL": "https://github.com/r-lib/ps, https://ps.r-lib.org/",
+ "BugReports": "https://github.com/r-lib/ps/issues",
+ "Depends": [
+ "R (>= 3.4)"
+ ],
+ "Imports": [
+ "utils"
+ ],
+ "Suggests": [
+ "callr",
+ "covr",
+ "curl",
+ "pillar",
+ "pingr",
+ "processx (>= 3.1.0)",
+ "R6",
+ "rlang",
+ "testthat (>= 3.0.0)",
+ "webfakes",
+ "withr"
+ ],
+ "Biarch": "true",
+ "Config/Needs/website": "tidyverse/tidytemplate",
+ "Config/testthat/edition": "3",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.3.2",
+ "NeedsCompilation": "yes",
+ "Author": "Jay Loden [aut], Dave Daeschler [aut], Giampaolo Rodola' [aut], Gábor Csárdi [aut, cre], Posit Software, PBC [cph, fnd]",
+ "Maintainer": "Gábor Csárdi ",
+ "Repository": "CRAN"
+ },
+ "purrr": {
+ "Package": "purrr",
+ "Version": "1.0.4",
+ "Source": "Repository",
+ "Title": "Functional Programming Tools",
+ "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )",
+ "Description": "A complete and consistent functional programming toolkit for R.",
+ "License": "MIT + file LICENSE",
+ "URL": "https://purrr.tidyverse.org/, https://github.com/tidyverse/purrr",
+ "BugReports": "https://github.com/tidyverse/purrr/issues",
+ "Depends": [
+ "R (>= 4.0)"
+ ],
+ "Imports": [
+ "cli (>= 3.6.1)",
+ "lifecycle (>= 1.0.3)",
+ "magrittr (>= 1.5.0)",
+ "rlang (>= 1.1.1)",
+ "vctrs (>= 0.6.3)"
+ ],
+ "Suggests": [
+ "covr",
+ "dplyr (>= 0.7.8)",
+ "httr",
+ "knitr",
+ "lubridate",
+ "rmarkdown",
+ "testthat (>= 3.0.0)",
+ "tibble",
+ "tidyselect"
+ ],
+ "LinkingTo": [
+ "cli"
+ ],
+ "VignetteBuilder": "knitr",
+ "Biarch": "true",
+ "Config/build/compilation-database": "true",
+ "Config/Needs/website": "tidyverse/tidytemplate, tidyr",
+ "Config/testthat/edition": "3",
+ "Config/testthat/parallel": "TRUE",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.3.2",
+ "NeedsCompilation": "yes",
+ "Author": "Hadley Wickham [aut, cre] (), Lionel Henry [aut], Posit Software, PBC [cph, fnd] (03wc8by49)",
+ "Maintainer": "Hadley Wickham ",
+ "Repository": "CRAN"
+ },
+ "ragg": {
+ "Package": "ragg",
+ "Version": "1.3.3",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Graphic Devices Based on AGG",
+ "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Maxim\", \"Shemanarev\", role = c(\"aut\", \"cph\"), comment = \"Author of AGG\"), person(\"Tony\", \"Juricic\", , \"tonygeek@yahoo.com\", role = c(\"ctb\", \"cph\"), comment = \"Contributor to AGG\"), person(\"Milan\", \"Marusinec\", , \"milan@marusinec.sk\", role = c(\"ctb\", \"cph\"), comment = \"Contributor to AGG\"), person(\"Spencer\", \"Garrett\", role = \"ctb\", comment = \"Contributor to AGG\"), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\")) )",
+ "Maintainer": "Thomas Lin Pedersen ",
+ "Description": "Anti-Grain Geometry (AGG) is a high-quality and high-performance 2D drawing library. The 'ragg' package provides a set of graphic devices based on AGG to use as alternative to the raster devices provided through the 'grDevices' package.",
+ "License": "MIT + file LICENSE",
+ "URL": "https://ragg.r-lib.org, https://github.com/r-lib/ragg",
+ "BugReports": "https://github.com/r-lib/ragg/issues",
+ "Imports": [
+ "systemfonts (>= 1.0.3)",
+ "textshaping (>= 0.3.0)"
+ ],
+ "Suggests": [
+ "covr",
+ "graphics",
+ "grid",
+ "testthat (>= 3.0.0)"
+ ],
+ "LinkingTo": [
+ "systemfonts",
+ "textshaping"
+ ],
+ "Config/Needs/website": "ggplot2, devoid, magick, bench, tidyr, ggridges, hexbin, sessioninfo, pkgdown, tidyverse/tidytemplate",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.3.1",
+ "SystemRequirements": "freetype2, libpng, libtiff, libjpeg",
+ "Config/testthat/edition": "3",
+ "NeedsCompilation": "yes",
+ "Author": "Thomas Lin Pedersen [cre, aut] (), Maxim Shemanarev [aut, cph] (Author of AGG), Tony Juricic [ctb, cph] (Contributor to AGG), Milan Marusinec [ctb, cph] (Contributor to AGG), Spencer Garrett [ctb] (Contributor to AGG), Posit, PBC [cph, fnd]",
+ "Repository": "RSPM"
+ },
+ "rappdirs": {
+ "Package": "rappdirs",
+ "Version": "0.3.3",
+ "Source": "Repository",
+ "Type": "Package",
+ "Title": "Application Directories: Determine Where to Save Data, Caches, and Logs",
+ "Authors@R": "c(person(given = \"Hadley\", family = \"Wickham\", role = c(\"trl\", \"cre\", \"cph\"), email = \"hadley@rstudio.com\"), person(given = \"RStudio\", role = \"cph\"), person(given = \"Sridhar\", family = \"Ratnakumar\", role = \"aut\"), person(given = \"Trent\", family = \"Mick\", role = \"aut\"), person(given = \"ActiveState\", role = \"cph\", comment = \"R/appdir.r, R/cache.r, R/data.r, R/log.r translated from appdirs\"), person(given = \"Eddy\", family = \"Petrisor\", role = \"ctb\"), person(given = \"Trevor\", family = \"Davis\", role = c(\"trl\", \"aut\")), person(given = \"Gabor\", family = \"Csardi\", role = \"ctb\"), person(given = \"Gregory\", family = \"Jefferis\", role = \"ctb\"))",
+ "Description": "An easy way to determine which directories on the users computer you should use to save data, caches and logs. A port of Python's 'Appdirs' () to 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 ActiveState Software Inc. R port copyright Hadley Wickham, RStudio. See file LICENSE for details.",
+ "Encoding": "UTF-8",
+ "RoxygenNote": "7.1.1",
+ "Config/testthat/edition": "3",
+ "NeedsCompilation": "yes",
+ "Author": "Hadley Wickham [trl, cre, cph], RStudio [cph], Sridhar Ratnakumar [aut], Trent Mick [aut], ActiveState [cph] (R/appdir.r, R/cache.r, R/data.r, R/log.r translated from appdirs), Eddy Petrisor [ctb], Trevor Davis [trl, aut], Gabor Csardi [ctb], Gregory Jefferis [ctb]",
+ "Maintainer": "Hadley Wickham