From 891f9e45a78361a02b6723ae30d41bb3775354d1 Mon Sep 17 00:00:00 2001 From: Krystian Igras Date: Tue, 13 Dec 2022 12:33:59 +0000 Subject: [PATCH 01/20] Add query filter. --- R/filter.R | 25 ++++++++++++++ R/source_tblist.R | 84 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 108 insertions(+), 1 deletion(-) diff --git a/R/filter.R b/R/filter.R index 260fb12..bee09d5 100644 --- a/R/filter.R +++ b/R/filter.R @@ -321,3 +321,28 @@ filter.multi_discrete <- function(type, id, name, ..., description = NULL, cb_filter.multi_discrete <- function(source, ...) { UseMethod("cb_filter.multi_discrete", source) } + +#' @rdname filter-types +#' @export +filter.query <- function(type, id, name, ..., active = getOption("cb_active_filter", default = TRUE)) { + args <- append( + environment() %>% as.list() %>% purrr::keep(~ !is.symbol(.x)), + list(...) + ) + + .as_constructor( + function(source) { + do.call( + cb_filter.query, + append(list(source = source), args) + ) + } + ) +} + +#' @rdname filter-source-types +#' @export +cb_filter.query <- function(source, ...) { + UseMethod("cb_filter.query", source) +} + diff --git a/R/source_tblist.R b/R/source_tblist.R index 47a0a20..fe29282 100644 --- a/R/source_tblist.R +++ b/R/source_tblist.R @@ -636,7 +636,7 @@ cb_filter.multi_discrete.tblist <- function( return(params) }, get_data = function(data_object) { - data_object[[dataset]][[variables]] + data_object[[dataset]][, variables] }, get_defaults = function(data_object, cache_object) { list(values = names(cache_object$choices)) @@ -644,6 +644,88 @@ cb_filter.multi_discrete.tblist <- function( ) } +#' @rdname filter-source-types +#' @param dataset Dataset name to be used for filtering. +#' @param variables Dataset variables used for filtering. +#' @param value Value(s) to be used for filtering. +#' @param description Filter description (optional). +#' @param keep_na If `TRUE`, NA values are included. +#' @export +cb_filter.query.tblist <- function( + source, type = "query", id = .gen_id(), name = id, variables, value = NA, + dataset, keep_na = TRUE, ..., description = NULL, active = TRUE) { + args <- list(...) + + def_filter( + type = type, + id = id, + name = name, + input_param = "value", + filter_data = function(data_object) { + if (keep_na && !identical(value, NA)) { + # keep_na !value_na start + data_object[[dataset]] <- data_object[[dataset]] %>% + dplyr::filter(!!queryBuilder::queryToExpr(value, keep_na = keep_na)) + # keep_na !value_na end + } + if (!keep_na && !identical(value, NA)) { + # !keep_na !value_na start + data_object[[dataset]] <- data_object[[dataset]] %>% + dplyr::filter(!!queryBuilder::queryToExpr(value)) + # !keep_na !value_na end + } + attr(data_object[[dataset]], "filtered") <- TRUE # code include + data_object + }, + get_stats = function(data_object, name) { + if (missing(name)) { + name <- c("n_data", "specs", "n_missing") + } + variables <- unlist(variables) + stats <- list( + specs = if ("specs" %in% name) data_object[[dataset]][variables] %>% purrr::imap(shinyQueryBuilder:::stat_from_column), + n_data = if ("n_data" %in% name) data_object[[dataset]][variables] %>% nrow(), + n_missing = if ("n_missing" %in% name) data_object[[dataset]][variables] %>% is.na() %>% colSums() %>% as.list() + ) + if (length(name) == 1) { + return(stats[[name]]) + } else { + return(stats[name]) + } + }, + plot_data = function(data_object) { + if (nrow(data_object[[dataset]])) { + data_object[[dataset]][variables] %>% + purrr::map(table) %>% + purrr::imap_dfc(group_stats) %>% + as.matrix() %>% + graphics::barplot() + } else { + graphics::barplot(0, ylim = c(0, 0.1), main = "No data") + } + }, + get_params = function(name) { + params <- list( + dataset = dataset, + variables = variables, + value = value, + keep_na = keep_na, + description = description, + active = active, + ... + ) + if (!missing(name)) return(params[[name]]) + return(params) + }, + get_data = function(data_object) { + data_object[[dataset]][, variables, drop = FALSE] + }, + get_defaults = function(data_object, cache_object) { + list(value = names(cache_object$choices)) + } + ) +} + #' @export .run_binding.tblist <- function(source, binding_key, data_object_pre, data_object_post, ...) { binding_dataset <- binding_key$update$dataset From 96cf137211d1f69781f838bcc37252cac93a0592 Mon Sep 17 00:00:00 2001 From: Krystian Igras Date: Tue, 13 Dec 2022 12:34:46 +0000 Subject: [PATCH 02/20] Extend dependencies. --- DESCRIPTION | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index e648ee0..80d0667 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -26,7 +26,8 @@ Imports: R6, ggplot2, rlang (>= 1.0), - formatR + formatR, + shinyQuery KeepSource: true RoxygenNote: 7.2.0 Suggests: From ec750691d30cd805da72e8a7eb76ad37bd711880 Mon Sep 17 00:00:00 2001 From: Krystian Igras Date: Tue, 13 Dec 2022 13:44:57 +0000 Subject: [PATCH 03/20] Fix dependencies. --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 80d0667..4c6f6d9 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -27,7 +27,7 @@ Imports: ggplot2, rlang (>= 1.0), formatR, - shinyQuery + queryBuilder KeepSource: true RoxygenNote: 7.2.0 Suggests: From 838086eda8a23fbdd5901e6c9a31cb720c91db64 Mon Sep 17 00:00:00 2001 From: Kamil Koziej Date: Fri, 28 Apr 2023 10:51:22 +0000 Subject: [PATCH 04/20] adding metadata file --- meta_data.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 meta_data.yaml diff --git a/meta_data.yaml b/meta_data.yaml new file mode 100644 index 0000000..5a694c7 --- /dev/null +++ b/meta_data.yaml @@ -0,0 +1,18 @@ +Name: '' +Maintainer: + Name: '' + Email: '' +Description: '' +Contributors: '' +Main Link: https://github.com/r-world-devs/cohortBuilder +Product Stage: stable +Development Stage: maintained +Business Point of Contact: + Name: Krystian Igras + Email: krystian8207@gmail.com +Tags: +- RWD +- RWD Insights Engineering +- R package +- filter +- opensource From 0ed0c7e7f30b51de7b7eac65f06fefd3c0bba785 Mon Sep 17 00:00:00 2001 From: Krystian Igras Date: Tue, 13 Dec 2022 12:33:59 +0000 Subject: [PATCH 05/20] Add query filter. --- R/filter.R | 25 ++++++++++++++ R/source_tblist.R | 84 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 108 insertions(+), 1 deletion(-) diff --git a/R/filter.R b/R/filter.R index 260fb12..bee09d5 100644 --- a/R/filter.R +++ b/R/filter.R @@ -321,3 +321,28 @@ filter.multi_discrete <- function(type, id, name, ..., description = NULL, cb_filter.multi_discrete <- function(source, ...) { UseMethod("cb_filter.multi_discrete", source) } + +#' @rdname filter-types +#' @export +filter.query <- function(type, id, name, ..., active = getOption("cb_active_filter", default = TRUE)) { + args <- append( + environment() %>% as.list() %>% purrr::keep(~ !is.symbol(.x)), + list(...) + ) + + .as_constructor( + function(source) { + do.call( + cb_filter.query, + append(list(source = source), args) + ) + } + ) +} + +#' @rdname filter-source-types +#' @export +cb_filter.query <- function(source, ...) { + UseMethod("cb_filter.query", source) +} + diff --git a/R/source_tblist.R b/R/source_tblist.R index 47a0a20..fe29282 100644 --- a/R/source_tblist.R +++ b/R/source_tblist.R @@ -636,7 +636,7 @@ cb_filter.multi_discrete.tblist <- function( return(params) }, get_data = function(data_object) { - data_object[[dataset]][[variables]] + data_object[[dataset]][, variables] }, get_defaults = function(data_object, cache_object) { list(values = names(cache_object$choices)) @@ -644,6 +644,88 @@ cb_filter.multi_discrete.tblist <- function( ) } +#' @rdname filter-source-types +#' @param dataset Dataset name to be used for filtering. +#' @param variables Dataset variables used for filtering. +#' @param value Value(s) to be used for filtering. +#' @param description Filter description (optional). +#' @param keep_na If `TRUE`, NA values are included. +#' @export +cb_filter.query.tblist <- function( + source, type = "query", id = .gen_id(), name = id, variables, value = NA, + dataset, keep_na = TRUE, ..., description = NULL, active = TRUE) { + args <- list(...) + + def_filter( + type = type, + id = id, + name = name, + input_param = "value", + filter_data = function(data_object) { + if (keep_na && !identical(value, NA)) { + # keep_na !value_na start + data_object[[dataset]] <- data_object[[dataset]] %>% + dplyr::filter(!!queryBuilder::queryToExpr(value, keep_na = keep_na)) + # keep_na !value_na end + } + if (!keep_na && !identical(value, NA)) { + # !keep_na !value_na start + data_object[[dataset]] <- data_object[[dataset]] %>% + dplyr::filter(!!queryBuilder::queryToExpr(value)) + # !keep_na !value_na end + } + attr(data_object[[dataset]], "filtered") <- TRUE # code include + data_object + }, + get_stats = function(data_object, name) { + if (missing(name)) { + name <- c("n_data", "specs", "n_missing") + } + variables <- unlist(variables) + stats <- list( + specs = if ("specs" %in% name) data_object[[dataset]][variables] %>% purrr::imap(shinyQueryBuilder:::stat_from_column), + n_data = if ("n_data" %in% name) data_object[[dataset]][variables] %>% nrow(), + n_missing = if ("n_missing" %in% name) data_object[[dataset]][variables] %>% is.na() %>% colSums() %>% as.list() + ) + if (length(name) == 1) { + return(stats[[name]]) + } else { + return(stats[name]) + } + }, + plot_data = function(data_object) { + if (nrow(data_object[[dataset]])) { + data_object[[dataset]][variables] %>% + purrr::map(table) %>% + purrr::imap_dfc(group_stats) %>% + as.matrix() %>% + graphics::barplot() + } else { + graphics::barplot(0, ylim = c(0, 0.1), main = "No data") + } + }, + get_params = function(name) { + params <- list( + dataset = dataset, + variables = variables, + value = value, + keep_na = keep_na, + description = description, + active = active, + ... + ) + if (!missing(name)) return(params[[name]]) + return(params) + }, + get_data = function(data_object) { + data_object[[dataset]][, variables, drop = FALSE] + }, + get_defaults = function(data_object, cache_object) { + list(value = names(cache_object$choices)) + } + ) +} + #' @export .run_binding.tblist <- function(source, binding_key, data_object_pre, data_object_post, ...) { binding_dataset <- binding_key$update$dataset From 9dd85ae816bd74d35f17a5be1954c047846f1e0c Mon Sep 17 00:00:00 2001 From: Krystian Igras Date: Tue, 13 Dec 2022 12:34:46 +0000 Subject: [PATCH 06/20] Extend dependencies. --- DESCRIPTION | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index cb90a98..22c60e1 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -26,7 +26,8 @@ Imports: glue, ggplot2, rlang (>= 1.0), - formatR + formatR, + shinyQuery KeepSource: true RoxygenNote: 7.2.3 Suggests: From a99703c8ab6b2d84697c31ace3fee07017383ae3 Mon Sep 17 00:00:00 2001 From: Krystian Igras Date: Tue, 13 Dec 2022 13:44:57 +0000 Subject: [PATCH 07/20] Fix dependencies. --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 22c60e1..22c56ef 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -27,7 +27,7 @@ Imports: ggplot2, rlang (>= 1.0), formatR, - shinyQuery + queryBuilder KeepSource: true RoxygenNote: 7.2.3 Suggests: From ddbf9b1f317611cdb1f052b1cef5ba2e546fca37 Mon Sep 17 00:00:00 2001 From: Kamil Koziej Date: Wed, 5 Jun 2024 10:49:12 +0000 Subject: [PATCH 08/20] rebasing to dev and adding queryBuilder to renv --- .Renviron | 1 - DESCRIPTION | 2 +- NAMESPACE | 3 + man/filter-source-types.Rd | 20 ++- man/filter-types.Rd | 9 ++ renv.lock | 271 +++++++++++++++++++++++++------------ 6 files changed, 219 insertions(+), 87 deletions(-) delete mode 100644 .Renviron diff --git a/.Renviron b/.Renviron deleted file mode 100644 index 60035e7..0000000 --- a/.Renviron +++ /dev/null @@ -1 +0,0 @@ -LOCAL=FALSE diff --git a/DESCRIPTION b/DESCRIPTION index 22c56ef..dd932c5 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: cohortBuilder Type: Package Title: Data Source Agnostic Filtering Tools -Version: 0.2.0 +Version: 0.2.0.9000 Authors@R: c(person('Krystian', 'Igras', email = 'krystian8207@gmail.com', diff --git a/NAMESPACE b/NAMESPACE index 3036b60..4435518 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -27,12 +27,14 @@ S3method(cb_filter.date_range,tblist) S3method(cb_filter.discrete,tblist) S3method(cb_filter.discrete_text,tblist) S3method(cb_filter.multi_discrete,tblist) +S3method(cb_filter.query,tblist) S3method(cb_filter.range,tblist) S3method(filter,character) S3method(filter,date_range) S3method(filter,discrete) S3method(filter,discrete_text) S3method(filter,multi_discrete) +S3method(filter,query) S3method(filter,range) S3method(rm_filter,Cohort) S3method(rm_filter,Source) @@ -70,6 +72,7 @@ export(cb_filter.date_range) export(cb_filter.discrete) export(cb_filter.discrete_text) export(cb_filter.multi_discrete) +export(cb_filter.query) export(cb_filter.range) export(code) export(cohort) diff --git a/man/filter-source-types.Rd b/man/filter-source-types.Rd index bf040dc..58b1b4c 100644 --- a/man/filter-source-types.Rd +++ b/man/filter-source-types.Rd @@ -7,11 +7,13 @@ \alias{cb_filter.range} \alias{cb_filter.date_range} \alias{cb_filter.multi_discrete} +\alias{cb_filter.query} \alias{cb_filter.discrete.tblist} \alias{cb_filter.discrete_text.tblist} \alias{cb_filter.range.tblist} \alias{cb_filter.date_range.tblist} \alias{cb_filter.multi_discrete.tblist} +\alias{cb_filter.query.tblist} \title{Filter Source types methods} \usage{ cb_filter.discrete(source, ...) @@ -24,6 +26,8 @@ cb_filter.date_range(source, ...) cb_filter.multi_discrete(source, ...) +cb_filter.query(source, ...) + \method{cb_filter.discrete}{tblist}( source, type = "discrete", @@ -92,6 +96,20 @@ cb_filter.multi_discrete(source, ...) description = NULL, active = TRUE ) + +\method{cb_filter.query}{tblist}( + source, + type = "query", + id = .gen_id(), + name = id, + variables, + value = NA, + dataset, + keep_na = TRUE, + ..., + description = NULL, + active = TRUE +) } \arguments{ \item{source}{Source object.} @@ -121,7 +139,7 @@ cb_filter.multi_discrete(source, ...) \item{values}{Named list of values to be applied in filtering. The names should relate to the ones included in `variables` parameter.} -\item{variables}{Vector of variable names to be used in filtering.} +\item{variables}{Dataset variables used for filtering.} } \value{ List of filter-specific metadata and methods - result of evaluation of diff --git a/man/filter-types.Rd b/man/filter-types.Rd index 07a1063..c44689e 100644 --- a/man/filter-types.Rd +++ b/man/filter-types.Rd @@ -7,6 +7,7 @@ \alias{filter.range} \alias{filter.date_range} \alias{filter.multi_discrete} +\alias{filter.query} \title{Filter types} \usage{ \method{filter}{discrete}( @@ -52,6 +53,14 @@ description = NULL, active = getOption("cb_active_filter", default = TRUE) ) + +\method{filter}{query}( + type, + id, + name, + ..., + active = getOption("cb_active_filter", default = TRUE) +) } \arguments{ \item{type}{Character string defining filter type (having class of the same value as type).} diff --git a/renv.lock b/renv.lock index 36a02fa..cb28604 100644 --- a/renv.lock +++ b/renv.lock @@ -1,6 +1,6 @@ { "R": { - "Version": "4.2.1", + "Version": "4.3.1", "Repositories": [ { "Name": "CRAN", @@ -9,6 +9,14 @@ ] }, "Packages": { + "KernSmooth": { + "Package": "KernSmooth", + "Version": "2.23-22", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "2fecebc3047322fa5930f74fae5de70f", + "Requirements": [] + }, "MASS": { "Package": "MASS", "Version": "7.3-58.2", @@ -21,7 +29,7 @@ "Package": "Matrix", "Version": "1.5-3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "4006dffe49958d2dd591c17e61e60591", "Requirements": [ "lattice" @@ -39,7 +47,7 @@ "Package": "R6", "Version": "2.5.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "470851b6d5d0ac559e9d01bb352b4021", "Requirements": [] }, @@ -55,7 +63,7 @@ "Package": "Rcpp", "Version": "1.0.10", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "e749cae40fa9ef469b6050959517453c", "Requirements": [] }, @@ -63,7 +71,7 @@ "Package": "askpass", "Version": "1.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "e8a22846fff485f0be3770c2da758713", "Requirements": [ "sys" @@ -73,10 +81,18 @@ "Package": "base64enc", "Version": "0.1-3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "543776ae6848fde2f48ff3816d0628bc", "Requirements": [] }, + "boot": { + "Package": "boot", + "Version": "1.3-28.1", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "9a052fbcbe97a98ceb18dbfd30ebd96e", + "Requirements": [] + }, "brew": { "Package": "brew", "Version": "1.0-8", @@ -97,7 +113,7 @@ "Package": "bslib", "Version": "0.4.2", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "a7fbf03946ad741129dc81098722fca1", "Requirements": [ "base64enc", @@ -115,7 +131,7 @@ "Package": "cachem", "Version": "1.0.6", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "648c5b3d71e6a37e3043617489a0a0e9", "Requirements": [ "fastmap", @@ -126,19 +142,29 @@ "Package": "callr", "Version": "3.7.3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "9b2191ede20fa29828139b9900922e51", "Requirements": [ "R6", "processx" ] }, + "class": { + "Package": "class", + "Version": "7.3-22", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "f91f6b29f38b8c280f2b9477787d4bb2", + "Requirements": [ + "MASS" + ] + }, "cli": { "Package": "cli", - "Version": "3.6.0", + "Version": "3.6.2", "Source": "Repository", "Repository": "CRAN", - "Hash": "3177a5a16c243adc199ba33117bd9657", + "Hash": "1216ac65ac55ec0058a6f75d7ca0fd52", "Requirements": [] }, "clipr": { @@ -149,11 +175,27 @@ "Hash": "3f038e5ac7f41d4ac41ce658c85e3042", "Requirements": [] }, + "cluster": { + "Package": "cluster", + "Version": "2.1.4", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "5edbbabab6ce0bf7900a74fd4358628e", + "Requirements": [] + }, + "codetools": { + "Package": "codetools", + "Version": "0.2-19", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "c089a619a7fae175d149d89164f8c7d8", + "Requirements": [] + }, "colorspace": { "Package": "colorspace", "Version": "2.1-0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "f20c47fd52fae58b4e377c37bb8c335b", "Requirements": [] }, @@ -177,7 +219,7 @@ "Package": "crayon", "Version": "1.5.2", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "e8a1e41acf02548751f45c718d55aa6a", "Requirements": [] }, @@ -199,7 +241,7 @@ "Package": "curl", "Version": "5.0.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "e4f97056611e8e6b8b852d13b7400cf1", "Requirements": [] }, @@ -207,7 +249,7 @@ "Package": "desc", "Version": "1.4.2", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "6b9602c7ebbe87101a9c8edb6e8b6d21", "Requirements": [ "R6", @@ -219,7 +261,7 @@ "Package": "devtools", "Version": "2.4.5", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "ea5bc8b4a6a01e4f12d98b58329930bb", "Requirements": [ "cli", @@ -249,7 +291,7 @@ "Package": "diffobj", "Version": "0.3.5", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "bcaa8b95f8d7d01a5dedfd959ce88ab8", "Requirements": [ "crayon" @@ -284,10 +326,10 @@ }, "dplyr": { "Package": "dplyr", - "Version": "1.1.0", + "Version": "1.1.4", "Source": "Repository", "Repository": "CRAN", - "Hash": "d3c34618017e7ae252d46d79a1b9ec32", + "Hash": "fedd9d00c2944ff00a0e2696ccf048ec", "Requirements": [ "R6", "cli", @@ -306,7 +348,7 @@ "Package": "ellipsis", "Version": "0.3.2", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077", "Requirements": [ "rlang" @@ -322,10 +364,10 @@ }, "fansi": { "Package": "fansi", - "Version": "1.0.4", + "Version": "1.0.6", "Source": "Repository", "Repository": "CRAN", - "Hash": "1d9e7ad3c8312a192dea7d3db0274fde", + "Hash": "962174cf2aeb5b9eea581522286a911f", "Requirements": [] }, "farver": { @@ -348,18 +390,26 @@ "Package": "fontawesome", "Version": "0.5.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "e80750aec5717dedc019ad7ee40e4a7c", "Requirements": [ "htmltools", "rlang" ] }, + "foreign": { + "Package": "foreign", + "Version": "0.8-85", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "26a24dde1722321b78f10d3bf42538d6", + "Requirements": [] + }, "formatR": { "Package": "formatR", "Version": "1.14", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "63cb26d12517c7863f5abb006c5e0f25", "Requirements": [] }, @@ -367,7 +417,7 @@ "Package": "fs", "Version": "1.6.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "f4dcd23b67e33d851d2079f703e8b985", "Requirements": [] }, @@ -375,7 +425,7 @@ "Package": "generics", "Version": "0.1.3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "15e9634c0fcd294799e9b2e929ed1b86", "Requirements": [] }, @@ -383,7 +433,7 @@ "Package": "gert", "Version": "1.9.2", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "9122b3958e749badb5c939f498038b57", "Requirements": [ "askpass", @@ -433,16 +483,16 @@ "Package": "gitcreds", "Version": "0.1.2", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "ab08ac61f3e1be454ae21911eb8bc2fe", "Requirements": [] }, "glue": { "Package": "glue", - "Version": "1.6.2", + "Version": "1.7.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "4f2596dfb05dac67b9dc558e5c6fba2e", + "Hash": "e0b3a53876554bd45879e596cdb10a52", "Requirements": [] }, "gtable": { @@ -457,7 +507,7 @@ "Package": "highr", "Version": "0.10", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "06230136b2d2b9ba5805e1963fa6e890", "Requirements": [ "xfun" @@ -467,7 +517,7 @@ "Package": "htmltools", "Version": "0.5.4", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "9d27e99cc90bd701c0a7a63e5923f9b7", "Requirements": [ "base64enc", @@ -481,7 +531,7 @@ "Package": "htmlwidgets", "Version": "1.6.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "b677ee5954471eaa974c0d099a343a1a", "Requirements": [ "htmltools", @@ -508,7 +558,7 @@ "Package": "httr", "Version": "1.4.4", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "57557fac46471f0dbbf44705cc6a5c8c", "Requirements": [ "R6", @@ -538,7 +588,7 @@ "Package": "jquerylib", "Version": "0.1.4", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "5aab57a3bd297eee1c1d862735972182", "Requirements": [ "htmltools" @@ -588,16 +638,16 @@ "Package": "lattice", "Version": "0.20-45", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "b64cdbb2b340437c4ee047a1f4c4377b", "Requirements": [] }, "lifecycle": { "Package": "lifecycle", - "Version": "1.0.3", + "Version": "1.0.4", "Source": "Repository", "Repository": "CRAN", - "Hash": "001cecbeac1cff9301bdc3775ee46a86", + "Hash": "b8552d117e1b808b09a832f589b79035", "Requirements": [ "cli", "glue", @@ -608,7 +658,7 @@ "Package": "magrittr", "Version": "2.0.3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "7ce2733a9826b3aeb1775d56fd305472", "Requirements": [] }, @@ -616,7 +666,7 @@ "Package": "markdown", "Version": "1.5", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "d209cfd1f4ff7260eae5a7f07da3aa4f", "Requirements": [ "commonmark", @@ -627,7 +677,7 @@ "Package": "memoise", "Version": "2.0.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c", "Requirements": [ "cachem", @@ -649,7 +699,7 @@ "Package": "mime", "Version": "0.12", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "18e9c28c1d3ca1560ce30658b22ce104", "Requirements": [] }, @@ -657,7 +707,7 @@ "Package": "miniUI", "Version": "0.1.1.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "fec5f52652d60615fdb3957b3d74324a", "Requirements": [ "htmltools", @@ -678,17 +728,25 @@ "Package": "nlme", "Version": "3.1-162", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "0984ce8da8da9ead8643c5cbbb60f83e", "Requirements": [ "lattice" ] }, + "nnet": { + "Package": "nnet", + "Version": "7.3-19", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "2c797b46eea7fb58ede195bc0b1f1138", + "Requirements": [] + }, "openssl": { "Package": "openssl", "Version": "2.0.5", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "b04c27110bf367b4daa93f34f3d58e75", "Requirements": [ "askpass" @@ -704,10 +762,10 @@ }, "pillar": { "Package": "pillar", - "Version": "1.8.1", + "Version": "1.9.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "f2316df30902c81729ae9de95ad5a608", + "Hash": "15da5a8412f317beeee6175fbc76f4bb", "Requirements": [ "cli", "fansi", @@ -740,7 +798,7 @@ "Package": "pkgconfig", "Version": "2.0.3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "01f28d4278f15c76cddbea05899c5d6f", "Requirements": [] }, @@ -748,7 +806,7 @@ "Package": "pkgdown", "Version": "2.0.7", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "16fa15449c930bf3a7761d3c68f8abf9", "Requirements": [ "bslib", @@ -810,7 +868,7 @@ "Package": "processx", "Version": "3.8.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "a33ee2d9bf07564efb888ad98410da84", "Requirements": [ "R6", @@ -854,16 +912,16 @@ "Package": "ps", "Version": "1.7.2", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "68dd03d98a5efd1eb3012436de45ba83", "Requirements": [] }, "purrr": { "Package": "purrr", - "Version": "1.0.1", + "Version": "1.0.2", "Source": "Repository", "Repository": "CRAN", - "Hash": "d71c815267c640f17ddbf7f16144b4bb", + "Hash": "1cba04a4e9414bdefc9dcaa99649a8dc", "Requirements": [ "cli", "lifecycle", @@ -872,6 +930,25 @@ "vctrs" ] }, + "queryBuilder": { + "Package": "queryBuilder", + "Version": "0.1.0", + "Source": "GitLab", + "RemoteType": "gitlab", + "RemoteHost": "https://code.roche.com", + "RemoteRepo": "queryBuilder", + "RemoteUsername": "RWDInsightsEngineering", + "RemoteRef": "HEAD", + "RemoteSha": "7047766a342f1280fea66f4665dbabb874ee44c8", + "Hash": "d5ff37fa695a9580158898c61f8476d7", + "Requirements": [ + "dplyr", + "glue", + "magrittr", + "purrr", + "rlang" + ] + }, "ragg": { "Package": "ragg", "Version": "1.2.5", @@ -887,7 +964,7 @@ "Package": "rappdirs", "Version": "0.3.3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "5e3c5dc0b071b21fa128676560dbe94d", "Requirements": [] }, @@ -895,7 +972,7 @@ "Package": "rcmdcheck", "Version": "1.4.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "8f25ebe2ec38b1f2aef3b0d2ef76f6c4", "Requirements": [ "R6", @@ -916,7 +993,7 @@ "Package": "rematch2", "Version": "2.1.2", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "76c9e04c712a05848ae7a23d2f170a40", "Requirements": [ "tibble" @@ -926,7 +1003,7 @@ "Package": "remotes", "Version": "2.4.2", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "227045be9aee47e6dda9bb38ac870d67", "Requirements": [] }, @@ -945,10 +1022,10 @@ }, "rlang": { "Package": "rlang", - "Version": "1.0.6", + "Version": "1.1.4", "Source": "Repository", "Repository": "CRAN", - "Hash": "4ed1f8336c8d52c3e750adcdc57228a7", + "Hash": "3eec01f8b1dee337674b2e34ab1f9bc1", "Requirements": [] }, "rmarkdown": { @@ -974,7 +1051,7 @@ "Package": "roxygen2", "Version": "7.2.3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "7b153c746193b143c14baa072bae4e27", "Requirements": [ "R6", @@ -993,11 +1070,19 @@ "xml2" ] }, + "rpart": { + "Package": "rpart", + "Version": "4.1.21", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "d5bc1a16e01e50e08581f0c362d3955d", + "Requirements": [] + }, "rprojroot": { "Package": "rprojroot", "Version": "2.0.3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "1de7ab598047a87bba48434ba35d497d", "Requirements": [] }, @@ -1029,7 +1114,7 @@ "Package": "rversions", "Version": "2.1.2", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "a9881dfed103e83f9de151dc17002cd1", "Requirements": [ "curl", @@ -1040,7 +1125,7 @@ "Package": "sass", "Version": "0.4.5", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "2bb4371a4c80115518261866eab6ab11", "Requirements": [ "R6", @@ -1071,7 +1156,7 @@ "Package": "sessioninfo", "Version": "1.2.2", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "3f9796a8d0a0e8c6eb49a4b029359d1f", "Requirements": [ "cli" @@ -1110,15 +1195,23 @@ "Package": "sourcetools", "Version": "0.1.7-1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "5f5a7629f956619d519205ec475fe647", "Requirements": [] }, + "spatial": { + "Package": "spatial", + "Version": "7.3-17", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "1229a01b4ec059e9f2396724f2ec9010", + "Requirements": [] + }, "stringi": { "Package": "stringi", "Version": "1.7.12", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "ca8bd84263c77310739d2cf64d84d7c9", "Requirements": [] }, @@ -1126,7 +1219,7 @@ "Package": "stringr", "Version": "1.5.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "671a4d384ae9d32fc47a14e98bfa3dc8", "Requirements": [ "cli", @@ -1138,6 +1231,16 @@ "vctrs" ] }, + "survival": { + "Package": "survival", + "Version": "3.5-7", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "b8e943d262c3da0b0febd3e04517c197", + "Requirements": [ + "Matrix" + ] + }, "sys": { "Package": "sys", "Version": "3.4.1", @@ -1150,7 +1253,7 @@ "Package": "systemfonts", "Version": "1.0.4", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "90b28393209827327de889f49935140a", "Requirements": [ "cpp11" @@ -1196,10 +1299,10 @@ }, "tibble": { "Package": "tibble", - "Version": "3.1.8", + "Version": "3.2.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "56b6934ef0f8c68225949a8672fe1a8f", + "Hash": "a84e2cc86d07289b3b6f5069df7a004c", "Requirements": [ "fansi", "lifecycle", @@ -1214,7 +1317,7 @@ "Package": "tidyr", "Version": "1.3.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "e47debdc7ce599b070c8e78e8ac0cfcf", "Requirements": [ "cli", @@ -1233,10 +1336,10 @@ }, "tidyselect": { "Package": "tidyselect", - "Version": "1.2.0", + "Version": "1.2.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "79540e5fcd9e0435af547d885f184fd5", + "Hash": "829f27b9c4919c16b593794a6344d6c0", "Requirements": [ "cli", "glue", @@ -1250,7 +1353,7 @@ "Package": "tinytex", "Version": "0.44", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "c0f007e2eeed7722ce13d42b84a22e07", "Requirements": [ "xfun" @@ -1260,7 +1363,7 @@ "Package": "urlchecker", "Version": "1.0.1", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "409328b8e1253c8d729a7836fe7f7a16", "Requirements": [ "cli", @@ -1298,18 +1401,18 @@ }, "utf8": { "Package": "utf8", - "Version": "1.2.3", + "Version": "1.2.4", "Source": "Repository", "Repository": "CRAN", - "Hash": "1fe17157424bb09c48a8b3b550c753bc", + "Hash": "62b65c52671e6665f803ff02954446e9", "Requirements": [] }, "vctrs": { "Package": "vctrs", - "Version": "0.5.2", + "Version": "0.6.5", "Source": "Repository", "Repository": "CRAN", - "Hash": "e4ffa94ceed5f124d429a5a5f0f5b378", + "Hash": "c03fa420630029418f7e6da3667aac4a", "Requirements": [ "cli", "glue", @@ -1351,10 +1454,10 @@ }, "withr": { "Package": "withr", - "Version": "2.5.0", + "Version": "3.0.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "c0e49a9760983e81e55cdd9be92e7182", + "Hash": "d31b6c62c10dcf11ec530ca6b0dd5d35", "Requirements": [] }, "xfun": { @@ -1369,7 +1472,7 @@ "Package": "xml2", "Version": "1.3.3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "40682ed6a969ea5abfd351eb67833adc", "Requirements": [] }, @@ -1377,7 +1480,7 @@ "Package": "xopen", "Version": "1.0.0", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "6c85f015dee9cc7710ddd20f86881f58", "Requirements": [ "processx" @@ -1387,7 +1490,7 @@ "Package": "xtable", "Version": "1.8-4", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "b8acdf8af494d9ec19ccb2481a9b11c2", "Requirements": [] }, From 26d10b6cd6575a79e31d720efbfaae0aec23a6b5 Mon Sep 17 00:00:00 2001 From: Kamil Koziej Date: Wed, 5 Jun 2024 10:55:59 +0000 Subject: [PATCH 09/20] correcting renv --- renv.lock | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/renv.lock b/renv.lock index cb28604..b3024c3 100644 --- a/renv.lock +++ b/renv.lock @@ -930,25 +930,6 @@ "vctrs" ] }, - "queryBuilder": { - "Package": "queryBuilder", - "Version": "0.1.0", - "Source": "GitLab", - "RemoteType": "gitlab", - "RemoteHost": "https://code.roche.com", - "RemoteRepo": "queryBuilder", - "RemoteUsername": "RWDInsightsEngineering", - "RemoteRef": "HEAD", - "RemoteSha": "7047766a342f1280fea66f4665dbabb874ee44c8", - "Hash": "d5ff37fa695a9580158898c61f8476d7", - "Requirements": [ - "dplyr", - "glue", - "magrittr", - "purrr", - "rlang" - ] - }, "ragg": { "Package": "ragg", "Version": "1.2.5", From 42ab107da133bc228ed688238468c9975f43a471 Mon Sep 17 00:00:00 2001 From: Krystian Igras Date: Mon, 9 Sep 2024 14:16:37 +0000 Subject: [PATCH 10/20] Test query filter integration and extend filter print method. --- DESCRIPTION | 2 +- NAMESPACE | 3 + NEWS.md | 5 + R/filter.R | 28 +- R/source_tblist.R | 3 +- R/step.R | 2 +- examples/query-filter.R | 49 ++++ man/dot-print_filter.Rd | 16 ++ renv.lock | 12 +- renv/.gitignore | 1 + renv/activate.R | 571 ++++++++++++++++++++++++++++++---------- renv/settings.json | 21 ++ 12 files changed, 557 insertions(+), 156 deletions(-) create mode 100644 examples/query-filter.R create mode 100644 man/dot-print_filter.Rd create mode 100644 renv/settings.json diff --git a/DESCRIPTION b/DESCRIPTION index dd932c5..50d0db1 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: cohortBuilder Type: Package Title: Data Source Agnostic Filtering Tools -Version: 0.2.0.9000 +Version: 0.2.2 Authors@R: c(person('Krystian', 'Igras', email = 'krystian8207@gmail.com', diff --git a/NAMESPACE b/NAMESPACE index 4435518..d52987b 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -14,6 +14,8 @@ S3method(.post_binding,default) S3method(.post_filtering,default) S3method(.pre_filtering,default) S3method(.pre_filtering,tblist) +S3method(.print_filter,default) +S3method(.print_filter,query) S3method(.repro_code_tweak,tblist) S3method(.run_binding,default) S3method(.run_binding,tblist) @@ -57,6 +59,7 @@ export(.init_step) export(.post_binding) export(.post_filtering) export(.pre_filtering) +export(.print_filter) export(.repro_code_tweak) export(.run_binding) export(Source) diff --git a/NEWS.md b/NEWS.md index 7f2038f..74875ea 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,8 @@ +# cohortBuilder 0.2.2 + +* Add new filter of type `"query"` that allows to configure complex filtering rules with `queryBuilder` package. +* Add filter-focused `.print_filter` method responsible for printing filter values when calling `sum_up` on cohort. + # cohortBuilder 0.2.0 * Changed the way reproducible code is returned. Now more flexibility is allowed with using e.g. `.repro_code_tweak` method. diff --git a/R/filter.R b/R/filter.R index bee09d5..d3719fb 100644 --- a/R/filter.R +++ b/R/filter.R @@ -109,7 +109,17 @@ new_filter <- function(filter_type, source_type, input_param = "value", extra_pa utils::file.edit(file) } -print_filter <- function(filter, data_objects) { +#' Method for printing filter details +#' +#' @param filter The defined filter object. +#' @param data_objects List of data objects for the underlying filtering step. +#' @export +.print_filter <- function(filter, data_objects) { + UseMethod(".print_filter", filter) +} + +#' @export +.print_filter.default <- function(filter, data_objects) { meta <- filter$get_params() params <- meta[setdiff(names(meta), static_params)] cat(glue::glue("-> Filter ID: {filter$id}"), sep = "\n") @@ -346,3 +356,19 @@ cb_filter.query <- function(source, ...) { UseMethod("cb_filter.query", source) } +#' @export +.print_filter.query <- function(filter, data_objects) { + meta <- filter$get_params() + params <- meta[setdiff(names(meta), static_params)] + cat(glue::glue("-> Filter ID: {filter$id}"), sep = "\n") + cat(glue::glue(" Filter Type: {filter$type}"), sep = "\n") + cat(" Filter Parameters:", sep = "\n") + for (param_name in names(params)) { + if (param_name == "value") { + cat(glue::glue(" {param_name}: {deparse(queryBuilder::queryToExpr(params[[param_name]]))}"), sep = "\n") + } else { + cat(glue::glue(" {param_name}: {paste(params[[param_name]], collapse = ', ')}"), sep = "\n") + } + } +} + diff --git a/R/source_tblist.R b/R/source_tblist.R index fe29282..e4227d9 100644 --- a/R/source_tblist.R +++ b/R/source_tblist.R @@ -682,8 +682,9 @@ cb_filter.query.tblist <- function( name <- c("n_data", "specs", "n_missing") } variables <- unlist(variables) + stat_from_column <- base::get("stat_from_column", envir = asNamespace("queryBuilder"), inherits = FALSE) stats <- list( - specs = if ("specs" %in% name) data_object[[dataset]][variables] %>% purrr::imap(shinyQueryBuilder:::stat_from_column), + specs = if ("specs" %in% name) data_object[[dataset]][variables] %>% purrr::imap(stat_from_column), n_data = if ("n_data" %in% name) data_object[[dataset]][variables] %>% nrow(), n_missing = if ("n_missing" %in% name) data_object[[dataset]][variables] %>% is.na() %>% colSums() %>% as.list() ) diff --git a/R/step.R b/R/step.R index b98ce5e..3f663bf 100644 --- a/R/step.R +++ b/R/step.R @@ -106,7 +106,7 @@ next_step <- function(idx) { print_step <- function(step) { cat(glue::glue(">> Step ID: {step$id}"), sep = "\n") step$filters %>% - purrr::walk(print_filter, data_objects = NULL) + purrr::walk(.print_filter, data_objects = NULL) } #' Create filtering step diff --git a/examples/query-filter.R b/examples/query-filter.R new file mode 100644 index 0000000..a5ccca6 --- /dev/null +++ b/examples/query-filter.R @@ -0,0 +1,49 @@ +library(queryBuilder) +library(cohortBuilder) +library(magrittr) + +my_query <- queryGroup( + condition = "AND", + queryRule("Sepal.Length", "greater", 5), + queryGroup( + condition = "OR", + queryRule( + field = "Petal.Length", + operator = "greater", + value = 3 + ), + queryRule( + field = "Petal.Width", + operator = "less", + value = 1 + ) + ) +) +queryToExpr(my_query) + +coh <- cohort( + source = set_source( + tblist( + iris = iris, mtcars = mtcars + ) + ) +) %>% + add_filter( + filter("discrete", id = "species", dataset = "iris", variable = "Species", value = c("setosa", "versicolor")) + ) %>% + add_filter( + filter( + "query", id = "gen_query", dataset = "iris", variables = c("Sepal.Length", "Petal.Length", "Petal.Width"), + value = my_query, keep_na = FALSE + ) + ) + +coh$sum_up_state() +sum_up(coh) + +coh <- coh %>% run() + +coh %>% code(include_methods = NULL) + +get_data(coh, 1, state = "post") + diff --git a/man/dot-print_filter.Rd b/man/dot-print_filter.Rd new file mode 100644 index 0000000..928d01b --- /dev/null +++ b/man/dot-print_filter.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/filter.R +\name{.print_filter} +\alias{.print_filter} +\title{Method for printing filter details} +\usage{ +.print_filter(filter, data_objects) +} +\arguments{ +\item{filter}{The defined filter object.} + +\item{data_objects}{List of data objects for the underlying filtering step.} +} +\description{ +Method for printing filter details +} diff --git a/renv.lock b/renv.lock index b3024c3..029dc7f 100644 --- a/renv.lock +++ b/renv.lock @@ -990,16 +990,8 @@ }, "renv": { "Package": "renv", - "Version": "0.15.4-4", - "Source": "GitHub", - "RemoteType": "github", - "RemoteHost": "api.github.com", - "RemoteUsername": "rstudio", - "RemoteRepo": "renv", - "RemoteRef": "0.15.4-4", - "RemoteSha": "7243b4810f58d4fc11025a1eedf8e9ca8e21fe94", - "Hash": "4550413885e5598c957fe56913718df0", - "Requirements": [] + "Version": "1.0.7", + "Source": "Repository" }, "rlang": { "Package": "rlang", diff --git a/renv/.gitignore b/renv/.gitignore index cb06864..63b9ec4 100644 --- a/renv/.gitignore +++ b/renv/.gitignore @@ -1,3 +1,4 @@ +sandbox/ cellar/ library/ local/ diff --git a/renv/activate.R b/renv/activate.R index e5d141a..d13f993 100644 --- a/renv/activate.R +++ b/renv/activate.R @@ -2,10 +2,28 @@ local({ # the requested version of renv - version <- "0.15.4-4" + version <- "1.0.7" + attr(version, "sha") <- NULL # the project directory - project <- getwd() + project <- Sys.getenv("RENV_PROJECT") + if (!nzchar(project)) + project <- getwd() + + # use start-up diagnostics if enabled + diagnostics <- Sys.getenv("RENV_STARTUP_DIAGNOSTICS", unset = "FALSE") + if (diagnostics) { + start <- Sys.time() + profile <- tempfile("renv-startup-", fileext = ".Rprof") + utils::Rprof(profile) + on.exit({ + utils::Rprof(NULL) + elapsed <- signif(difftime(Sys.time(), start, units = "auto"), digits = 2L) + writeLines(sprintf("- renv took %s to run the autoloader.", format(elapsed))) + writeLines(sprintf("- Profile: %s", profile)) + print(utils::summaryRprof(profile)) + }, add = TRUE) + } # figure out whether the autoloader is enabled enabled <- local({ @@ -15,6 +33,14 @@ local({ if (!is.null(override)) return(override) + # if we're being run in a context where R_LIBS is already set, + # don't load -- presumably we're being run as a sub-process and + # the parent process has already set up library paths for us + rcmd <- Sys.getenv("R_CMD", unset = NA) + rlibs <- Sys.getenv("R_LIBS", unset = NA) + if (!is.na(rlibs) && !is.na(rcmd)) + return(FALSE) + # next, check environment variables # TODO: prefer using the configuration one in the future envvars <- c( @@ -34,9 +60,22 @@ local({ }) - if (!enabled) + # bail if we're not enabled + if (!enabled) { + + # if we're not enabled, we might still need to manually load + # the user profile here + profile <- Sys.getenv("R_PROFILE_USER", unset = "~/.Rprofile") + if (file.exists(profile)) { + cfg <- Sys.getenv("RENV_CONFIG_USER_PROFILE", unset = "TRUE") + if (tolower(cfg) %in% c("true", "t", "1")) + sys.source(profile, envir = globalenv()) + } + return(FALSE) + } + # avoid recursion if (identical(getOption("renv.autoloader.running"), TRUE)) { warning("ignoring recursive attempt to run renv autoloader") @@ -54,27 +93,96 @@ local({ # mask 'utils' packages, will come first on the search path library(utils, lib.loc = .Library) - # unload renv if it's already been laoded + # unload renv if it's already been loaded if ("renv" %in% loadedNamespaces()) unloadNamespace("renv") # load bootstrap tools `%||%` <- function(x, y) { - if (is.environment(x) || length(x)) x else y + if (is.null(x)) y else x + } + + catf <- function(fmt, ..., appendLF = TRUE) { + + quiet <- getOption("renv.bootstrap.quiet", default = FALSE) + if (quiet) + return(invisible()) + + msg <- sprintf(fmt, ...) + cat(msg, file = stdout(), sep = if (appendLF) "\n" else "") + + invisible(msg) + + } + + header <- function(label, + ..., + prefix = "#", + suffix = "-", + n = min(getOption("width"), 78)) + { + label <- sprintf(label, ...) + n <- max(n - nchar(label) - nchar(prefix) - 2L, 8L) + if (n <= 0) + return(paste(prefix, label)) + + tail <- paste(rep.int(suffix, n), collapse = "") + paste0(prefix, " ", label, " ", tail) + + } + + heredoc <- function(text, leave = 0) { + + # remove leading, trailing whitespace + trimmed <- gsub("^\\s*\\n|\\n\\s*$", "", text) + + # split into lines + lines <- strsplit(trimmed, "\n", fixed = TRUE)[[1L]] + + # compute common indent + indent <- regexpr("[^[:space:]]", lines) + common <- min(setdiff(indent, -1L)) - leave + paste(substring(lines, common), collapse = "\n") + + } + + startswith <- function(string, prefix) { + substring(string, 1, nchar(prefix)) == prefix } bootstrap <- function(version, library) { + friendly <- renv_bootstrap_version_friendly(version) + section <- header(sprintf("Bootstrapping renv %s", friendly)) + catf(section) + # attempt to download renv - tarball <- tryCatch(renv_bootstrap_download(version), error = identity) - if (inherits(tarball, "error")) - stop("failed to download renv ", version) + catf("- Downloading renv ... ", appendLF = FALSE) + withCallingHandlers( + tarball <- renv_bootstrap_download(version), + error = function(err) { + catf("FAILED") + stop("failed to download:\n", conditionMessage(err)) + } + ) + catf("OK") + on.exit(unlink(tarball), add = TRUE) # now attempt to install - status <- tryCatch(renv_bootstrap_install(version, tarball, library), error = identity) - if (inherits(status, "error")) - stop("failed to install renv ", version) + catf("- Installing renv ... ", appendLF = FALSE) + withCallingHandlers( + status <- renv_bootstrap_install(version, tarball, library), + error = function(err) { + catf("FAILED") + stop("failed to install:\n", conditionMessage(err)) + } + ) + catf("OK") + # add empty line to break up bootstrapping from normal output + catf("") + + return(invisible()) } renv_bootstrap_tests_running <- function() { @@ -83,28 +191,32 @@ local({ renv_bootstrap_repos <- function() { + # get CRAN repository + cran <- getOption("renv.repos.cran", "https://cloud.r-project.org") + # check for repos override repos <- Sys.getenv("RENV_CONFIG_REPOS_OVERRIDE", unset = NA) - if (!is.na(repos)) + if (!is.na(repos)) { + + # check for RSPM; if set, use a fallback repository for renv + rspm <- Sys.getenv("RSPM", unset = NA) + if (identical(rspm, repos)) + repos <- c(RSPM = rspm, CRAN = cran) + return(repos) + } + # check for lockfile repositories repos <- tryCatch(renv_bootstrap_repos_lockfile(), error = identity) if (!inherits(repos, "error") && length(repos)) return(repos) - # if we're testing, re-use the test repositories - if (renv_bootstrap_tests_running()) - return(getOption("renv.tests.repos")) - # retrieve current repos repos <- getOption("repos") # ensure @CRAN@ entries are resolved - repos[repos == "@CRAN@"] <- getOption( - "renv.repos.cran", - "https://cloud.r-project.org" - ) + repos[repos == "@CRAN@"] <- cran # add in renv.bootstrap.repos if set default <- c(FALLBACK = "https://cloud.r-project.org") @@ -143,33 +255,34 @@ local({ renv_bootstrap_download <- function(version) { - # if the renv version number has 4 components, assume it must - # be retrieved via github - nv <- numeric_version(version) - components <- unclass(nv)[[1]] - - # if this appears to be a development version of 'renv', we'll - # try to restore from github - dev <- length(components) == 4L - - # begin collecting different methods for finding renv - methods <- c( - renv_bootstrap_download_tarball, - if (dev) - renv_bootstrap_download_github - else c( - renv_bootstrap_download_cran_latest, - renv_bootstrap_download_cran_archive + sha <- attr(version, "sha", exact = TRUE) + + methods <- if (!is.null(sha)) { + + # attempting to bootstrap a development version of renv + c( + function() renv_bootstrap_download_tarball(sha), + function() renv_bootstrap_download_github(sha) ) - ) + + } else { + + # attempting to bootstrap a release version of renv + c( + function() renv_bootstrap_download_tarball(version), + function() renv_bootstrap_download_cran_latest(version), + function() renv_bootstrap_download_cran_archive(version) + ) + + } for (method in methods) { - path <- tryCatch(method(version), error = identity) + path <- tryCatch(method(), error = identity) if (is.character(path) && file.exists(path)) return(path) } - stop("failed to download renv ", version) + stop("All download methods failed") } @@ -185,43 +298,75 @@ local({ if (fixup) mode <- "w+b" - utils::download.file( + args <- list( url = url, destfile = destfile, mode = mode, quiet = TRUE ) + if ("headers" %in% names(formals(utils::download.file))) + args$headers <- renv_bootstrap_download_custom_headers(url) + + do.call(utils::download.file, args) + } - renv_bootstrap_download_cran_latest <- function(version) { + renv_bootstrap_download_custom_headers <- function(url) { - spec <- renv_bootstrap_download_cran_latest_find(version) + headers <- getOption("renv.download.headers") + if (is.null(headers)) + return(character()) + + if (!is.function(headers)) + stopf("'renv.download.headers' is not a function") + + headers <- headers(url) + if (length(headers) == 0L) + return(character()) - message("* Downloading renv ", version, " ... ", appendLF = FALSE) + if (is.list(headers)) + headers <- unlist(headers, recursive = FALSE, use.names = TRUE) + ok <- + is.character(headers) && + is.character(names(headers)) && + all(nzchar(names(headers))) + + if (!ok) + stop("invocation of 'renv.download.headers' did not return a named character vector") + + headers + + } + + renv_bootstrap_download_cran_latest <- function(version) { + + spec <- renv_bootstrap_download_cran_latest_find(version) type <- spec$type repos <- spec$repos - info <- tryCatch( - utils::download.packages( - pkgs = "renv", - destdir = tempdir(), - repos = repos, - type = type, - quiet = TRUE - ), + baseurl <- utils::contrib.url(repos = repos, type = type) + ext <- if (identical(type, "source")) + ".tar.gz" + else if (Sys.info()[["sysname"]] == "Windows") + ".zip" + else + ".tgz" + name <- sprintf("renv_%s%s", version, ext) + url <- paste(baseurl, name, sep = "/") + + destfile <- file.path(tempdir(), name) + status <- tryCatch( + renv_bootstrap_download_impl(url, destfile), condition = identity ) - if (inherits(info, "condition")) { - message("FAILED") + if (inherits(status, "condition")) return(FALSE) - } # report success and return - message("OK (downloaded ", type, ")") - info[1, 2] + destfile } @@ -277,8 +422,6 @@ local({ urls <- file.path(repos, "src/contrib/Archive/renv", name) destfile <- file.path(tempdir(), name) - message("* Downloading renv ", version, " ... ", appendLF = FALSE) - for (url in urls) { status <- tryCatch( @@ -286,14 +429,11 @@ local({ condition = identity ) - if (identical(status, 0L)) { - message("OK") + if (identical(status, 0L)) return(destfile) - } } - message("FAILED") return(FALSE) } @@ -307,20 +447,25 @@ local({ return() # allow directories - info <- file.info(tarball, extra_cols = FALSE) - if (identical(info$isdir, TRUE)) { + if (dir.exists(tarball)) { name <- sprintf("renv_%s.tar.gz", version) tarball <- file.path(tarball, name) } # bail if it doesn't exist - if (!file.exists(tarball)) + if (!file.exists(tarball)) { + + # let the user know we weren't able to honour their request + fmt <- "- RENV_BOOTSTRAP_TARBALL is set (%s) but does not exist." + msg <- sprintf(fmt, tarball) + warning(msg) + + # bail return() - fmt <- "* Bootstrapping with tarball at path '%s'." - msg <- sprintf(fmt, tarball) - message(msg) + } + catf("- Using local tarball '%s'.", tarball) tarball } @@ -347,8 +492,6 @@ local({ on.exit(do.call(base::options, saved), add = TRUE) } - message("* Downloading renv ", version, " from GitHub ... ", appendLF = FALSE) - url <- file.path("https://api.github.com/repos/rstudio/renv/tarball", version) name <- sprintf("renv_%s.tar.gz", version) destfile <- file.path(tempdir(), name) @@ -358,26 +501,105 @@ local({ condition = identity ) - if (!identical(status, 0L)) { - message("FAILED") + if (!identical(status, 0L)) return(FALSE) - } - message("OK") + renv_bootstrap_download_augment(destfile) + return(destfile) } + # Add Sha to DESCRIPTION. This is stop gap until #890, after which we + # can use renv::install() to fully capture metadata. + renv_bootstrap_download_augment <- function(destfile) { + sha <- renv_bootstrap_git_extract_sha1_tar(destfile) + if (is.null(sha)) { + return() + } + + # Untar + tempdir <- tempfile("renv-github-") + on.exit(unlink(tempdir, recursive = TRUE), add = TRUE) + untar(destfile, exdir = tempdir) + pkgdir <- dir(tempdir, full.names = TRUE)[[1]] + + # Modify description + desc_path <- file.path(pkgdir, "DESCRIPTION") + desc_lines <- readLines(desc_path) + remotes_fields <- c( + "RemoteType: github", + "RemoteHost: api.github.com", + "RemoteRepo: renv", + "RemoteUsername: rstudio", + "RemotePkgRef: rstudio/renv", + paste("RemoteRef: ", sha), + paste("RemoteSha: ", sha) + ) + writeLines(c(desc_lines[desc_lines != ""], remotes_fields), con = desc_path) + + # Re-tar + local({ + old <- setwd(tempdir) + on.exit(setwd(old), add = TRUE) + + tar(destfile, compression = "gzip") + }) + invisible() + } + + # Extract the commit hash from a git archive. Git archives include the SHA1 + # hash as the comment field of the tarball pax extended header + # (see https://www.kernel.org/pub/software/scm/git/docs/git-archive.html) + # For GitHub archives this should be the first header after the default one + # (512 byte) header. + renv_bootstrap_git_extract_sha1_tar <- function(bundle) { + + # open the bundle for reading + # We use gzcon for everything because (from ?gzcon) + # > Reading from a connection which does not supply a 'gzip' magic + # > header is equivalent to reading from the original connection + conn <- gzcon(file(bundle, open = "rb", raw = TRUE)) + on.exit(close(conn)) + + # The default pax header is 512 bytes long and the first pax extended header + # with the comment should be 51 bytes long + # `52 comment=` (11 chars) + 40 byte SHA1 hash + len <- 0x200 + 0x33 + res <- rawToChar(readBin(conn, "raw", n = len)[0x201:len]) + + if (grepl("^52 comment=", res)) { + sub("52 comment=", "", res) + } else { + NULL + } + } + renv_bootstrap_install <- function(version, tarball, library) { # attempt to install it into project library - message("* Installing renv ", version, " ... ", appendLF = FALSE) dir.create(library, showWarnings = FALSE, recursive = TRUE) + output <- renv_bootstrap_install_impl(library, tarball) + + # check for successful install + status <- attr(output, "status") + if (is.null(status) || identical(status, 0L)) + return(status) + + # an error occurred; report it + header <- "installation of renv failed" + lines <- paste(rep.int("=", nchar(header)), collapse = "") + text <- paste(c(header, lines, output), collapse = "\n") + stop(text) + + } + + renv_bootstrap_install_impl <- function(library, tarball) { # invoke using system2 so we can capture and report output bin <- R.home("bin") exe <- if (Sys.info()[["sysname"]] == "Windows") "R.exe" else "R" - r <- file.path(bin, exe) + R <- file.path(bin, exe) args <- c( "--vanilla", "CMD", "INSTALL", "--no-multiarch", @@ -385,19 +607,7 @@ local({ shQuote(path.expand(tarball)) ) - output <- system2(r, args, stdout = TRUE, stderr = TRUE) - message("Done!") - - # check for successful install - status <- attr(output, "status") - if (is.numeric(status) && !identical(status, 0L)) { - header <- "Error installing renv:" - lines <- paste(rep.int("=", nchar(header)), collapse = "") - text <- c(header, lines, output) - writeLines(text, con = stderr()) - } - - status + system2(R, args, stdout = TRUE, stderr = TRUE) } @@ -438,6 +648,9 @@ local({ # if the user has requested an automatic prefix, generate it auto <- Sys.getenv("RENV_PATHS_PREFIX_AUTO", unset = NA) + if (is.na(auto) && getRversion() >= "4.4.0") + auto <- "TRUE" + if (auto %in% c("TRUE", "True", "true", "1")) return(renv_bootstrap_platform_prefix_auto()) @@ -607,34 +820,61 @@ local({ } - renv_bootstrap_validate_version <- function(version) { + renv_bootstrap_validate_version <- function(version, description = NULL) { - loadedversion <- utils::packageDescription("renv", fields = "Version") - if (version == loadedversion) + # resolve description file + # + # avoid passing lib.loc to `packageDescription()` below, since R will + # use the loaded version of the package by default anyhow. note that + # this function should only be called after 'renv' is loaded + # https://github.com/rstudio/renv/issues/1625 + description <- description %||% packageDescription("renv") + + # check whether requested version 'version' matches loaded version of renv + sha <- attr(version, "sha", exact = TRUE) + valid <- if (!is.null(sha)) + renv_bootstrap_validate_version_dev(sha, description) + else + renv_bootstrap_validate_version_release(version, description) + + if (valid) return(TRUE) - # assume four-component versions are from GitHub; three-component - # versions are from CRAN - components <- strsplit(loadedversion, "[.-]")[[1]] - remote <- if (length(components) == 4L) - paste("rstudio/renv", loadedversion, sep = "@") + # the loaded version of renv doesn't match the requested version; + # give the user instructions on how to proceed + dev <- identical(description[["RemoteType"]], "github") + remote <- if (dev) + paste("rstudio/renv", description[["RemoteSha"]], sep = "@") else - paste("renv", loadedversion, sep = "@") + paste("renv", description[["Version"]], sep = "@") - fmt <- paste( - "renv %1$s was loaded from project library, but this project is configured to use renv %2$s.", - "Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile.", - "Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library.", - sep = "\n" + # display both loaded version + sha if available + friendly <- renv_bootstrap_version_friendly( + version = description[["Version"]], + sha = if (dev) description[["RemoteSha"]] ) - msg <- sprintf(fmt, loadedversion, version, remote) - warning(msg, call. = FALSE) + fmt <- heredoc(" + renv %1$s was loaded from project library, but this project is configured to use renv %2$s. + - Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile. + - Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library. + ") + catf(fmt, friendly, renv_bootstrap_version_friendly(version), remote) FALSE } + renv_bootstrap_validate_version_dev <- function(version, description) { + expected <- description[["RemoteSha"]] + is.character(expected) && startswith(expected, version) + } + + renv_bootstrap_validate_version_release <- function(version, description) { + expected <- description[["Version"]] + is.character(expected) && identical(expected, version) + } + renv_bootstrap_hash_text <- function(text) { hashfile <- tempfile("renv-hash-") @@ -654,6 +894,12 @@ local({ # warn if the version of renv loaded does not match renv_bootstrap_validate_version(version) + # execute renv load hooks, if any + hooks <- getHook("renv::autoload") + for (hook in hooks) + if (is.function(hook)) + tryCatch(hook(), error = warnify) + # load the project renv::load(project) @@ -669,7 +915,7 @@ local({ return(profile) # check for a profile file (nothing to do if it doesn't exist) - path <- renv_bootstrap_paths_renv("profile", profile = FALSE) + path <- renv_bootstrap_paths_renv("profile", profile = FALSE, project = project) if (!file.exists(path)) return(NULL) @@ -793,12 +1039,78 @@ local({ } + renv_bootstrap_version_friendly <- function(version, shafmt = NULL, sha = NULL) { + sha <- sha %||% attr(version, "sha", exact = TRUE) + parts <- c(version, sprintf(shafmt %||% " [sha: %s]", substring(sha, 1L, 7L))) + paste(parts, collapse = "") + } + + renv_bootstrap_exec <- function(project, libpath, version) { + if (!renv_bootstrap_load(project, libpath, version)) + renv_bootstrap_run(version, libpath) + } + + renv_bootstrap_run <- function(version, libpath) { + + # perform bootstrap + bootstrap(version, libpath) + + # exit early if we're just testing bootstrap + if (!is.na(Sys.getenv("RENV_BOOTSTRAP_INSTALL_ONLY", unset = NA))) + return(TRUE) + + # try again to load + if (requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) { + return(renv::load(project = getwd())) + } + + # failed to download or load renv; warn the user + msg <- c( + "Failed to find an renv installation: the project will not be loaded.", + "Use `renv::activate()` to re-initialize the project." + ) + + warning(paste(msg, collapse = "\n"), call. = FALSE) + + } renv_json_read <- function(file = NULL, text = NULL) { - text <- paste(text %||% read(file), collapse = "\n") + jlerr <- NULL + + # if jsonlite is loaded, use that instead + if ("jsonlite" %in% loadedNamespaces()) { + + json <- tryCatch(renv_json_read_jsonlite(file, text), error = identity) + if (!inherits(json, "error")) + return(json) + + jlerr <- json + + } + + # otherwise, fall back to the default JSON reader + json <- tryCatch(renv_json_read_default(file, text), error = identity) + if (!inherits(json, "error")) + return(json) + + # report an error + if (!is.null(jlerr)) + stop(jlerr) + else + stop(json) + + } + + renv_json_read_jsonlite <- function(file = NULL, text = NULL) { + text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n") + jsonlite::fromJSON(txt = text, simplifyVector = FALSE) + } + + renv_json_read_default <- function(file = NULL, text = NULL) { # find strings in the JSON + text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n") pattern <- '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' locs <- gregexpr(pattern, text, perl = TRUE)[[1]] @@ -829,8 +1141,9 @@ local({ # transform the JSON into something the R parser understands transformed <- replaced - transformed <- gsub("[[{]", "list(", transformed) - transformed <- gsub("[]}]", ")", transformed) + transformed <- gsub("{}", "`names<-`(list(), character())", transformed, fixed = TRUE) + transformed <- gsub("[[{]", "list(", transformed, perl = TRUE) + transformed <- gsub("[]}]", ")", transformed, perl = TRUE) transformed <- gsub(":", "=", transformed, fixed = TRUE) text <- paste(transformed, collapse = "\n") @@ -845,14 +1158,14 @@ local({ map <- as.list(map) # remap strings in object - remapped <- renv_json_remap(json, map) + remapped <- renv_json_read_remap(json, map) # evaluate eval(remapped, envir = baseenv()) } - renv_json_remap <- function(json, map) { + renv_json_read_remap <- function(json, map) { # fix names if (!is.null(names(json))) { @@ -879,7 +1192,7 @@ local({ # recurse if (is.recursive(json)) { for (i in seq_along(json)) { - json[i] <- list(renv_json_remap(json[[i]], map)) + json[i] <- list(renv_json_read_remap(json[[i]], map)) } } @@ -899,35 +1212,9 @@ local({ # construct full libpath libpath <- file.path(root, prefix) - # attempt to load - if (renv_bootstrap_load(project, libpath, version)) - return(TRUE) - - # load failed; inform user we're about to bootstrap - prefix <- paste("# Bootstrapping renv", version) - postfix <- paste(rep.int("-", 77L - nchar(prefix)), collapse = "") - header <- paste(prefix, postfix) - message(header) - - # perform bootstrap - bootstrap(version, libpath) - - # exit early if we're just testing bootstrap - if (!is.na(Sys.getenv("RENV_BOOTSTRAP_INSTALL_ONLY", unset = NA))) - return(TRUE) - - # try again to load - if (requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) { - message("* Successfully installed and loaded renv ", version, ".") - return(renv::load()) - } - - # failed to download or load renv; warn the user - msg <- c( - "Failed to find an renv installation: the project will not be loaded.", - "Use `renv::activate()` to re-initialize the project." - ) + # run bootstrap code + renv_bootstrap_exec(project, libpath, version) - warning(paste(msg, collapse = "\n"), call. = FALSE) + invisible() }) diff --git a/renv/settings.json b/renv/settings.json new file mode 100644 index 0000000..cc536fb --- /dev/null +++ b/renv/settings.json @@ -0,0 +1,21 @@ +{ + "bioconductor.version": null, + "external.libraries": [], + "ignored.packages": [ + "cohortBuilder" + ], + "package.dependency.fields": [ + "Imports", + "Depends", + "LinkingTo" + ], + "ppm.enabled": null, + "ppm.ignored.urls": [], + "r.version": [], + "snapshot.type": "all", + "use.cache": true, + "vcs.ignore.cellar": true, + "vcs.ignore.library": true, + "vcs.ignore.local": true, + "vcs.manage.ignores": true +} From ce4c86e2933ca78e13715578289b84bd7610e104 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Fory=C5=9B?= Date: Fri, 20 Sep 2024 11:51:57 +0200 Subject: [PATCH 11/20] Fix NA values for Date --- R/cohort_methods.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/cohort_methods.R b/R/cohort_methods.R index d0a8dd7..8518d3d 100644 --- a/R/cohort_methods.R +++ b/R/cohort_methods.R @@ -338,6 +338,7 @@ Cohort <- R6::R6Class( for (step_state in state) { for (filter_state in step_state$filters) { if (filter_state$type == "date_range") { + filter_state$range <- na_fix(filter_state$range) filter_state$range <- as.Date(filter_state$range) } add_filter( From f6e8668137b9c4938dda516061779054000e1c92 Mon Sep 17 00:00:00 2001 From: Krystian Igras Date: Fri, 20 Sep 2024 18:39:46 +0000 Subject: [PATCH 12/20] Bump version to v0.3.0. --- DESCRIPTION | 2 +- README.md | 26 +++++++++++------------ man/figures/README-unnamed-chunk-8-1.png | Bin 22734 -> 22907 bytes 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 50d0db1..65ac089 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: cohortBuilder Type: Package Title: Data Source Agnostic Filtering Tools -Version: 0.2.2 +Version: 0.3.0 Authors@R: c(person('Krystian', 'Igras', email = 'krystian8207@gmail.com', diff --git a/README.md b/README.md index ef8598e..0ada011 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # cohortBuilder -[![version](https://img.shields.io/static/v1.svg?label=github.com&message=v.0.2.0&color=ff69b4)](https://r-world-devs.github.io/cohortBuilder/) +[![version](https://img.shields.io/static/v1.svg?label=github.com&message=v.0.3.0&color=ff69b4)](https://r-world-devs.github.io/cohortBuilder/) [![lifecycle](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://lifecycle.r-lib.org/articles/stages.html#experimental) ## Overview @@ -115,7 +115,7 @@ get_data(coh) #> 3 Mr. Brandan Oberbrunner 568-044-7463 vip #> 4 Lloyd Adams III 001-017-0211 standard #> 5 Randy Ziemann 895-995-2326 premium -#> # … with 3 more rows +#> # ℹ 3 more rows #> #> $issues #> # A tibble: 50 × 4 @@ -126,7 +126,7 @@ get_data(coh) #> 3 000003 000016 0-09-177373-3 2014-09-28 #> 4 000004 000005 0-224-06252-2 2005-11-14 #> 5 000005 000004 0-340-89696-5 2006-03-19 -#> # … with 45 more rows +#> # ℹ 45 more rows #> #> $returns #> # A tibble: 30 × 2 @@ -137,7 +137,7 @@ get_data(coh) #> 3 000004 2005-12-29 #> 4 000005 2006-03-26 #> 5 000006 2016-08-30 -#> # … with 25 more rows +#> # ℹ 25 more rows #> #> attr(,"class") #> [1] "tblist" @@ -196,7 +196,7 @@ get_data(coh, step_id = 1) #> 3 Mr. Brandan Oberbrunner 568-044-7463 vip #> 4 Lloyd Adams III 001-017-0211 standard #> 5 Randy Ziemann 895-995-2326 premium -#> # … with 3 more rows +#> # ℹ 3 more rows #> #> $issues #> # A tibble: 50 × 4 @@ -207,7 +207,7 @@ get_data(coh, step_id = 1) #> 3 000003 000016 0-09-177373-3 2014-09-28 #> 4 000004 000005 0-224-06252-2 2005-11-14 #> 5 000005 000004 0-340-89696-5 2006-03-19 -#> # … with 45 more rows +#> # ℹ 45 more rows #> #> $returns #> # A tibble: 30 × 2 @@ -218,7 +218,7 @@ get_data(coh, step_id = 1) #> 3 000004 2005-12-29 #> 4 000005 2006-03-26 #> 5 000006 2016-08-30 -#> # … with 25 more rows +#> # ℹ 25 more rows #> #> attr(,"class") #> [1] "tblist" @@ -253,7 +253,7 @@ get_data(coh, step_id = 2) #> 3 Mr. Brandan Oberbrunner 568-044-7463 vip #> 4 Lloyd Adams III 001-017-0211 standard #> 5 Randy Ziemann 895-995-2326 premium -#> # … with 3 more rows +#> # ℹ 3 more rows #> #> $issues #> # A tibble: 50 × 4 @@ -264,7 +264,7 @@ get_data(coh, step_id = 2) #> 3 000003 000016 0-09-177373-3 2014-09-28 #> 4 000004 000005 0-224-06252-2 2005-11-14 #> 5 000005 000004 0-340-89696-5 2006-03-19 -#> # … with 45 more rows +#> # ℹ 45 more rows #> #> $returns #> # A tibble: 30 × 2 @@ -275,7 +275,7 @@ get_data(coh, step_id = 2) #> 3 000004 2005-12-29 #> 4 000005 2006-03-26 #> 5 000006 2016-08-30 -#> # … with 25 more rows +#> # ℹ 25 more rows #> #> attr(,"class") #> [1] "tblist" @@ -316,7 +316,7 @@ get_data(coh, step_id = 2) #> 3 Mr. Brandan Oberbrunner 568-044-7463 vip #> 4 Lloyd Adams III 001-017-0211 standard #> 5 Randy Ziemann 895-995-2326 premium -#> # … with 3 more rows +#> # ℹ 3 more rows #> #> $issues #> # A tibble: 50 × 4 @@ -327,7 +327,7 @@ get_data(coh, step_id = 2) #> 3 000003 000016 0-09-177373-3 2014-09-28 #> 4 000004 000005 0-224-06252-2 2005-11-14 #> 5 000005 000004 0-340-89696-5 2006-03-19 -#> # … with 45 more rows +#> # ℹ 45 more rows #> #> $returns #> # A tibble: 30 × 2 @@ -338,7 +338,7 @@ get_data(coh, step_id = 2) #> 3 000004 2005-12-29 #> 4 000005 2006-03-26 #> 5 000006 2016-08-30 -#> # … with 25 more rows +#> # ℹ 25 more rows #> #> attr(,"class") #> [1] "tblist" diff --git a/man/figures/README-unnamed-chunk-8-1.png b/man/figures/README-unnamed-chunk-8-1.png index 1df7b15fb3e4609ac8e4dffffecd7df9e1eca233..216989a8ad4459e7b76eee592e31b3097dbf69ff 100644 GIT binary patch literal 22907 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 Q!)>XdqN7}J<96`>2jl#54FCWD literal 22734 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 Date: Fri, 20 Sep 2024 18:41:14 +0000 Subject: [PATCH 13/20] Update news.md. --- NEWS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index 74875ea..16f5150 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# cohortBuilder 0.2.2 +# cohortBuilder 0.3.0 * Add new filter of type `"query"` that allows to configure complex filtering rules with `queryBuilder` package. * Add filter-focused `.print_filter` method responsible for printing filter values when calling `sum_up` on cohort. From 961d0c0bf511fd35f3b6fb957988591706a173c8 Mon Sep 17 00:00:00 2001 From: Krystian Igras Date: Fri, 20 Sep 2024 18:43:26 +0000 Subject: [PATCH 14/20] Remove crancomments. --- cran-comments.md | 59 ------------------------------------------------ 1 file changed, 59 deletions(-) delete mode 100644 cran-comments.md diff --git a/cran-comments.md b/cran-comments.md deleted file mode 100644 index ee57621..0000000 --- a/cran-comments.md +++ /dev/null @@ -1,59 +0,0 @@ -## Test environments -* local check - Ubuntu 20.04.5 LTS, R 4.1.2 (2021-11-01) -* win-builder - R version 4.1.3 (2022-03-10) - R version 4.2.2 (2022-10-31 ucrt) - R Under development (unstable) (2023-02-27 r83911 ucrt) - -## `R CMD check cohortBuilder_0.2.0.tar.gz --as-cran` results - -``` -* using log directory ‘/home/krystian/projects/cohortBuilder.Rcheck’ -* using R version 4.2.1 (2022-06-23) -* using platform: x86_64-pc-linux-gnu (64-bit) -... -Status: OK -``` - -## `devtools::check()` results - -``` -0 errors ✓ | 0 warnings ✓ | 0 notes ✓ -``` - -## win-builder result - -``` -* using log directory 'd:/RCompile/CRANguest/R-oldrelease/cohortBuilder.Rcheck' -* using R version 4.1.3 (2022-03-10) -* using platform: x86_64-w64-mingw32 (64-bit) -* using session charset: ISO8859-1 -... -* checking CRAN incoming feasibility ... Note_to_CRAN_maintainers -Maintainer: 'Krystian Igras ' -... -Status: OK -``` - -``` -* using log directory 'd:/RCompile/CRANguest/R-release/cohortBuilder.Rcheck' -* using R version 4.2.2 (2022-10-31 ucrt) -* using platform: x86_64-w64-mingw32 (64-bit) -... -* checking CRAN incoming feasibility ... Note_to_CRAN_maintainers -Maintainer: 'Krystian Igras ' -... -Status: OK -``` - -``` -* using log directory 'd:/RCompile/CRANguest/R-devel/cohortBuilder.Rcheck' -* using R Under development (unstable) (2023-02-27 r83911 ucrt) -* using platform: x86_64-w64-mingw32 (64-bit) -... -* checking CRAN incoming feasibility ... [10s] Note_to_CRAN_maintainers -Maintainer: 'Krystian Igras ' -... -Status: OK -``` From 3983578be3a6a20b0202d842946b6ad039c8b68b Mon Sep 17 00:00:00 2001 From: Krystian Igras Date: Tue, 24 Sep 2024 08:50:02 +0000 Subject: [PATCH 15/20] Move queryBuilder to suggests and add tests. --- DESCRIPTION | 4 ++-- tests/testthat/test-filter.R | 44 ++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 65ac089..8c17aa3 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -26,11 +26,11 @@ Imports: glue, ggplot2, rlang (>= 1.0), - formatR, - queryBuilder + formatR KeepSource: true RoxygenNote: 7.2.3 Suggests: + queryBuilder, testthat (>= 3.0.0), shiny, knitr, diff --git a/tests/testthat/test-filter.R b/tests/testthat/test-filter.R index ac8e288..95e785f 100644 --- a/tests/testthat/test-filter.R +++ b/tests/testthat/test-filter.R @@ -82,3 +82,47 @@ test_that("Multi discrete filter works fine", { ) }) + +test_that("Query discrete filter works fine", { + md_data <- data.frame(col1 = c("A", "B", "A", "B", "A"), col2 = c("C", "C", "C", "D", "D")) + md_source <- set_source( + tblist(md_data = md_data) + ) + md_filter <- cohortBuilder::filter( + type = "query", id = "qcols", name = "Query Cols", dataset = "md_data", + variables = c("col1", "col2"), + value = queryBuilder::queryGroup( + condition = "AND", + queryBuilder::queryRule("col1", "equal", "A"), + queryBuilder::queryRule("col2", "in", "D") + ) + ) + + coh <- Cohort$new( + md_source, + md_filter + ) + expect_equal(coh$get_data(1, state = "pre")$md_data, md_data) + + coh$run_flow() + expect_setequal(unique(coh$get_data(1, state = "post")$md_data$col1), c("A")) + expect_setequal(unique(coh$get_data(1, state = "post")$md_data$col2), c("D")) + + expect_equal( + coh$get_cache("1", "qcols", state = "pre")$specs$col1$values, + unique(md_data$col1) + ) + expect_equal( + coh$get_cache("1", "qcols", state = "pre")$specs$col2$values, + unique(md_data$col2) + ) + expect_equal( + coh$get_cache("1", "qcols", state = "post")$specs$col1$values, + unique(c("A")) + ) + expect_equal( + coh$get_cache("1", "qcols", state = "post")$specs$col2$values, + unique(c("D")) + ) + +}) From 188da4be7ae8379e2432c6e237bdd1ca8d2428d8 Mon Sep 17 00:00:00 2001 From: Krystian Igras Date: Wed, 25 Sep 2024 10:15:05 +0000 Subject: [PATCH 16/20] Fix cran checks. --- .Rbuildignore | 2 +- .gitignore | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.Rbuildignore b/.Rbuildignore index bfe1b3c..f39102a 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -11,4 +11,4 @@ README.Rmd ^pkgdown$ cran-comments.md .Rprofile - +meta_data.yaml diff --git a/.gitignore b/.gitignore index a4309f0..e036162 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ inst/doc docs .Rprofile +*.Rcheck +*.tar.gz From b67f7e09fc444572714a5cd4355948e14fb25382 Mon Sep 17 00:00:00 2001 From: Krystian Igras Date: Wed, 25 Sep 2024 10:53:29 +0000 Subject: [PATCH 17/20] Update itemize syntax. --- R/bind_keys.R | 18 +++++++++--------- R/cohort_methods.R | 34 +++++++++++++++++----------------- R/data.R | 36 ++++++++++++++++++------------------ R/hooks.R | 10 +++++----- R/source_methods.R | 28 ++++++++++++++-------------- man/binding-keys.Rd | 18 +++++++++--------- man/cohort-methods.Rd | 18 +++++++++--------- man/hooks.Rd | 10 +++++----- man/librarian.Rd | 36 ++++++++++++++++++------------------ man/managing-cohort.Rd | 16 ++++++++-------- man/managing-source.Rd | 10 +++++----- man/source-layer.Rd | 18 +++++++++--------- 12 files changed, 126 insertions(+), 126 deletions(-) diff --git a/R/bind_keys.R b/R/bind_keys.R index 06665bb..e757938 100644 --- a/R/bind_keys.R +++ b/R/bind_keys.R @@ -63,22 +63,22 @@ primary_keys <- function(...) { #' #' In order to understand binding keys concept we need to describe the following functions: #' \itemize{ -#' \item{\link{data_key}}{ Defines which table column should be used to describe relation.} -#' \item{bind_key}{ Defines what relation occur between datasets.} -#' \item{bind_keys}{ If needed, allows to define more than one relation.} +#' \item{\link{data_key} - Defines which table column should be used to describe relation.} +#' \item{\code{bind_key} - Defines what relation occur between datasets.} +#' \item{\code{bind_keys} - If needed, allows to define more than one relation.} #' } #' #' - `data_key` - requires to provide two parameters: #' \itemize{ -#' \item{dataset}{ Name of the dataset existing in Source.} -#' \item{key}{ Single character string or vector storing column names that are keys, which should be used to describe relation.} +#' \item{\code{dataset} - Name of the dataset existing in Source.} +#' \item{\code{key} - Single character string or vector storing column names that are keys, which should be used to describe relation.} #' } #' For example `data_key('books', 'author_id')`. #' #' - `bind_key` - requires to provide two obligatory parameters #' \itemize{ -#' \item{update}{ Data key describing which table should be updated.} -#' \item{...}{ \strong{Triggering data keys}. One or more data keys describing on which dataset(s) the one in `update` is dependent.} +#' \item{\code{update} - Data key describing which table should be updated.} +#' \item{\code{...} - \strong{Triggering data keys}. One or more data keys describing on which dataset(s) the one in `update` is dependent.} #' } #' The output of `bind_key` function is named \strong{binding key}. #' `bind_key` offers two extra parameters `post` and `activate`. @@ -97,8 +97,8 @@ primary_keys <- function(...) { #' #' You may achieve more flexibility with two parameters: #' \itemize{ -#' \item{activate}{} -#' \item{post}{} +#' \item{\code{activate}} +#' \item{\code{post}} #' } #' #' \strong{Active tables and `activate` parameter} diff --git a/R/cohort_methods.R b/R/cohort_methods.R index 8518d3d..30deab1 100644 --- a/R/cohort_methods.R +++ b/R/cohort_methods.R @@ -871,14 +871,14 @@ cohort <- function(source, ..., run_flow = FALSE, #' The list of methods designed for managing the Cohort configuration and state. #' #' \itemize{ -#' \item{\link{add_source}}{ Add source to Cohort object.} -#' \item{\link{update_source}}{ Update Cohort object source.} -#' \item{\link{add_step}}{ Add step to Cohort object.} -#' \item{\link{rm_step}}{ Remove step from Cohort object.} -#' \item{\link{add_filter}}{ Add filter to Cohort step.} -#' \item{\link{rm_filter}}{ Remove filter from Cohort step.} -#' \item{\link{update_filter}}{ Update filter configuration.} -#' \item{\link{run}}{ Run data filtering.} +#' \item{\link{add_source} - Add source to Cohort object.} +#' \item{\link{update_source} - Update Cohort object source.} +#' \item{\link{add_step} - Add step to Cohort object.} +#' \item{\link{rm_step} - Remove step from Cohort object.} +#' \item{\link{add_filter} - Add filter to Cohort step.} +#' \item{\link{rm_filter} - Remove filter from Cohort step.} +#' \item{\link{update_filter} - Update filter configuration.} +#' \item{\link{run} - Run data filtering.} #' } #' #' @return The object of class `Cohort` having the modified configuration dependent on the used method. @@ -1064,15 +1064,15 @@ run <- function(x, min_step_id, step_id) { #' The list of methods designed for getting Cohort-related details. #' #' \itemize{ -#' \item{\link{plot_data}}{ Plot filter related Cohort data.} -#' \item{\link{stat}}{ Get Cohort related statistics.} -#' \item{\link{code}}{ Return reproducible data filtering code.} -#' \item{\link{get_data}}{ Get step related data.} -#' \item{\link{sum_up}}{ Sum up Cohort state.} -#' \item{\link{get_state}}{ Save Cohort state.} -#' \item{\link{restore}}{ Restore Cohort state.} -#' \item{\link{attrition}}{ Show attrition plot.} -#' \item{\link{description}}{ Show Source or filter related description.} +#' \item{\link{plot_data} - Plot filter related Cohort data.} +#' \item{\link{stat} - Get Cohort related statistics.} +#' \item{\link{code} - Return reproducible data filtering code.} +#' \item{\link{get_data} - Get step related data.} +#' \item{\link{sum_up} - Sum up Cohort state.} +#' \item{\link{get_state} - Save Cohort state.} +#' \item{\link{restore} - Restore Cohort state.} +#' \item{\link{attrition} - Show attrition plot.} +#' \item{\link{description} - Show Source or filter related description.} #' } #' #' @return Various type outputs dependent on the selected method. diff --git a/R/data.R b/R/data.R index 02eed79..007623f 100644 --- a/R/data.R +++ b/R/data.R @@ -6,32 +6,32 @@ #' #' \strong{books} - books on store #' \describe{ -#' \item{isbn}{book ISBN number} -#' \item{title}{book title} -#' \item{genre}{comma separated book genre} -#' \item{publisher}{name of book publisher} -#' \item{author}{name of book author} -#' \item{copies}{total number of book copies on store} +#' \item{\code{isbn} - book ISBN number} +#' \item{\code{title} - book title} +#' \item{\code{genre} - comma separated book genre} +#' \item{\code{publisher} - name of book publisher} +#' \item{\code{author} - name of book author} +#' \item{\code{copies} - total number of book copies on store} #' } #' \strong{borrowers} - registered library members #' \describe{ -#' \item{id}{member unique id} -#' \item{registered}{date the member joined library} -#' \item{address}{member address} -#' \item{name}{full member name} -#' \item{phone_number}{member phone number} -#' \item{program}{membership program type (standard, premium or vip)} +#' \item{\code{id} - member unique id} +#' \item{\code{registered} - date the member joined library} +#' \item{\code{address} - member address} +#' \item{\code{name} - full member name} +#' \item{\code{phone_number} - member phone number} +#' \item{\code{program} - membership program type (standard, premium or vip)} #' } #' \strong{issues} - borrowed books events #' \describe{ -#' \item{id}{unique event id} -#' \item{borrower_id}{id of the member that borrowed the book} -#' \item{isbn}{is of the borrowed book} -#' \item{date}{date of borrow event} +#' \item{\code{id} - unique event id} +#' \item{\code{borrower_id} - id of the member that borrowed the book} +#' \item{\code{isbn} - is of the borrowed book} +#' \item{\code{date} - date of borrow event} #' } #' \strong{returns} - returned books events #' \describe{ -#' \item{id}{event id equal to borrow issue id} -#' \item{date}{date of return event} +#' \item{\code{id} - event id equal to borrow issue id} +#' \item{\code{date} - date of return event} #' } "librarian" diff --git a/R/hooks.R b/R/hooks.R index 77135ea..50aaead 100644 --- a/R/hooks.R +++ b/R/hooks.R @@ -9,8 +9,8 @@ #' #' Each `hook` is a function of two obligatory parameters: #' \itemize{ -#' \item{public}{ Cohort object.} -#' \item{private}{ Private environment of Cohort object.} +#' \item{\code{public} - Cohort object.} +#' \item{\code{private} - Private environment of Cohort object.} #' } #' #' When Cohort method, for which hook is defined, allow to pass custom parameters, @@ -18,9 +18,9 @@ #' #' For example `Cohort$remove_step` has three parameters: #' \itemize{ -#' \item{step_id}{} -#' \item{run_flow}{} -#' \item{hook}{} +#' \item{\code{step_id}} +#' \item{\code{run_flow}} +#' \item{\code{hook}} #' } #' By the implementation, the parameters that we should skip are `run_flow` and `hook`, #' so the hook should have three parameters `public`, `private` and `step_id`. diff --git a/R/source_methods.R b/R/source_methods.R index af6e383..4e9a53a 100644 --- a/R/source_methods.R +++ b/R/source_methods.R @@ -237,23 +237,23 @@ set_source <- function(dtconn, ..., primary_keys = NULL, binding_keys = NULL, #' In order to make new source type layer functioning, the following list of methods #' should be defined: #' \itemize{ -#' \item{.init_source}{ Defines how to extract data object from source. +#' \item{\code{.init_source} - Defines how to extract data object from source. #' Each filtering step assumes to be operating on resulting data object #' (further named data_object) and returns object of the same type and structure.} -#' \item{.collect_data}{ Defines how to collect data (into R memory) from `data_object`.} -#' \item{.get_stats}{ Defines what `data_object` statistics should be +#' \item{\code{.collect_data} - Defines how to collect data (into R memory) from `data_object`.} +#' \item{\code{.get_stats} - Defines what `data_object` statistics should be #' calculated and how. When provided the stats can be extracted using \link{stat}.} -#' \item{.pre_filtering}{ (optional) Defines what operation on `data_object` should be +#' \item{\code{.pre_filtering} - (optional) Defines what operation on `data_object` should be #' performed before applying filtering in the step.} -#' \item{.post_filtering}{ (optional) Defines what operation on `data_object` should be +#' \item{\code{.post_filtering} - (optional) Defines what operation on `data_object` should be #' performed after applying filtering in the step (before running binding).} -#' \item{.post_binding}{ (optional) Defines what operation on `data_object` should be +#' \item{\code{.post_binding} - (optional) Defines what operation on `data_object` should be #' performed after applying binding in the step.} -#' \item{.run_binding}{ (optional) Defines how to handle post filtering data binding. +#' \item{\code{.run_binding} - (optional) Defines how to handle post filtering data binding. #' See more about binding keys at \link{binding-keys}.} -#' \item{.get_attrition_count and .get_attrition_label}{ Methods defining how to +#' \item{\code{.get_attrition_count and .get_attrition_label} - Methods defining how to #' get statistics and labels for attrition plot.} -#' \item{.repro_code_tweak}{ (optional) Default method passed as a `modifier` +#' \item{\code{.repro_code_tweak} - (optional) Default method passed as a `modifier` #' argument of \link{code} function. Aims to modify reproducible code into the final format.} #' } #' Except from the above methods, you may extend the existing or new source with providing @@ -335,11 +335,11 @@ NULL #' The list of methods designed for managing the Source configuration and state. #' #' \itemize{ -#' \item{\link{add_step}}{ Add step to Source object.} -#' \item{\link{rm_step}}{ Remove step from Source object.} -#' \item{\link{add_filter}}{ Add filter to Source step.} -#' \item{\link{rm_filter}}{ Remove filter from Source step.} -#' \item{\link{update_filter}}{ Update filter configuration.} +#' \item{\link{add_step} - Add step to Source object.} +#' \item{\link{rm_step} - Remove step from Source object.} +#' \item{\link{add_filter} - Add filter to Source step.} +#' \item{\link{rm_filter} - Remove filter from Source step.} +#' \item{\link{update_filter} - Update filter configuration.} #' } #' #' @name managing-source diff --git a/man/binding-keys.Rd b/man/binding-keys.Rd index 7f0e3be..c946dff 100644 --- a/man/binding-keys.Rd +++ b/man/binding-keys.Rd @@ -64,22 +64,22 @@ As a result, whenever `books` or `authors` is filtered, the other table will be In order to understand binding keys concept we need to describe the following functions: \itemize{ - \item{\link{data_key}}{ Defines which table column should be used to describe relation.} - \item{bind_key}{ Defines what relation occur between datasets.} - \item{bind_keys}{ If needed, allows to define more than one relation.} + \item{\link{data_key} - Defines which table column should be used to describe relation.} + \item{\code{bind_key} - Defines what relation occur between datasets.} + \item{\code{bind_keys} - If needed, allows to define more than one relation.} } - `data_key` - requires to provide two parameters: \itemize{ - \item{dataset}{ Name of the dataset existing in Source.} - \item{key}{ Single character string or vector storing column names that are keys, which should be used to describe relation.} + \item{\code{dataset} - Name of the dataset existing in Source.} + \item{\code{key} - Single character string or vector storing column names that are keys, which should be used to describe relation.} } For example `data_key('books', 'author_id')`. - `bind_key` - requires to provide two obligatory parameters \itemize{ - \item{update}{ Data key describing which table should be updated.} - \item{...}{ \strong{Triggering data keys}. One or more data keys describing on which dataset(s) the one in `update` is dependent.} + \item{\code{update} - Data key describing which table should be updated.} + \item{\code{...} - \strong{Triggering data keys}. One or more data keys describing on which dataset(s) the one in `update` is dependent.} } The output of `bind_key` function is named \strong{binding key}. `bind_key` offers two extra parameters `post` and `activate`. @@ -98,8 +98,8 @@ sequentially, taking into account returned data from the previous bindings. You may achieve more flexibility with two parameters: \itemize{ - \item{activate}{} - \item{post}{} + \item{\code{activate}} + \item{\code{post}} } \strong{Active tables and `activate` parameter} diff --git a/man/cohort-methods.Rd b/man/cohort-methods.Rd index c13d38d..f9b58e2 100644 --- a/man/cohort-methods.Rd +++ b/man/cohort-methods.Rd @@ -11,14 +11,14 @@ Various type outputs dependent on the selected method. The list of methods designed for getting Cohort-related details. \itemize{ - \item{\link{plot_data}}{ Plot filter related Cohort data.} - \item{\link{stat}}{ Get Cohort related statistics.} - \item{\link{code}}{ Return reproducible data filtering code.} - \item{\link{get_data}}{ Get step related data.} - \item{\link{sum_up}}{ Sum up Cohort state.} - \item{\link{get_state}}{ Save Cohort state.} - \item{\link{restore}}{ Restore Cohort state.} - \item{\link{attrition}}{ Show attrition plot.} - \item{\link{description}}{ Show Source or filter related description.} + \item{\link{plot_data} - Plot filter related Cohort data.} + \item{\link{stat} - Get Cohort related statistics.} + \item{\link{code} - Return reproducible data filtering code.} + \item{\link{get_data} - Get step related data.} + \item{\link{sum_up} - Sum up Cohort state.} + \item{\link{get_state} - Save Cohort state.} + \item{\link{restore} - Restore Cohort state.} + \item{\link{attrition} - Show attrition plot.} + \item{\link{description} - Show Source or filter related description.} } } diff --git a/man/hooks.Rd b/man/hooks.Rd index 32e0737..6bea3c3 100644 --- a/man/hooks.Rd +++ b/man/hooks.Rd @@ -29,8 +29,8 @@ storing functions (hooks) executed before and after the method is run respective Each `hook` is a function of two obligatory parameters: \itemize{ - \item{public}{ Cohort object.} - \item{private}{ Private environment of Cohort object.} + \item{\code{public} - Cohort object.} + \item{\code{private} - Private environment of Cohort object.} } When Cohort method, for which hook is defined, allow to pass custom parameters, @@ -38,9 +38,9 @@ the ones should be also available in hook definition (with some exclusions, see For example `Cohort$remove_step` has three parameters: \itemize{ - \item{step_id}{} - \item{run_flow}{} - \item{hook}{} + \item{\code{step_id}} + \item{\code{run_flow}} + \item{\code{hook}} } By the implementation, the parameters that we should skip are `run_flow` and `hook`, so the hook should have three parameters `public`, `private` and `step_id`. diff --git a/man/librarian.Rd b/man/librarian.Rd index 95c3692..6313282 100644 --- a/man/librarian.Rd +++ b/man/librarian.Rd @@ -9,33 +9,33 @@ A list of four data frames: \strong{books} - books on store \describe{ - \item{isbn}{book ISBN number} - \item{title}{book title} - \item{genre}{comma separated book genre} - \item{publisher}{name of book publisher} - \item{author}{name of book author} - \item{copies}{total number of book copies on store} + \item{\code{isbn} - book ISBN number} + \item{\code{title} - book title} + \item{\code{genre} - comma separated book genre} + \item{\code{publisher} - name of book publisher} + \item{\code{author} - name of book author} + \item{\code{copies} - total number of book copies on store} } \strong{borrowers} - registered library members \describe{ - \item{id}{member unique id} - \item{registered}{date the member joined library} - \item{address}{member address} - \item{name}{full member name} - \item{phone_number}{member phone number} - \item{program}{membership program type (standard, premium or vip)} + \item{\code{id} - member unique id} + \item{\code{registered} - date the member joined library} + \item{\code{address} - member address} + \item{\code{name} - full member name} + \item{\code{phone_number} - member phone number} + \item{\code{program} - membership program type (standard, premium or vip)} } \strong{issues} - borrowed books events \describe{ - \item{id}{unique event id} - \item{borrower_id}{id of the member that borrowed the book} - \item{isbn}{is of the borrowed book} - \item{date}{date of borrow event} + \item{\code{id} - unique event id} + \item{\code{borrower_id} - id of the member that borrowed the book} + \item{\code{isbn} - is of the borrowed book} + \item{\code{date} - date of borrow event} } \strong{returns} - returned books events \describe{ - \item{id}{event id equal to borrow issue id} - \item{date}{date of return event} + \item{\code{id} - event id equal to borrow issue id} + \item{\code{date} - date of return event} } } \usage{ diff --git a/man/managing-cohort.Rd b/man/managing-cohort.Rd index 20e5010..c4d6266 100644 --- a/man/managing-cohort.Rd +++ b/man/managing-cohort.Rd @@ -10,13 +10,13 @@ The object of class `Cohort` having the modified configuration dependent on the The list of methods designed for managing the Cohort configuration and state. \itemize{ - \item{\link{add_source}}{ Add source to Cohort object.} - \item{\link{update_source}}{ Update Cohort object source.} - \item{\link{add_step}}{ Add step to Cohort object.} - \item{\link{rm_step}}{ Remove step from Cohort object.} - \item{\link{add_filter}}{ Add filter to Cohort step.} - \item{\link{rm_filter}}{ Remove filter from Cohort step.} - \item{\link{update_filter}}{ Update filter configuration.} - \item{\link{run}}{ Run data filtering.} + \item{\link{add_source} - Add source to Cohort object.} + \item{\link{update_source} - Update Cohort object source.} + \item{\link{add_step} - Add step to Cohort object.} + \item{\link{rm_step} - Remove step from Cohort object.} + \item{\link{add_filter} - Add filter to Cohort step.} + \item{\link{rm_filter} - Remove filter from Cohort step.} + \item{\link{update_filter} - Update filter configuration.} + \item{\link{run} - Run data filtering.} } } diff --git a/man/managing-source.Rd b/man/managing-source.Rd index aa93f87..31c9b55 100644 --- a/man/managing-source.Rd +++ b/man/managing-source.Rd @@ -10,11 +10,11 @@ The object of class `Source` having the modified configuration dependent on the The list of methods designed for managing the Source configuration and state. \itemize{ - \item{\link{add_step}}{ Add step to Source object.} - \item{\link{rm_step}}{ Remove step from Source object.} - \item{\link{add_filter}}{ Add filter to Source step.} - \item{\link{rm_filter}}{ Remove filter from Source step.} - \item{\link{update_filter}}{ Update filter configuration.} + \item{\link{add_step} - Add step to Source object.} + \item{\link{rm_step} - Remove step from Source object.} + \item{\link{add_filter} - Add filter to Source step.} + \item{\link{rm_filter} - Remove filter from Source step.} + \item{\link{update_filter} - Update filter configuration.} } } \seealso{ diff --git a/man/source-layer.Rd b/man/source-layer.Rd index a48e3e8..5605f33 100644 --- a/man/source-layer.Rd +++ b/man/source-layer.Rd @@ -108,23 +108,23 @@ or API service that allows to access and operate on data. In order to make new source type layer functioning, the following list of methods should be defined: \itemize{ - \item{.init_source}{ Defines how to extract data object from source. + \item{\code{.init_source} - Defines how to extract data object from source. Each filtering step assumes to be operating on resulting data object (further named data_object) and returns object of the same type and structure.} - \item{.collect_data}{ Defines how to collect data (into R memory) from `data_object`.} - \item{.get_stats}{ Defines what `data_object` statistics should be + \item{\code{.collect_data} - Defines how to collect data (into R memory) from `data_object`.} + \item{\code{.get_stats} - Defines what `data_object` statistics should be calculated and how. When provided the stats can be extracted using \link{stat}.} - \item{.pre_filtering}{ (optional) Defines what operation on `data_object` should be + \item{\code{.pre_filtering} - (optional) Defines what operation on `data_object` should be performed before applying filtering in the step.} - \item{.post_filtering}{ (optional) Defines what operation on `data_object` should be + \item{\code{.post_filtering} - (optional) Defines what operation on `data_object` should be performed after applying filtering in the step (before running binding).} - \item{.post_binding}{ (optional) Defines what operation on `data_object` should be + \item{\code{.post_binding} - (optional) Defines what operation on `data_object` should be performed after applying binding in the step.} - \item{.run_binding}{ (optional) Defines how to handle post filtering data binding. + \item{\code{.run_binding} - (optional) Defines how to handle post filtering data binding. See more about binding keys at \link{binding-keys}.} - \item{.get_attrition_count and .get_attrition_label}{ Methods defining how to + \item{\code{.get_attrition_count and .get_attrition_label} - Methods defining how to get statistics and labels for attrition plot.} - \item{.repro_code_tweak}{ (optional) Default method passed as a `modifier` + \item{\code{.repro_code_tweak} - (optional) Default method passed as a `modifier` argument of \link{code} function. Aims to modify reproducible code into the final format.} } Except from the above methods, you may extend the existing or new source with providing From 8dbefb667b900fe28cc758e0e9b86c6da2382b56 Mon Sep 17 00:00:00 2001 From: Krystian Igras Date: Wed, 25 Sep 2024 10:58:36 +0000 Subject: [PATCH 18/20] Fix roxygen description for data. --- R/data.R | 36 ++++++++++++++++++------------------ man/librarian.Rd | 36 ++++++++++++++++++------------------ 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/R/data.R b/R/data.R index 007623f..f50a616 100644 --- a/R/data.R +++ b/R/data.R @@ -6,32 +6,32 @@ #' #' \strong{books} - books on store #' \describe{ -#' \item{\code{isbn} - book ISBN number} -#' \item{\code{title} - book title} -#' \item{\code{genre} - comma separated book genre} -#' \item{\code{publisher} - name of book publisher} -#' \item{\code{author} - name of book author} -#' \item{\code{copies} - total number of book copies on store} +#' \item{\code{isbn}}{book ISBN number} +#' \item{\code{title}}{book title} +#' \item{\code{genre}}{comma separated book genre} +#' \item{\code{publisher}}{name of book publisher} +#' \item{\code{author}}{name of book author} +#' \item{\code{copies}}{total number of book copies on store} #' } #' \strong{borrowers} - registered library members #' \describe{ -#' \item{\code{id} - member unique id} -#' \item{\code{registered} - date the member joined library} -#' \item{\code{address} - member address} -#' \item{\code{name} - full member name} -#' \item{\code{phone_number} - member phone number} -#' \item{\code{program} - membership program type (standard, premium or vip)} +#' \item{\code{id}}{member unique id} +#' \item{\code{registered}}{date the member joined library} +#' \item{\code{address}}{member address} +#' \item{\code{name}}{full member name} +#' \item{\code{phone_number}}{member phone number} +#' \item{\code{program}}{membership program type (standard, premium or vip)} #' } #' \strong{issues} - borrowed books events #' \describe{ -#' \item{\code{id} - unique event id} -#' \item{\code{borrower_id} - id of the member that borrowed the book} -#' \item{\code{isbn} - is of the borrowed book} -#' \item{\code{date} - date of borrow event} +#' \item{\code{id}}{unique event id} +#' \item{\code{borrower_id}}{id of the member that borrowed the book} +#' \item{\code{isbn}}{is of the borrowed book} +#' \item{\code{date}}{date of borrow event} #' } #' \strong{returns} - returned books events #' \describe{ -#' \item{\code{id} - event id equal to borrow issue id} -#' \item{\code{date} - date of return event} +#' \item{\code{id}}{event id equal to borrow issue id} +#' \item{\code{date}}{date of return event} #' } "librarian" diff --git a/man/librarian.Rd b/man/librarian.Rd index 6313282..79e1190 100644 --- a/man/librarian.Rd +++ b/man/librarian.Rd @@ -9,33 +9,33 @@ A list of four data frames: \strong{books} - books on store \describe{ - \item{\code{isbn} - book ISBN number} - \item{\code{title} - book title} - \item{\code{genre} - comma separated book genre} - \item{\code{publisher} - name of book publisher} - \item{\code{author} - name of book author} - \item{\code{copies} - total number of book copies on store} + \item{\code{isbn}}{book ISBN number} + \item{\code{title}}{book title} + \item{\code{genre}}{comma separated book genre} + \item{\code{publisher}}{name of book publisher} + \item{\code{author}}{name of book author} + \item{\code{copies}}{total number of book copies on store} } \strong{borrowers} - registered library members \describe{ - \item{\code{id} - member unique id} - \item{\code{registered} - date the member joined library} - \item{\code{address} - member address} - \item{\code{name} - full member name} - \item{\code{phone_number} - member phone number} - \item{\code{program} - membership program type (standard, premium or vip)} + \item{\code{id}}{member unique id} + \item{\code{registered}}{date the member joined library} + \item{\code{address}}{member address} + \item{\code{name}}{full member name} + \item{\code{phone_number}}{member phone number} + \item{\code{program}}{membership program type (standard, premium or vip)} } \strong{issues} - borrowed books events \describe{ - \item{\code{id} - unique event id} - \item{\code{borrower_id} - id of the member that borrowed the book} - \item{\code{isbn} - is of the borrowed book} - \item{\code{date} - date of borrow event} + \item{\code{id}}{unique event id} + \item{\code{borrower_id}}{id of the member that borrowed the book} + \item{\code{isbn}}{is of the borrowed book} + \item{\code{date}}{date of borrow event} } \strong{returns} - returned books events \describe{ - \item{\code{id} - event id equal to borrow issue id} - \item{\code{date} - date of return event} + \item{\code{id}}{event id equal to borrow issue id} + \item{\code{date}}{date of return event} } } \usage{ From 1dd629d06bb69855a5612f0f8a7ba98a16101aac Mon Sep 17 00:00:00 2001 From: Krystian Igras Date: Wed, 25 Sep 2024 11:00:17 +0000 Subject: [PATCH 19/20] Update renv.lock. --- renv.lock | 962 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 626 insertions(+), 336 deletions(-) diff --git a/renv.lock b/renv.lock index 029dc7f..9bee7b3 100644 --- a/renv.lock +++ b/renv.lock @@ -1,6 +1,6 @@ { "R": { - "Version": "4.3.1", + "Version": "4.2.1", "Repositories": [ { "Name": "CRAN", @@ -14,110 +14,146 @@ "Version": "2.23-22", "Source": "Repository", "Repository": "RSPM", - "Hash": "2fecebc3047322fa5930f74fae5de70f", - "Requirements": [] + "Requirements": [ + "R", + "stats" + ], + "Hash": "2fecebc3047322fa5930f74fae5de70f" }, "MASS": { "Package": "MASS", "Version": "7.3-58.2", "Source": "Repository", "Repository": "CRAN", - "Hash": "e02d1a0f6122fd3e634b25b433704344", - "Requirements": [] + "Requirements": [ + "R", + "grDevices", + "graphics", + "methods", + "stats", + "utils" + ], + "Hash": "e02d1a0f6122fd3e634b25b433704344" }, "Matrix": { "Package": "Matrix", "Version": "1.5-3", "Source": "Repository", - "Repository": "RSPM", - "Hash": "4006dffe49958d2dd591c17e61e60591", + "Repository": "CRAN", "Requirements": [ - "lattice" - ] + "R", + "graphics", + "grid", + "lattice", + "methods", + "stats", + "utils" + ], + "Hash": "4006dffe49958d2dd591c17e61e60591" }, "NCmisc": { "Package": "NCmisc", "Version": "1.2.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "57805bff69b9ca137e70fb83bf0e35f9", - "Requirements": [] + "Requirements": [ + "R", + "grDevices", + "graphics", + "methods", + "stats", + "tools", + "utils" + ], + "Hash": "57805bff69b9ca137e70fb83bf0e35f9" }, "R6": { "Package": "R6", "Version": "2.5.1", "Source": "Repository", - "Repository": "RSPM", - "Hash": "470851b6d5d0ac559e9d01bb352b4021", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "470851b6d5d0ac559e9d01bb352b4021" }, "RColorBrewer": { "Package": "RColorBrewer", "Version": "1.1-3", "Source": "Repository", "Repository": "RSPM", - "Hash": "45f0398006e83a5b10b72a90663d8d8c", - "Requirements": [] + "Requirements": [ + "R" + ], + "Hash": "45f0398006e83a5b10b72a90663d8d8c" }, "Rcpp": { "Package": "Rcpp", "Version": "1.0.10", "Source": "Repository", - "Repository": "RSPM", - "Hash": "e749cae40fa9ef469b6050959517453c", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "methods", + "utils" + ], + "Hash": "e749cae40fa9ef469b6050959517453c" }, "askpass": { "Package": "askpass", "Version": "1.1", "Source": "Repository", "Repository": "RSPM", - "Hash": "e8a22846fff485f0be3770c2da758713", "Requirements": [ "sys" - ] + ], + "Hash": "e8a22846fff485f0be3770c2da758713" }, "base64enc": { "Package": "base64enc", "Version": "0.1-3", "Source": "Repository", - "Repository": "RSPM", - "Hash": "543776ae6848fde2f48ff3816d0628bc", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "543776ae6848fde2f48ff3816d0628bc" }, "boot": { "Package": "boot", "Version": "1.3-28.1", "Source": "Repository", "Repository": "RSPM", - "Hash": "9a052fbcbe97a98ceb18dbfd30ebd96e", - "Requirements": [] + "Requirements": [ + "R", + "graphics", + "stats" + ], + "Hash": "9a052fbcbe97a98ceb18dbfd30ebd96e" }, "brew": { "Package": "brew", "Version": "1.0-8", "Source": "Repository", "Repository": "CRAN", - "Hash": "d69a786e85775b126bddbee185ae6084", - "Requirements": [] + "Hash": "d69a786e85775b126bddbee185ae6084" }, "brio": { "Package": "brio", "Version": "1.1.3", "Source": "Repository", "Repository": "CRAN", - "Hash": "976cf154dfb043c012d87cddd8bca363", - "Requirements": [] + "Hash": "976cf154dfb043c012d87cddd8bca363" }, "bslib": { "Package": "bslib", "Version": "0.4.2", "Source": "Repository", - "Repository": "RSPM", - "Hash": "a7fbf03946ad741129dc81098722fca1", + "Repository": "CRAN", "Requirements": [ + "R", "base64enc", "cachem", + "grDevices", "htmltools", "jquerylib", "jsonlite", @@ -125,145 +161,176 @@ "mime", "rlang", "sass" - ] + ], + "Hash": "a7fbf03946ad741129dc81098722fca1" }, "cachem": { "Package": "cachem", "Version": "1.0.6", "Source": "Repository", "Repository": "RSPM", - "Hash": "648c5b3d71e6a37e3043617489a0a0e9", "Requirements": [ "fastmap", "rlang" - ] + ], + "Hash": "648c5b3d71e6a37e3043617489a0a0e9" }, "callr": { "Package": "callr", "Version": "3.7.3", "Source": "Repository", - "Repository": "RSPM", - "Hash": "9b2191ede20fa29828139b9900922e51", + "Repository": "CRAN", "Requirements": [ + "R", "R6", - "processx" - ] + "processx", + "utils" + ], + "Hash": "9b2191ede20fa29828139b9900922e51" }, "class": { "Package": "class", "Version": "7.3-22", "Source": "Repository", "Repository": "RSPM", - "Hash": "f91f6b29f38b8c280f2b9477787d4bb2", "Requirements": [ - "MASS" - ] + "MASS", + "R", + "stats", + "utils" + ], + "Hash": "f91f6b29f38b8c280f2b9477787d4bb2" }, "cli": { "Package": "cli", "Version": "3.6.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "1216ac65ac55ec0058a6f75d7ca0fd52", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "utils" + ], + "Hash": "1216ac65ac55ec0058a6f75d7ca0fd52" }, "clipr": { "Package": "clipr", "Version": "0.8.0", "Source": "Repository", "Repository": "RSPM", - "Hash": "3f038e5ac7f41d4ac41ce658c85e3042", - "Requirements": [] + "Requirements": [ + "utils" + ], + "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" }, "cluster": { "Package": "cluster", "Version": "2.1.4", "Source": "Repository", "Repository": "RSPM", - "Hash": "5edbbabab6ce0bf7900a74fd4358628e", - "Requirements": [] + "Requirements": [ + "R", + "grDevices", + "graphics", + "stats", + "utils" + ], + "Hash": "5edbbabab6ce0bf7900a74fd4358628e" }, "codetools": { "Package": "codetools", "Version": "0.2-19", "Source": "Repository", - "Repository": "RSPM", - "Hash": "c089a619a7fae175d149d89164f8c7d8", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "c089a619a7fae175d149d89164f8c7d8" }, "colorspace": { "Package": "colorspace", "Version": "2.1-0", "Source": "Repository", - "Repository": "RSPM", - "Hash": "f20c47fd52fae58b4e377c37bb8c335b", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R", + "grDevices", + "graphics", + "methods", + "stats" + ], + "Hash": "f20c47fd52fae58b4e377c37bb8c335b" }, "commonmark": { "Package": "commonmark", "Version": "1.8.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "b6e3e947d1d7ebf3d2bdcea1bde63fe7", - "Requirements": [] + "Hash": "b6e3e947d1d7ebf3d2bdcea1bde63fe7" }, "cpp11": { "Package": "cpp11", "Version": "0.4.3", "Source": "Repository", "Repository": "CRAN", - "Hash": "ed588261931ee3be2c700d22e94a29ab", - "Requirements": [] + "Hash": "ed588261931ee3be2c700d22e94a29ab" }, "crayon": { "Package": "crayon", "Version": "1.5.2", "Source": "Repository", - "Repository": "RSPM", - "Hash": "e8a1e41acf02548751f45c718d55aa6a", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "grDevices", + "methods", + "utils" + ], + "Hash": "e8a1e41acf02548751f45c718d55aa6a" }, "credentials": { "Package": "credentials", "Version": "1.3.2", "Source": "Repository", "Repository": "RSPM", - "Hash": "93762d0a34d78e6a025efdbfb5c6bb41", "Requirements": [ "askpass", "curl", "jsonlite", "openssl", "sys" - ] + ], + "Hash": "93762d0a34d78e6a025efdbfb5c6bb41" }, "curl": { "Package": "curl", "Version": "5.0.0", "Source": "Repository", - "Repository": "RSPM", - "Hash": "e4f97056611e8e6b8b852d13b7400cf1", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "e4f97056611e8e6b8b852d13b7400cf1" }, "desc": { "Package": "desc", "Version": "1.4.2", "Source": "Repository", - "Repository": "RSPM", - "Hash": "6b9602c7ebbe87101a9c8edb6e8b6d21", + "Repository": "CRAN", "Requirements": [ + "R", "R6", "cli", - "rprojroot" - ] + "rprojroot", + "utils" + ], + "Hash": "6b9602c7ebbe87101a9c8edb6e8b6d21" }, "devtools": { "Package": "devtools", "Version": "2.4.5", "Source": "Repository", - "Repository": "RSPM", - "Hash": "ea5bc8b4a6a01e4f12d98b58329930bb", + "Repository": "CRAN", "Requirements": [ + "R", "cli", "desc", "ellipsis", @@ -281,37 +348,49 @@ "roxygen2", "rversions", "sessioninfo", + "stats", "testthat", + "tools", "urlchecker", "usethis", + "utils", "withr" - ] + ], + "Hash": "ea5bc8b4a6a01e4f12d98b58329930bb" }, "diffobj": { "Package": "diffobj", "Version": "0.3.5", "Source": "Repository", - "Repository": "RSPM", - "Hash": "bcaa8b95f8d7d01a5dedfd959ce88ab8", + "Repository": "CRAN", "Requirements": [ - "crayon" - ] + "R", + "crayon", + "methods", + "stats", + "tools", + "utils" + ], + "Hash": "bcaa8b95f8d7d01a5dedfd959ce88ab8" }, "digest": { "Package": "digest", "Version": "0.6.31", "Source": "Repository", "Repository": "CRAN", - "Hash": "8b708f296afd9ae69f450f9640be8990", - "Requirements": [] + "Requirements": [ + "R", + "utils" + ], + "Hash": "8b708f296afd9ae69f450f9640be8990" }, "downlit": { "Package": "downlit", "Version": "0.4.2", "Source": "Repository", "Repository": "CRAN", - "Hash": "79bf3f66590752ffbba20f8d2da94c7c", "Requirements": [ + "R", "brio", "desc", "digest", @@ -322,119 +401,142 @@ "vctrs", "withr", "yaml" - ] + ], + "Hash": "79bf3f66590752ffbba20f8d2da94c7c" }, "dplyr": { "Package": "dplyr", "Version": "1.1.4", "Source": "Repository", - "Repository": "CRAN", - "Hash": "fedd9d00c2944ff00a0e2696ccf048ec", + "Repository": "RSPM", "Requirements": [ + "R", "R6", "cli", "generics", "glue", "lifecycle", "magrittr", + "methods", "pillar", "rlang", "tibble", "tidyselect", + "utils", "vctrs" - ] + ], + "Hash": "fedd9d00c2944ff00a0e2696ccf048ec" }, "ellipsis": { "Package": "ellipsis", "Version": "0.3.2", "Source": "Repository", - "Repository": "RSPM", - "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077", + "Repository": "CRAN", "Requirements": [ + "R", "rlang" - ] + ], + "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077" }, "evaluate": { "Package": "evaluate", "Version": "0.20", "Source": "Repository", "Repository": "CRAN", - "Hash": "4b68aa51edd89a0e044a66e75ae3cc6c", - "Requirements": [] + "Requirements": [ + "R", + "methods" + ], + "Hash": "4b68aa51edd89a0e044a66e75ae3cc6c" }, "fansi": { "Package": "fansi", "Version": "1.0.6", "Source": "Repository", - "Repository": "CRAN", - "Hash": "962174cf2aeb5b9eea581522286a911f", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "grDevices", + "utils" + ], + "Hash": "962174cf2aeb5b9eea581522286a911f" }, "farver": { "Package": "farver", "Version": "2.1.1", "Source": "Repository", "Repository": "RSPM", - "Hash": "8106d78941f34855c440ddb946b8f7a5", - "Requirements": [] + "Hash": "8106d78941f34855c440ddb946b8f7a5" }, "fastmap": { "Package": "fastmap", "Version": "1.1.0", "Source": "Repository", "Repository": "RSPM", - "Hash": "77bd60a6157420d4ffa93b27cf6a58b8", - "Requirements": [] + "Hash": "77bd60a6157420d4ffa93b27cf6a58b8" }, "fontawesome": { "Package": "fontawesome", "Version": "0.5.0", "Source": "Repository", - "Repository": "RSPM", - "Hash": "e80750aec5717dedc019ad7ee40e4a7c", + "Repository": "CRAN", "Requirements": [ + "R", "htmltools", "rlang" - ] + ], + "Hash": "e80750aec5717dedc019ad7ee40e4a7c" }, "foreign": { "Package": "foreign", "Version": "0.8-85", "Source": "Repository", - "Repository": "RSPM", - "Hash": "26a24dde1722321b78f10d3bf42538d6", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R", + "methods", + "stats", + "utils" + ], + "Hash": "26a24dde1722321b78f10d3bf42538d6" }, "formatR": { "Package": "formatR", "Version": "1.14", "Source": "Repository", - "Repository": "RSPM", - "Hash": "63cb26d12517c7863f5abb006c5e0f25", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "63cb26d12517c7863f5abb006c5e0f25" }, "fs": { "Package": "fs", "Version": "1.6.1", "Source": "Repository", - "Repository": "RSPM", - "Hash": "f4dcd23b67e33d851d2079f703e8b985", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R", + "methods" + ], + "Hash": "f4dcd23b67e33d851d2079f703e8b985" }, "generics": { "Package": "generics", "Version": "0.1.3", "Source": "Repository", - "Repository": "RSPM", - "Hash": "15e9634c0fcd294799e9b2e929ed1b86", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R", + "methods" + ], + "Hash": "15e9634c0fcd294799e9b2e929ed1b86" }, "gert": { "Package": "gert", "Version": "1.9.2", "Source": "Repository", "Repository": "RSPM", - "Hash": "9122b3958e749badb5c939f498038b57", "Requirements": [ "askpass", "credentials", @@ -442,330 +544,395 @@ "rstudioapi", "sys", "zip" - ] + ], + "Hash": "9122b3958e749badb5c939f498038b57" }, "ggplot2": { "Package": "ggplot2", "Version": "3.4.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "d494daf77c4aa7f084dbbe6ca5dcaca7", "Requirements": [ "MASS", + "R", "cli", "glue", + "grDevices", + "grid", "gtable", "isoband", "lifecycle", "mgcv", "rlang", "scales", + "stats", "tibble", "vctrs", "withr" - ] + ], + "Hash": "d494daf77c4aa7f084dbbe6ca5dcaca7" }, "gh": { "Package": "gh", "Version": "1.3.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "b6a12054ee13dce0f6696c019c10e539", "Requirements": [ + "R", "cli", "gitcreds", "httr", "ini", "jsonlite" - ] + ], + "Hash": "b6a12054ee13dce0f6696c019c10e539" }, "gitcreds": { "Package": "gitcreds", "Version": "0.1.2", "Source": "Repository", - "Repository": "RSPM", - "Hash": "ab08ac61f3e1be454ae21911eb8bc2fe", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "ab08ac61f3e1be454ae21911eb8bc2fe" }, "glue": { "Package": "glue", "Version": "1.7.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "e0b3a53876554bd45879e596cdb10a52", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "e0b3a53876554bd45879e596cdb10a52" }, "gtable": { "Package": "gtable", "Version": "0.3.1", "Source": "Repository", "Repository": "RSPM", - "Hash": "36b4265fb818f6a342bed217549cd896", - "Requirements": [] + "Requirements": [ + "R", + "grid" + ], + "Hash": "36b4265fb818f6a342bed217549cd896" }, "highr": { "Package": "highr", "Version": "0.10", "Source": "Repository", - "Repository": "RSPM", - "Hash": "06230136b2d2b9ba5805e1963fa6e890", + "Repository": "CRAN", "Requirements": [ + "R", "xfun" - ] + ], + "Hash": "06230136b2d2b9ba5805e1963fa6e890" }, "htmltools": { "Package": "htmltools", "Version": "0.5.4", "Source": "Repository", - "Repository": "RSPM", - "Hash": "9d27e99cc90bd701c0a7a63e5923f9b7", + "Repository": "CRAN", "Requirements": [ + "R", "base64enc", "digest", "ellipsis", "fastmap", - "rlang" - ] + "grDevices", + "rlang", + "utils" + ], + "Hash": "9d27e99cc90bd701c0a7a63e5923f9b7" }, "htmlwidgets": { "Package": "htmlwidgets", "Version": "1.6.1", "Source": "Repository", - "Repository": "RSPM", - "Hash": "b677ee5954471eaa974c0d099a343a1a", + "Repository": "CRAN", "Requirements": [ + "grDevices", "htmltools", "jsonlite", "knitr", "rmarkdown", "yaml" - ] + ], + "Hash": "b677ee5954471eaa974c0d099a343a1a" }, "httpuv": { "Package": "httpuv", "Version": "1.6.9", "Source": "Repository", "Repository": "CRAN", - "Hash": "1046aa31a57eae8b357267a56a0b6d8b", "Requirements": [ + "R", "R6", "Rcpp", "later", - "promises" - ] + "promises", + "utils" + ], + "Hash": "1046aa31a57eae8b357267a56a0b6d8b" }, "httr": { "Package": "httr", "Version": "1.4.4", "Source": "Repository", - "Repository": "RSPM", - "Hash": "57557fac46471f0dbbf44705cc6a5c8c", + "Repository": "CRAN", "Requirements": [ + "R", "R6", "curl", "jsonlite", "mime", "openssl" - ] + ], + "Hash": "57557fac46471f0dbbf44705cc6a5c8c" }, "ini": { "Package": "ini", "Version": "0.3.1", "Source": "Repository", "Repository": "RSPM", - "Hash": "6154ec2223172bce8162d4153cda21f7", - "Requirements": [] + "Hash": "6154ec2223172bce8162d4153cda21f7" }, "isoband": { "Package": "isoband", "Version": "0.2.7", "Source": "Repository", "Repository": "RSPM", - "Hash": "0080607b4a1a7b28979aecef976d8bc2", - "Requirements": [] + "Requirements": [ + "grid", + "utils" + ], + "Hash": "0080607b4a1a7b28979aecef976d8bc2" }, "jquerylib": { "Package": "jquerylib", "Version": "0.1.4", "Source": "Repository", "Repository": "RSPM", - "Hash": "5aab57a3bd297eee1c1d862735972182", "Requirements": [ "htmltools" - ] + ], + "Hash": "5aab57a3bd297eee1c1d862735972182" }, "jsonlite": { "Package": "jsonlite", "Version": "1.8.4", "Source": "Repository", "Repository": "CRAN", - "Hash": "a4269a09a9b865579b2635c77e572374", - "Requirements": [] + "Requirements": [ + "methods" + ], + "Hash": "a4269a09a9b865579b2635c77e572374" }, "knitr": { "Package": "knitr", "Version": "1.42", "Source": "Repository", "Repository": "CRAN", - "Hash": "8329a9bcc82943c8069104d4be3ee22d", "Requirements": [ + "R", "evaluate", "highr", + "methods", + "tools", "xfun", "yaml" - ] + ], + "Hash": "8329a9bcc82943c8069104d4be3ee22d" }, "labeling": { "Package": "labeling", "Version": "0.4.2", "Source": "Repository", "Repository": "RSPM", - "Hash": "3d5108641f47470611a32d0bdf357a72", - "Requirements": [] + "Requirements": [ + "graphics", + "stats" + ], + "Hash": "3d5108641f47470611a32d0bdf357a72" }, "later": { "Package": "later", "Version": "1.3.0", "Source": "Repository", "Repository": "RSPM", - "Hash": "7e7b457d7766bc47f2a5f21cc2984f8e", "Requirements": [ "Rcpp", "rlang" - ] + ], + "Hash": "7e7b457d7766bc47f2a5f21cc2984f8e" }, "lattice": { "Package": "lattice", "Version": "0.20-45", "Source": "Repository", - "Repository": "RSPM", - "Hash": "b64cdbb2b340437c4ee047a1f4c4377b", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R", + "grDevices", + "graphics", + "grid", + "stats", + "utils" + ], + "Hash": "b64cdbb2b340437c4ee047a1f4c4377b" }, "lifecycle": { "Package": "lifecycle", "Version": "1.0.4", "Source": "Repository", - "Repository": "CRAN", - "Hash": "b8552d117e1b808b09a832f589b79035", + "Repository": "RSPM", "Requirements": [ + "R", "cli", "glue", "rlang" - ] + ], + "Hash": "b8552d117e1b808b09a832f589b79035" }, "magrittr": { "Package": "magrittr", "Version": "2.0.3", "Source": "Repository", - "Repository": "RSPM", - "Hash": "7ce2733a9826b3aeb1775d56fd305472", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "7ce2733a9826b3aeb1775d56fd305472" }, "markdown": { "Package": "markdown", "Version": "1.5", "Source": "Repository", - "Repository": "RSPM", - "Hash": "d209cfd1f4ff7260eae5a7f07da3aa4f", + "Repository": "CRAN", "Requirements": [ + "R", "commonmark", + "utils", "xfun" - ] + ], + "Hash": "d209cfd1f4ff7260eae5a7f07da3aa4f" }, "memoise": { "Package": "memoise", "Version": "2.0.1", "Source": "Repository", "Repository": "RSPM", - "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c", "Requirements": [ "cachem", "rlang" - ] + ], + "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" }, "mgcv": { "Package": "mgcv", "Version": "1.8-41", "Source": "Repository", "Repository": "RSPM", - "Hash": "6b3904f13346742caa3e82dd0303d4ad", "Requirements": [ "Matrix", - "nlme" - ] + "R", + "graphics", + "methods", + "nlme", + "splines", + "stats", + "utils" + ], + "Hash": "6b3904f13346742caa3e82dd0303d4ad" }, "mime": { "Package": "mime", "Version": "0.12", "Source": "Repository", - "Repository": "RSPM", - "Hash": "18e9c28c1d3ca1560ce30658b22ce104", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "tools" + ], + "Hash": "18e9c28c1d3ca1560ce30658b22ce104" }, "miniUI": { "Package": "miniUI", "Version": "0.1.1.1", "Source": "Repository", - "Repository": "RSPM", - "Hash": "fec5f52652d60615fdb3957b3d74324a", + "Repository": "CRAN", "Requirements": [ "htmltools", - "shiny" - ] + "shiny", + "utils" + ], + "Hash": "fec5f52652d60615fdb3957b3d74324a" }, "munsell": { "Package": "munsell", "Version": "0.5.0", "Source": "Repository", "Repository": "RSPM", - "Hash": "6dfe8bf774944bd5595785e3229d8771", "Requirements": [ - "colorspace" - ] + "colorspace", + "methods" + ], + "Hash": "6dfe8bf774944bd5595785e3229d8771" }, "nlme": { "Package": "nlme", "Version": "3.1-162", "Source": "Repository", - "Repository": "RSPM", - "Hash": "0984ce8da8da9ead8643c5cbbb60f83e", + "Repository": "CRAN", "Requirements": [ - "lattice" - ] + "R", + "graphics", + "lattice", + "stats", + "utils" + ], + "Hash": "0984ce8da8da9ead8643c5cbbb60f83e" }, "nnet": { "Package": "nnet", "Version": "7.3-19", "Source": "Repository", "Repository": "RSPM", - "Hash": "2c797b46eea7fb58ede195bc0b1f1138", - "Requirements": [] + "Requirements": [ + "R", + "stats", + "utils" + ], + "Hash": "2c797b46eea7fb58ede195bc0b1f1138" }, "openssl": { "Package": "openssl", "Version": "2.0.5", "Source": "Repository", "Repository": "RSPM", - "Hash": "b04c27110bf367b4daa93f34f3d58e75", "Requirements": [ "askpass" - ] + ], + "Hash": "b04c27110bf367b4daa93f34f3d58e75" }, "packrat": { "Package": "packrat", "Version": "0.9.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "2735eb4b51c302014f53acbb3c80a65f", - "Requirements": [] + "Requirements": [ + "R", + "tools", + "utils" + ], + "Hash": "2735eb4b51c302014f53acbb3c80a65f" }, "pillar": { "Package": "pillar", "Version": "1.9.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "15da5a8412f317beeee6175fbc76f4bb", "Requirements": [ "cli", "fansi", @@ -773,16 +940,18 @@ "lifecycle", "rlang", "utf8", + "utils", "vctrs" - ] + ], + "Hash": "15da5a8412f317beeee6175fbc76f4bb" }, "pkgbuild": { "Package": "pkgbuild", "Version": "1.4.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "d6c3008d79653a0f267703288230105e", "Requirements": [ + "R", "R6", "callr", "cli", @@ -792,23 +961,26 @@ "processx", "rprojroot", "withr" - ] + ], + "Hash": "d6c3008d79653a0f267703288230105e" }, "pkgconfig": { "Package": "pkgconfig", "Version": "2.0.3", "Source": "Repository", - "Repository": "RSPM", - "Hash": "01f28d4278f15c76cddbea05899c5d6f", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "utils" + ], + "Hash": "01f28d4278f15c76cddbea05899c5d6f" }, "pkgdown": { "Package": "pkgdown", "Version": "2.0.7", "Source": "Repository", - "Repository": "RSPM", - "Hash": "16fa15449c930bf3a7761d3c68f8abf9", + "Repository": "CRAN", "Requirements": [ + "R", "bslib", "callr", "cli", @@ -829,132 +1001,157 @@ "withr", "xml2", "yaml" - ] + ], + "Hash": "16fa15449c930bf3a7761d3c68f8abf9" }, "pkgload": { "Package": "pkgload", "Version": "1.3.2", "Source": "Repository", "Repository": "CRAN", - "Hash": "6b0c222c5071efe0f3baf3dae9aa40e2", "Requirements": [ + "R", "cli", "crayon", "desc", "fs", "glue", + "methods", "rlang", "rprojroot", + "utils", "withr" - ] + ], + "Hash": "6b0c222c5071efe0f3baf3dae9aa40e2" }, "praise": { "Package": "praise", "Version": "1.0.0", "Source": "Repository", "Repository": "RSPM", - "Hash": "a555924add98c99d2f411e37e7d25e9f", - "Requirements": [] + "Hash": "a555924add98c99d2f411e37e7d25e9f" }, "prettyunits": { "Package": "prettyunits", "Version": "1.1.1", "Source": "Repository", "Repository": "RSPM", - "Hash": "95ef9167b75dde9d2ccc3c7528393e7e", - "Requirements": [] + "Hash": "95ef9167b75dde9d2ccc3c7528393e7e" }, "processx": { "Package": "processx", "Version": "3.8.0", "Source": "Repository", - "Repository": "RSPM", - "Hash": "a33ee2d9bf07564efb888ad98410da84", + "Repository": "CRAN", "Requirements": [ + "R", "R6", - "ps" - ] + "ps", + "utils" + ], + "Hash": "a33ee2d9bf07564efb888ad98410da84" }, "proftools": { "Package": "proftools", "Version": "0.99-3", "Source": "Repository", "Repository": "RSPM", - "Hash": "ac0e388f63fd6aeff975706618e7c758", - "Requirements": [] + "Hash": "ac0e388f63fd6aeff975706618e7c758" }, "profvis": { "Package": "profvis", "Version": "0.3.7", "Source": "Repository", "Repository": "CRAN", - "Hash": "e9d21e79848e02e524bea6f5bd53e7e4", "Requirements": [ + "R", "htmlwidgets", "stringr" - ] + ], + "Hash": "e9d21e79848e02e524bea6f5bd53e7e4" }, "promises": { "Package": "promises", "Version": "1.2.0.1", "Source": "Repository", "Repository": "RSPM", - "Hash": "4ab2c43adb4d4699cf3690acd378d75d", "Requirements": [ "R6", "Rcpp", "later", "magrittr", - "rlang" - ] + "rlang", + "stats" + ], + "Hash": "4ab2c43adb4d4699cf3690acd378d75d" }, "ps": { "Package": "ps", "Version": "1.7.2", "Source": "Repository", - "Repository": "RSPM", - "Hash": "68dd03d98a5efd1eb3012436de45ba83", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R", + "utils" + ], + "Hash": "68dd03d98a5efd1eb3012436de45ba83" }, "purrr": { "Package": "purrr", "Version": "1.0.2", "Source": "Repository", "Repository": "CRAN", - "Hash": "1cba04a4e9414bdefc9dcaa99649a8dc", "Requirements": [ + "R", "cli", "lifecycle", "magrittr", "rlang", "vctrs" - ] + ], + "Hash": "1cba04a4e9414bdefc9dcaa99649a8dc" + }, + "queryBuilder": { + "Package": "queryBuilder", + "Version": "0.1.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "dplyr", + "glue", + "magrittr", + "purrr", + "rlang", + "utils" + ], + "Hash": "d512ed2cb4dbbb7b4a5884f4e009876a" }, "ragg": { "Package": "ragg", "Version": "1.2.5", "Source": "Repository", "Repository": "CRAN", - "Hash": "690bc058ea2b1b8a407d3cfe3dce3ef9", "Requirements": [ "systemfonts", "textshaping" - ] + ], + "Hash": "690bc058ea2b1b8a407d3cfe3dce3ef9" }, "rappdirs": { "Package": "rappdirs", "Version": "0.3.3", "Source": "Repository", - "Repository": "RSPM", - "Hash": "5e3c5dc0b071b21fa128676560dbe94d", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "5e3c5dc0b071b21fa128676560dbe94d" }, "rcmdcheck": { "Package": "rcmdcheck", "Version": "1.4.0", "Source": "Repository", - "Repository": "RSPM", - "Hash": "8f25ebe2ec38b1f2aef3b0d2ef76f6c4", + "Repository": "CRAN", "Requirements": [ "R6", "callr", @@ -966,67 +1163,87 @@ "prettyunits", "rprojroot", "sessioninfo", + "utils", "withr", "xopen" - ] + ], + "Hash": "8f25ebe2ec38b1f2aef3b0d2ef76f6c4" }, "rematch2": { "Package": "rematch2", "Version": "2.1.2", "Source": "Repository", "Repository": "RSPM", - "Hash": "76c9e04c712a05848ae7a23d2f170a40", "Requirements": [ "tibble" - ] + ], + "Hash": "76c9e04c712a05848ae7a23d2f170a40" }, "remotes": { "Package": "remotes", "Version": "2.4.2", "Source": "Repository", - "Repository": "RSPM", - "Hash": "227045be9aee47e6dda9bb38ac870d67", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R", + "methods", + "stats", + "tools", + "utils" + ], + "Hash": "227045be9aee47e6dda9bb38ac870d67" }, "renv": { "Package": "renv", "Version": "1.0.7", - "Source": "Repository" + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "utils" + ], + "Hash": "397b7b2a265bc5a7a06852524dabae20" }, "rlang": { "Package": "rlang", "Version": "1.1.4", "Source": "Repository", "Repository": "CRAN", - "Hash": "3eec01f8b1dee337674b2e34ab1f9bc1", - "Requirements": [] + "Requirements": [ + "R", + "utils" + ], + "Hash": "3eec01f8b1dee337674b2e34ab1f9bc1" }, "rmarkdown": { "Package": "rmarkdown", "Version": "2.20", "Source": "Repository", "Repository": "CRAN", - "Hash": "716fde5382293cc94a71f68c85b78d19", "Requirements": [ + "R", "bslib", "evaluate", "htmltools", "jquerylib", "jsonlite", "knitr", + "methods", "stringr", "tinytex", + "tools", + "utils", "xfun", "yaml" - ] + ], + "Hash": "716fde5382293cc94a71f68c85b78d19" }, "roxygen2": { "Package": "roxygen2", "Version": "7.2.3", "Source": "Repository", - "Repository": "RSPM", - "Hash": "7b153c746193b143c14baa072bae4e27", + "Repository": "CRAN", "Requirements": [ + "R", "R6", "brew", "cli", @@ -1034,87 +1251,99 @@ "cpp11", "desc", "knitr", + "methods", "pkgload", "purrr", "rlang", "stringi", "stringr", + "utils", "withr", "xml2" - ] + ], + "Hash": "7b153c746193b143c14baa072bae4e27" }, "rpart": { "Package": "rpart", "Version": "4.1.21", "Source": "Repository", - "Repository": "RSPM", - "Hash": "d5bc1a16e01e50e08581f0c362d3955d", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R", + "grDevices", + "graphics", + "stats" + ], + "Hash": "d5bc1a16e01e50e08581f0c362d3955d" }, "rprojroot": { "Package": "rprojroot", "Version": "2.0.3", "Source": "Repository", - "Repository": "RSPM", - "Hash": "1de7ab598047a87bba48434ba35d497d", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "1de7ab598047a87bba48434ba35d497d" }, "rsconnect": { "Package": "rsconnect", "Version": "0.8.29", "Source": "Repository", "Repository": "CRAN", - "Hash": "fe178fc15af80952f546aafedf655b36", "Requirements": [ + "R", "curl", "digest", "jsonlite", "openssl", "packrat", "rstudioapi", + "tools", "yaml" - ] + ], + "Hash": "fe178fc15af80952f546aafedf655b36" }, "rstudioapi": { "Package": "rstudioapi", "Version": "0.14", "Source": "Repository", "Repository": "CRAN", - "Hash": "690bd2acc42a9166ce34845884459320", - "Requirements": [] + "Hash": "690bd2acc42a9166ce34845884459320" }, "rversions": { "Package": "rversions", "Version": "2.1.2", "Source": "Repository", - "Repository": "RSPM", - "Hash": "a9881dfed103e83f9de151dc17002cd1", + "Repository": "CRAN", "Requirements": [ "curl", + "utils", "xml2" - ] + ], + "Hash": "a9881dfed103e83f9de151dc17002cd1" }, "sass": { "Package": "sass", "Version": "0.4.5", "Source": "Repository", "Repository": "RSPM", - "Hash": "2bb4371a4c80115518261866eab6ab11", "Requirements": [ "R6", "fs", "htmltools", "rappdirs", "rlang" - ] + ], + "Hash": "2bb4371a4c80115518261866eab6ab11" }, "scales": { "Package": "scales", "Version": "1.2.1", "Source": "Repository", "Repository": "RSPM", - "Hash": "906cb23d2f1c5680b8ce439b44c6fa63", "Requirements": [ + "R", "R6", "RColorBrewer", "farver", @@ -1123,25 +1352,29 @@ "munsell", "rlang", "viridisLite" - ] + ], + "Hash": "906cb23d2f1c5680b8ce439b44c6fa63" }, "sessioninfo": { "Package": "sessioninfo", "Version": "1.2.2", "Source": "Repository", - "Repository": "RSPM", - "Hash": "3f9796a8d0a0e8c6eb49a4b029359d1f", + "Repository": "CRAN", "Requirements": [ - "cli" - ] + "R", + "cli", + "tools", + "utils" + ], + "Hash": "3f9796a8d0a0e8c6eb49a4b029359d1f" }, "shiny": { "Package": "shiny", "Version": "1.7.4", "Source": "Repository", "Repository": "CRAN", - "Hash": "c2eae3d8c670fa9dfa35a12066f4a1d5", "Requirements": [ + "R", "R6", "bslib", "cachem", @@ -1151,50 +1384,67 @@ "fastmap", "fontawesome", "glue", + "grDevices", "htmltools", "httpuv", "jsonlite", "later", "lifecycle", + "methods", "mime", "promises", "rlang", "sourcetools", + "tools", + "utils", "withr", "xtable" - ] + ], + "Hash": "c2eae3d8c670fa9dfa35a12066f4a1d5" }, "sourcetools": { "Package": "sourcetools", "Version": "0.1.7-1", "Source": "Repository", - "Repository": "RSPM", - "Hash": "5f5a7629f956619d519205ec475fe647", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "5f5a7629f956619d519205ec475fe647" }, "spatial": { "Package": "spatial", "Version": "7.3-17", "Source": "Repository", - "Repository": "RSPM", - "Hash": "1229a01b4ec059e9f2396724f2ec9010", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R", + "graphics", + "stats", + "utils" + ], + "Hash": "1229a01b4ec059e9f2396724f2ec9010" }, "stringi": { "Package": "stringi", "Version": "1.7.12", "Source": "Repository", - "Repository": "RSPM", - "Hash": "ca8bd84263c77310739d2cf64d84d7c9", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R", + "stats", + "tools", + "utils" + ], + "Hash": "ca8bd84263c77310739d2cf64d84d7c9" }, "stringr": { "Package": "stringr", "Version": "1.5.0", "Source": "Repository", - "Repository": "RSPM", - "Hash": "671a4d384ae9d32fc47a14e98bfa3dc8", + "Repository": "CRAN", "Requirements": [ + "R", "cli", "glue", "lifecycle", @@ -1202,43 +1452,50 @@ "rlang", "stringi", "vctrs" - ] + ], + "Hash": "671a4d384ae9d32fc47a14e98bfa3dc8" }, "survival": { "Package": "survival", "Version": "3.5-7", "Source": "Repository", "Repository": "RSPM", - "Hash": "b8e943d262c3da0b0febd3e04517c197", "Requirements": [ - "Matrix" - ] + "Matrix", + "R", + "graphics", + "methods", + "splines", + "stats", + "utils" + ], + "Hash": "b8e943d262c3da0b0febd3e04517c197" }, "sys": { "Package": "sys", "Version": "3.4.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "34c16f1ef796057bfa06d3f4ff818a5d", - "Requirements": [] + "Hash": "34c16f1ef796057bfa06d3f4ff818a5d" }, "systemfonts": { "Package": "systemfonts", "Version": "1.0.4", "Source": "Repository", - "Repository": "RSPM", - "Hash": "90b28393209827327de889f49935140a", + "Repository": "CRAN", "Requirements": [ + "R", "cpp11" - ] + ], + "Hash": "90b28393209827327de889f49935140a" }, "testthat": { "Package": "testthat", "Version": "3.1.6", "Source": "Repository", "Repository": "CRAN", - "Hash": "7910146255835c66e9eb272fb215248d", "Requirements": [ + "R", "R6", "brio", "callr", @@ -1250,49 +1507,56 @@ "jsonlite", "lifecycle", "magrittr", + "methods", "pkgload", "praise", "processx", "ps", "rlang", + "utils", "waldo", "withr" - ] + ], + "Hash": "7910146255835c66e9eb272fb215248d" }, "textshaping": { "Package": "textshaping", "Version": "0.3.6", "Source": "Repository", "Repository": "CRAN", - "Hash": "1ab6223d3670fac7143202cb6a2d43d5", "Requirements": [ + "R", "cpp11", "systemfonts" - ] + ], + "Hash": "1ab6223d3670fac7143202cb6a2d43d5" }, "tibble": { "Package": "tibble", "Version": "3.2.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "a84e2cc86d07289b3b6f5069df7a004c", "Requirements": [ + "R", "fansi", "lifecycle", "magrittr", + "methods", "pillar", "pkgconfig", "rlang", + "utils", "vctrs" - ] + ], + "Hash": "a84e2cc86d07289b3b6f5069df7a004c" }, "tidyr": { "Package": "tidyr", "Version": "1.3.0", "Source": "Repository", - "Repository": "RSPM", - "Hash": "e47debdc7ce599b070c8e78e8ac0cfcf", + "Repository": "CRAN", "Requirements": [ + "R", "cli", "cpp11", "dplyr", @@ -1304,53 +1568,58 @@ "stringr", "tibble", "tidyselect", + "utils", "vctrs" - ] + ], + "Hash": "e47debdc7ce599b070c8e78e8ac0cfcf" }, "tidyselect": { "Package": "tidyselect", "Version": "1.2.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "829f27b9c4919c16b593794a6344d6c0", "Requirements": [ + "R", "cli", "glue", "lifecycle", "rlang", "vctrs", "withr" - ] + ], + "Hash": "829f27b9c4919c16b593794a6344d6c0" }, "tinytex": { "Package": "tinytex", "Version": "0.44", "Source": "Repository", "Repository": "RSPM", - "Hash": "c0f007e2eeed7722ce13d42b84a22e07", "Requirements": [ "xfun" - ] + ], + "Hash": "c0f007e2eeed7722ce13d42b84a22e07" }, "urlchecker": { "Package": "urlchecker", "Version": "1.0.1", "Source": "Repository", - "Repository": "RSPM", - "Hash": "409328b8e1253c8d729a7836fe7f7a16", + "Repository": "CRAN", "Requirements": [ + "R", "cli", "curl", + "tools", "xml2" - ] + ], + "Hash": "409328b8e1253c8d729a7836fe7f7a16" }, "usethis": { "Package": "usethis", "Version": "2.1.6", "Source": "Repository", "Repository": "RSPM", - "Hash": "a67a22c201832b12c036cc059f1d137d", "Requirements": [ + "R", "cli", "clipr", "crayon", @@ -1367,121 +1636,142 @@ "rlang", "rprojroot", "rstudioapi", + "stats", + "utils", "whisker", "withr", "yaml" - ] + ], + "Hash": "a67a22c201832b12c036cc059f1d137d" }, "utf8": { "Package": "utf8", "Version": "1.2.4", "Source": "Repository", "Repository": "CRAN", - "Hash": "62b65c52671e6665f803ff02954446e9", - "Requirements": [] + "Requirements": [ + "R" + ], + "Hash": "62b65c52671e6665f803ff02954446e9" }, "vctrs": { "Package": "vctrs", "Version": "0.6.5", "Source": "Repository", - "Repository": "CRAN", - "Hash": "c03fa420630029418f7e6da3667aac4a", + "Repository": "RSPM", "Requirements": [ + "R", "cli", "glue", "lifecycle", "rlang" - ] + ], + "Hash": "c03fa420630029418f7e6da3667aac4a" }, "viridisLite": { "Package": "viridisLite", "Version": "0.4.1", "Source": "Repository", "Repository": "RSPM", - "Hash": "62f4b5da3e08d8e5bcba6cac15603f70", - "Requirements": [] + "Requirements": [ + "R" + ], + "Hash": "62f4b5da3e08d8e5bcba6cac15603f70" }, "waldo": { "Package": "waldo", "Version": "0.4.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "035fba89d0c86e2113120f93301b98ad", "Requirements": [ "cli", "diffobj", "fansi", "glue", + "methods", "rematch2", "rlang", "tibble" - ] + ], + "Hash": "035fba89d0c86e2113120f93301b98ad" }, "whisker": { "Package": "whisker", "Version": "0.4.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "c6abfa47a46d281a7d5159d0a8891e88", - "Requirements": [] + "Hash": "c6abfa47a46d281a7d5159d0a8891e88" }, "withr": { "Package": "withr", "Version": "3.0.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "d31b6c62c10dcf11ec530ca6b0dd5d35", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "grDevices", + "graphics" + ], + "Hash": "d31b6c62c10dcf11ec530ca6b0dd5d35" }, "xfun": { "Package": "xfun", "Version": "0.37", "Source": "Repository", "Repository": "CRAN", - "Hash": "a6860e1400a8fd1ddb6d9b4230cc34ab", - "Requirements": [] + "Requirements": [ + "stats", + "tools" + ], + "Hash": "a6860e1400a8fd1ddb6d9b4230cc34ab" }, "xml2": { "Package": "xml2", "Version": "1.3.3", "Source": "Repository", - "Repository": "RSPM", - "Hash": "40682ed6a969ea5abfd351eb67833adc", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R", + "methods" + ], + "Hash": "40682ed6a969ea5abfd351eb67833adc" }, "xopen": { "Package": "xopen", "Version": "1.0.0", "Source": "Repository", - "Repository": "RSPM", - "Hash": "6c85f015dee9cc7710ddd20f86881f58", + "Repository": "CRAN", "Requirements": [ + "R", "processx" - ] + ], + "Hash": "6c85f015dee9cc7710ddd20f86881f58" }, "xtable": { "Package": "xtable", "Version": "1.8-4", "Source": "Repository", - "Repository": "RSPM", - "Hash": "b8acdf8af494d9ec19ccb2481a9b11c2", - "Requirements": [] + "Repository": "CRAN", + "Requirements": [ + "R", + "stats", + "utils" + ], + "Hash": "b8acdf8af494d9ec19ccb2481a9b11c2" }, "yaml": { "Package": "yaml", "Version": "2.3.7", "Source": "Repository", "Repository": "CRAN", - "Hash": "0d0056cc5383fbc240ccd0cb584bf436", - "Requirements": [] + "Hash": "0d0056cc5383fbc240ccd0cb584bf436" }, "zip": { "Package": "zip", "Version": "2.2.2", "Source": "Repository", "Repository": "RSPM", - "Hash": "c42bfcec3fa6a0cce17ce1f8bc684f88", - "Requirements": [] + "Hash": "c42bfcec3fa6a0cce17ce1f8bc684f88" } } } From 2c7d8a1d4236d4c20e26455286a258df8a864f9b Mon Sep 17 00:00:00 2001 From: Krystian Igras Date: Wed, 25 Sep 2024 14:45:42 +0000 Subject: [PATCH 20/20] Fix roxygen docs for hooks. --- R/hooks.R | 8 +++++++- man/hooks.Rd | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/R/hooks.R b/R/hooks.R index 50aaead..2a51414 100644 --- a/R/hooks.R +++ b/R/hooks.R @@ -40,7 +40,13 @@ #' } #' #' 'Pre' hooks are defined with 'pre__hook' and 'Post' ones as 'post__hook'. -#' As a result calling `add_hook("pre_remove_step_hook", function(public, private, step_id) {...})` +#' As a result calling: +#' \preformatted{ +#' add_hook( +#' "pre_remove_step_hook", +#' function(public, private, step_id) {...} +#' ) +#' } #' will result with specifying a new pre-hook for `remove_step` method. #' #' You may add as many hooks as you want. diff --git a/man/hooks.Rd b/man/hooks.Rd index 6bea3c3..2ce688e 100644 --- a/man/hooks.Rd +++ b/man/hooks.Rd @@ -60,7 +60,13 @@ remove_step = function(step_id, run_flow = FALSE, } 'Pre' hooks are defined with 'pre__hook' and 'Post' ones as 'post__hook'. -As a result calling `add_hook("pre_remove_step_hook", function(public, private, step_id) {...})` +As a result calling: +\preformatted{ +add_hook( + "pre_remove_step_hook", + function(public, private, step_id) {...} +) +} will result with specifying a new pre-hook for `remove_step` method. You may add as many hooks as you want.