diff --git a/.Rprofile b/.Rprofile index 3ac58f50..77ae067e 100644 --- a/.Rprofile +++ b/.Rprofile @@ -1,4 +1,14 @@ -if (Sys.getenv("GITHUB_ACTIONS") == "" || (Sys.getenv("GITHUB_ACTIONS") == "true" && getRversion()$major == 3 && getRversion()$minor == 6)) { +# Set renv profile base on R version. +if ((Sys.getenv("GITHUB_ACTIONS") == "") && (Sys.getenv("DOCKER_CONTAINER_CONTEXT") == "")) { + renv_profile <- paste(R.version$major, substr(R.version$minor, 1, 1), sep = ".") + if (file.exists("./renv/profile")) { + message("Using renv profile from `renv/profile` file.") + } else if (renv_profile %in% c("4.1", "4.2", "4.3")) { + message("Set renv profile to `", renv_profile, "`") + Sys.setenv("RENV_PROFILE" = renv_profile) + } else { + message("This repository do not contains the renv profile for your R version.") + } source("renv/activate.R") } else { options(repos = c(CRAN = "https://cran.rstudio.com")) diff --git a/.github/workflows/common.yml b/.github/workflows/common.yml index 518c64af..59e069bd 100644 --- a/.github/workflows/common.yml +++ b/.github/workflows/common.yml @@ -45,25 +45,25 @@ jobs: uses: pharmaverse/admiralci/.github/workflows/style.yml@main if: github.event_name == 'pull_request' with: - r-version: "4.0" + r-version: "4.1" spellcheck: name: Spelling uses: pharmaverse/admiralci/.github/workflows/spellcheck.yml@main if: github.event_name == 'pull_request' with: - r-version: "4.0" + r-version: "4.1" readme: name: Render README uses: pharmaverse/admiralci/.github/workflows/readme-render.yml@main if: github.event_name == 'push' with: - r-version: "4.0" + r-version: "4.1" validation: name: Validation uses: pharmaverse/admiralci/.github/workflows/r-pkg-validation.yml@main if: github.event_name == 'release' with: - r-version: "4.0" + r-version: "4.1" check: name: Check uses: pharmaverse/admiralci/.github/workflows/r-cmd-check.yml@main @@ -73,7 +73,7 @@ jobs: uses: pharmaverse/admiralci/.github/workflows/pkgdown.yml@main if: github.event_name == 'push' with: - r-version: "4.0" + r-version: "4.1" # Whether to skip multiversion docs # Note that if you have multiple versions of docs, # your URL links are likely to break due to path changes @@ -85,7 +85,7 @@ jobs: uses: pharmaverse/admiralci/.github/workflows/lintr.yml@main if: github.event_name == 'pull_request' with: - r-version: "4.0" + r-version: "4.1" links: name: Links uses: pharmaverse/admiralci/.github/workflows/links.yml@main @@ -97,7 +97,7 @@ jobs: if: > github.event_name == 'push' || github.event_name == 'pull_request' with: - r-version: "4.0" + r-version: "4.1" # Whether to skip code coverage badge creation # Setting to 'false' will require you to create # an orphan branch called 'badges' in your repository @@ -107,4 +107,4 @@ jobs: uses: pharmaverse/admiralci/.github/workflows/man-pages.yml@main if: github.event_name == 'pull_request' with: - r-version: "4.0" + r-version: "4.1" diff --git a/.lintr b/.lintr index 5c286fe8..b2a0a879 100644 --- a/.lintr +++ b/.lintr @@ -1,2 +1,11 @@ -linters: with_defaults(line_length_linter(100), object_usage_linter=NULL, cyclocomp_linter(complexity_limit = 20)) -exclusions: list("R/data.R") +linters: linters_with_defaults( + line_length_linter(100), + object_usage_linter=NULL, + cyclocomp_linter(complexity_limit = 20), + undesirable_function_linter = undesirable_function_linter() + ) +exclusions: list( + "R/data.R" = Inf, + "inst" = list(undesirable_function_linter = Inf), + "vignettes" = list(undesirable_function_linter = Inf) + ) diff --git a/.lycheeignore b/.lycheeignore index 99cd3aca..bbe5ed81 100644 --- a/.lycheeignore +++ b/.lycheeignore @@ -11,3 +11,6 @@ tj-actions/branch-names@v5.2 file:///home/runner/work/admiraldev/admiraldev/.github/workflows/pkgdown file:///home/runner/work/admiraldev/admiraldev/.github/workflows/style.yml%60 file:///home/runner/work/admiraldev/admiraldev/.github/workflows/sd-repo +https://packagemanager.posit.co/cran/2021-05-03/ +https://packagemanager.posit.co/cran/2022-01-03/ +https://packagemanager.posit.co/cran/2023-04-20/ diff --git a/DESCRIPTION b/DESCRIPTION index 95900d32..9a9ad929 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: admiraldev Type: Package Title: Utility Functions and Development Tools for the Admiral Package Family -Version: 0.3.0 +Version: 0.4.0 Authors@R: c( person("Ben", "Straub", email = "ben.x.straub@gsk.com", role = c("aut", "cre")), person("Stefan", "Bundfuss", role = "aut"), @@ -22,15 +22,16 @@ Description: Utility functions to check data, variables and conditions for funct 'admiral' and 'admiral' extension packages. Additional utility helper functions to assist developers with maintaining documentation, testing and general upkeep of 'admiral' and 'admiral' extension packages. License: Apache License (>= 2) +BugReports: https://github.com/pharmaverse/admiraldev/issues URL: https://pharmaverse.github.io/admiraldev/main/, https://github.com/pharmaverse/admiraldev/ Encoding: UTF-8 Language: en-US LazyData: false Roxygen: list(markdown = TRUE) -RoxygenNote: 7.2.1 +RoxygenNote: 7.2.3 Depends: R (>= 3.5) Imports: - dplyr (>= 0.8.4), + dplyr (>= 1.0.5), hms (>= 0.5.3), lifecycle (>= 0.1.0), lubridate (>= 1.7.4), diff --git a/NAMESPACE b/NAMESPACE index 3c7f396c..4b57dd79 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -12,6 +12,7 @@ export(assert_data_frame) export(assert_date_var) export(assert_date_vector) export(assert_expr) +export(assert_expr_list) export(assert_filter_cond) export(assert_function) export(assert_function_param) @@ -20,6 +21,7 @@ export(assert_integer_scalar) export(assert_list_element) export(assert_list_of) export(assert_logical_scalar) +export(assert_named) export(assert_named_exprs) export(assert_numeric_vector) export(assert_one_to_one) diff --git a/NEWS.md b/NEWS.md index 1c0a9c95..b3ec78a8 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,33 @@ +# admiraldev 0.4.0 + +## New Features + +- New function `assert_named()` to check if all elements of an argument are +named (#241) +- New function `assert_expr_list()` to check if an argument is a list of +expressions (#241) + +- Added a **Report a bug** link on `admiraldev` website (#257) + +## Updates of Existing Functions + +## Breaking Changes + +- `assert_order_vars()` was deprecated in favor of `assert_expr_list()`. (#241) +- The following functions have been deprecated from previous admiral versions using the next phase of the deprecation process: (#272) + + - `quo_c()` + - `quo_not_missing()` + - `replace_symbol_in_quo()` +- The `quosures` argument was replaced by the `expressions` argument in `replace_values_by_names()`. + +## Documentation + +- The deprecation strategy was updated regarding unit tests for deprecated +functions/arguments in phase 1. (#247) + +- The programming strategy was updated regarding permitted values and calling functions from package dependencies (#72, #253) + # admiraldev 0.3.0 ## New Features diff --git a/R/addin_format_testthat.R b/R/addin_format_testthat.R index 6de0674c..df6c5b0a 100644 --- a/R/addin_format_testthat.R +++ b/R/addin_format_testthat.R @@ -1,4 +1,3 @@ - # Returns the call for updating a given test_that test file # by adding a function name, a test number, and a section. # Call the function either by using RStudio Addin "format_test_that_file" or @@ -13,7 +12,7 @@ prepare_test_that_file <- function(path) { } # check that testthat is used and testing file is opened - uses_test_file <- grepl("tests/testthat/test-", path, fixed = T) + uses_test_file <- grepl("tests/testthat/test-", path, fixed = TRUE) if (!uses_test_file) { stop("This Addin works only on unit test files that follow a testthat structure.") } diff --git a/R/assertions.R b/R/assertions.R index 4cdd9a37..9f83cc95 100644 --- a/R/assertions.R +++ b/R/assertions.R @@ -6,7 +6,7 @@ #' @param arg A function argument to be checked #' @param required_vars A list of variables created using `exprs()` #' @param check_is_grouped Throw an error is `dataset` is grouped? Defaults to `TRUE`. -#' @param optional Is the checked parameter optional? If set to `FALSE` and `arg` +#' @param optional Is the checked argument optional? If set to `FALSE` and `arg` #' is `NULL` then an error is thrown #' #' @@ -92,7 +92,7 @@ assert_data_frame <- function(arg, #' @param case_sensitive Should the argument be handled case-sensitive? #' If set to `FALSE`, the argument is converted to lower case for checking the #' permitted values and returning the argument. -#' @param optional Is the checked parameter optional? If set to `FALSE` and `arg` +#' @param optional Is the checked argument optional? If set to `FALSE` and `arg` #' is `NULL` then an error is thrown #' #' @@ -116,7 +116,7 @@ assert_data_frame <- function(arg, #' #' try(example_fun(TRUE)) #' -#' # handling parameters case-insensitive +#' # handling arguments case-insensitive #' example_fun2 <- function(msg_type) { #' msg_type <- assert_character_scalar( #' msg_type, @@ -202,7 +202,7 @@ assert_character_scalar <- function(arg, #' @param values A `character` vector of valid values for `arg` #' @param named If set to `TRUE`, an error is issued if not all elements of the #' vector are named. -#' @param optional Is the checked parameter optional? If set to `FALSE` and `arg` +#' @param optional Is the checked argument optional? If set to `FALSE` and `arg` #' is `NULL` then an error is thrown #' #' @@ -260,20 +260,8 @@ assert_character_vector <- function(arg, values = NULL, named = FALSE, optional } } - if (named && length(arg) > 0) { - if (is.null(names(arg))) { - abort(paste0( - "All elements of ", arg_name(substitute(arg)), " must be named.\n", - "No element is named." - )) - } - unnamed <- which(names(arg) == "") - if (length(unnamed) > 0) { - abort(paste0( - "All elements of ", arg_name(substitute(arg)), " must be named.\n", - "The following elements are not named: ", enumerate(unnamed, quote_fun = NULL) - )) - } + if (named) { + assert_named(arg) } } @@ -283,7 +271,7 @@ assert_character_vector <- function(arg, values = NULL, named = FALSE, optional #' #' @param arg A function argument to be checked #' -#' @param optional Is the checked parameter optional? +#' @param optional Is the checked argument optional? #' #' If set to `FALSE` and `arg` is `NULL` then an error is thrown. Otherwise, #' `NULL` is considered as valid value. @@ -331,7 +319,7 @@ assert_logical_scalar <- function(arg, optional = FALSE) { #' Checks if an argument is a symbol #' #' @param arg A function argument to be checked. Must be a `symbol`. See examples. -#' @param optional Is the checked parameter optional? If set to `FALSE` and `arg` +#' @param optional Is the checked argument optional? If set to `FALSE` and `arg` #' is `NULL` then an error is thrown #' #' @@ -405,11 +393,10 @@ assert_expr <- function(arg, optional = FALSE) { } if (is_missing(arg)) { - err_msg <- sprintf("Argument `%s` missing, with no default", arg_name(substitute(arg))) - abort(err_msg) + abort("Argument `arg` missing, with no default") } - if (!is_symbolic(arg)) { + if (!(is_call(arg) || is_expression(arg))) { err_msg <- sprintf( "`%s` must be an expression but is %s", arg_name(substitute(arg)), @@ -442,7 +429,7 @@ assert_expr <- function(arg, optional = FALSE) { #' library(rlang) #' data(admiral_dm) #' -#' # typical usage in a function as a parameter check +#' # typical usage in a function as an argument check #' example_fun <- function(dat, x) { #' x <- assert_filter_cond(enquo(x)) #' filter(dat, !!x) @@ -459,7 +446,7 @@ assert_filter_cond <- function(arg, optional = FALSE) { } provided <- !is_missing(arg) - if (provided & !(is_call(arg) | is_logical(arg))) { + if (provided && !(is_call(arg) || is_logical(arg))) { err_msg <- sprintf( "`%s` must be a filter condition but is %s", arg_name(substitute(arg)), @@ -480,7 +467,7 @@ assert_filter_cond <- function(arg, optional = FALSE) { #' @param expect_names If the argument is set to `TRUE`, it is checked if all #' variables are named, e.g., `exprs(APERSDT = APxxSDT, APEREDT = APxxEDT)`. #' -#' @param optional Is the checked parameter optional? If set to `FALSE` and `arg` +#' @param optional Is the checked argument optional? If set to `FALSE` and `arg` #' is `NULL` then an error is thrown #' #' @@ -533,62 +520,34 @@ assert_vars <- function(arg, expect_names = FALSE, optional = FALSE) { #' Is an Argument a List of Order Variables? #' -#' Checks if an argument is a valid list of order variables created using `exprs()` +#' @description +#' `r lifecycle::badge("deprecated")` +#' +#' This function is *deprecated*, please use `assert_expr_list()` instead. +#' +#' Checks if an argument is a valid list of order variables/expressions created +#' using `exprs()` #' #' @param arg A function argument to be checked -#' @param optional Is the checked parameter optional? If set to `FALSE` and `arg` +#' @param optional Is the checked argument optional? If set to `FALSE` and `arg` #' is `NULL` then an error is thrown #' #' #' @return -#' The function throws an error if `arg` is not a list of variables or `desc()` -#' calls created using `exprs()` and returns the input invisibly otherwise. +#' The function throws an error if `arg` is not a list of variables or +#' expressions created using `exprs()` and returns the input invisibly +#' otherwise. #' #' @export #' -#' @keywords assertion -#' @family assertion -#' @examples -#' library(dplyr, warn.conflicts = FALSE) -#' library(rlang) -#' -#' example_fun <- function(by_vars) { -#' assert_order_vars(by_vars) -#' } -#' -#' example_fun(exprs(USUBJID, PARAMCD, desc(AVISITN))) -#' -#' try(example_fun(quos(USUBJID, PARAMCD))) -#' -#' try(example_fun(c("USUBJID", "PARAMCD", "VISIT"))) -#' -#' try(example_fun(exprs(USUBJID, toupper(PARAMCD), -AVAL))) +#' @keywords deprecated +#' @family deprecated assert_order_vars <- function(arg, optional = FALSE) { assert_logical_scalar(optional) - default_err_msg <- paste( - backquote(arg_name(substitute(arg))), - "must be a list of unquoted variable names or `desc()` calls,", - "e.g. `exprs(USUBJID, desc(VISITNUM))`" - ) + deprecate_warn("0.4.0", "assert_order_vars()", "assert_expr_list()") - if (isTRUE(tryCatch(force(arg), error = function(e) TRUE))) { - abort(default_err_msg) - } - - if (optional && is.null(arg)) { - return(invisible(arg)) - } - - if (!inherits(arg, "list")) { - abort(default_err_msg) - } - - if (isFALSE(is_order_vars(arg))) { - abort(default_err_msg) - } - - invisible(arg) + assert_expr_list(arg, optional = optional) } #' Is an Argument an Integer Scalar? @@ -598,7 +557,7 @@ assert_order_vars <- function(arg, optional = FALSE) { #' @param arg A function argument to be checked #' @param subset A subset of integers that `arg` should be part of. Should be one #' of `"none"` (the default), `"positive"`, `"non-negative"` or `"negative"`. -#' @param optional Is the checked parameter optional? If set to `FALSE` and `arg` +#' @param optional Is the checked argument optional? If set to `FALSE` and `arg` #' is `NULL` then an error is thrown #' #' @@ -655,7 +614,7 @@ assert_integer_scalar <- function(arg, subset = "none", optional = FALSE) { #' Checks if an argument is a numeric vector #' #' @param arg A function argument to be checked -#' @param optional Is the checked parameter optional? If set to `FALSE` and `arg` +#' @param optional Is the checked argument optional? If set to `FALSE` and `arg` #' is `NULL` then an error is thrown #' #' @@ -697,7 +656,7 @@ assert_numeric_vector <- function(arg, optional = FALSE) { #' Checks if an argument is an atomic vector #' #' @param arg A function argument to be checked -#' @param optional Is the checked parameter optional? If set to `FALSE` and `arg` +#' @param optional Is the checked argument optional? If set to `FALSE` and `arg` #' is `NULL` then an error is thrown #' #' @@ -739,7 +698,7 @@ assert_atomic_vector <- function(arg, optional = FALSE) { #' Checks if an argument is an object inheriting from the S3 class specified. #' @param arg A function argument to be checked #' @param class The S3 class to check for -#' @param optional Is the checked parameter optional? If set to `FALSE` and `arg` +#' @param optional Is the checked argument optional? If set to `FALSE` and `arg` #' is `NULL` then an error is thrown #' #' @@ -790,7 +749,7 @@ assert_s3_class <- function(arg, class, optional = FALSE) { #' @param class The S3 class or type to check for #' @param named If set to `TRUE`, an error is issued if not all elements of the #' list are named. -#' @param optional Is the checked parameter optional? If set to `FALSE` and `arg` +#' @param optional Is the checked argument optional? If set to `FALSE` and `arg` #' is `NULL` then an error is thrown #' #' @@ -863,6 +822,53 @@ assert_list_of <- function(arg, class, named = FALSE, optional = TRUE) { invisible(arg) } +#' Assert Argument is a Named List or Vector +#' +#' Assert that all elements of the argument are named. +#' +#' @inheritParams assert_data_frame +#' +#' @keywords assertion +#' @family assertion +#' +#' @return +#' The function throws an error if `arg` is not a named list or vector or +#' returns the input invisibly otherwise +#' +#' @export +#' +#' @examples +#' example_fun <- function(varval_list) { +#' assert_named(varval_list) +#' } +#' +#' example_fun(list(var1 = 1, var2 = "x")) +#' +#' try(example_fun(list(1, "x"))) +#' +#' try(example_fun(list(var = 1, "x"))) +assert_named <- function(arg, optional = FALSE) { + if (optional && is.null(arg)) { + return(invisible(arg)) + } + + if (length(arg) > 0) { + if (is.null(names(arg))) { + abort(paste0( + "All elements of `", arg_name(substitute(arg)), "` must be named.\n", + "No element is named." + )) + } + unnamed <- which(names(arg) == "") + if (length(unnamed) > 0) { + abort(paste0( + "All elements of `", arg_name(substitute(arg)), "` must be named.\n", + "The following elements are not named: ", enumerate(unnamed, quote_fun = NULL) + )) + } + } +} + #' Assert Argument is a Named List of Expressions #' #' @inheritParams assert_data_frame @@ -938,14 +944,14 @@ assert_has_variables <- function(dataset, required_vars) { #' Is Argument a Function? #' -#' Checks if the argument is a function and if all expected parameters are +#' Checks if the argument is a function and if all expected arguments are #' provided by the function. #' #' @param arg A function argument to be checked #' -#' @param params A character vector of expected parameter names +#' @param params A character vector of expected argument names #' -#' @param optional Is the checked parameter optional? +#' @param optional Is the checked argument optional? #' #' If set to `FALSE` and `arg` is `NULL` then an error is thrown. #' @@ -954,8 +960,8 @@ assert_has_variables <- function(dataset, required_vars) { #' #' - if the argument is not a function or #' -#' - if the function does not provide all parameters as specified for the -#' `params` parameter. +#' - if the function does not provide all arguments as specified for the +#' `params` argument. #' #' @export #' @@ -999,9 +1005,9 @@ assert_function <- function(arg, params = NULL, optional = FALSE) { is_param <- params %in% names(formals(arg)) if (!all(is_param)) { txt <- if (sum(!is_param) == 1L) { - "%s is not a parameter of the function specified for `%s`" + "%s is not an argument of the function specified for `%s`" } else { - "%s are not parameters of the function specified for `%s`" + "%s are not arguments of the function specified for `%s`" } err_msg <- sprintf(txt, enumerate(params[!is_param]), arg_name(substitute(arg))) abort(err_msg) @@ -1019,7 +1025,7 @@ assert_function <- function(arg, params = NULL, optional = FALSE) { #' @family assertion #' #' @return -#' The function throws an error if any elements of `params` is not a parameter of +#' The function throws an error if any elements of `params` is not an argument of #' the function given by `arg` #' #' @export @@ -1040,9 +1046,9 @@ assert_function_param <- function(arg, params) { is_param <- params %in% names(formals(fun)) if (!all(is_param)) { txt <- if (sum(!is_param) == 1L) { - "%s is not a parameter of `%s()`" + "%s is not an argument of `%s()`" } else { - "%s are not parameters of `%s()`" + "%s are not arguments of `%s()`" } err_msg <- sprintf(txt, enumerate(params[!is_param]), arg) abort(err_msg) @@ -1168,15 +1174,15 @@ assert_param_does_not_exist <- function(dataset, param) { #' Is an Argument a Variable-Value List? #' #' Checks if the argument is a list of expressions where the expressions are -#' variable-value pairs. The value can be a symbol, a string, a numeric, or -#' `NA`. More general expression are not allowed. +#' variable-value pairs. The value can be a symbol, a string, a numeric, an +#' expression, or `NA`. #' #' @param arg A function argument to be checked #' @param required_elements A `character` vector of names that must be present in `arg` #' @param accept_expr Should expressions on the right hand side be accepted? #' @param accept_var Should unnamed variable names (e.g. `exprs(USUBJID)`) on the #' right hand side be accepted? -#' @param optional Is the checked parameter optional? If set to `FALSE` and `arg` +#' @param optional Is the checked argument optional? If set to `FALSE` and `arg` #' is `NULL` then an error is thrown. #' #' @@ -1200,7 +1206,7 @@ assert_param_does_not_exist <- function(dataset, param) { #' try(example_fun(exprs("AE", DTSEQ = AESEQ))) assert_varval_list <- function(arg, # nolint required_elements = NULL, - accept_expr = FALSE, + accept_expr = TRUE, accept_var = FALSE, optional = FALSE) { assert_logical_scalar(accept_expr) @@ -1220,7 +1226,7 @@ assert_varval_list <- function(arg, # nolint valid_vals <- "a symbol, character scalar, numeric scalar, or `NA`" } - if (!accept_var & (!inherits(arg, "list") || !is_named(arg))) { + if (!accept_var && (!inherits(arg, "list") || !is_named(arg))) { err_msg <- sprintf( paste0( "`%s` must be a named list of expressions where each element is ", @@ -1234,7 +1240,7 @@ assert_varval_list <- function(arg, # nolint abort(err_msg) } - if (accept_var & (!contains_vars(arg))) { + if (accept_var && (!contains_vars(arg))) { err_msg <- sprintf( paste0( "`%s` must be a list of expressions where each element is ", @@ -1301,6 +1307,104 @@ assert_varval_list <- function(arg, # nolint invisible(arg) } +#' Is an Argument a List of Expressions? +#' +#' Checks if the argument is a list of expressions. +#' +#' @param arg A function argument to be checked +#' @param required_elements A `character` vector of names that must be present in `arg` +#' @param named If set to `TRUE`, an error is issued if not all elements of the +#' list are named. +#' @param optional Is the checked argument optional? If set to `FALSE` and `arg` +#' is `NULL` then an error is thrown. +#' +#' @return +#' The function throws an error if `arg` is not a list of expressions. +#' Otherwise, the input it returned invisibly. +#' +#' @keywords assertion +#' @family assertion +#' @export +#' +#' @examples +#' library(rlang) +#' +#' example_fun <- function(vars) { +#' assert_expr_list(vars) +#' } +#' example_fun(exprs(DTHDOM = "AE", DTHSEQ = AESEQ)) +#' +#' try(example_fun(exprs("AE", DTSEQ = AESEQ, !!list("a")))) +assert_expr_list <- function(arg, # nolint + required_elements = NULL, + named = FALSE, + optional = FALSE) { + assert_logical_scalar(named) + assert_logical_scalar(optional) + assert_character_vector(required_elements, optional = TRUE) + + if (optional && is.null(arg)) { + return(invisible(arg)) + } + + if (!inherits(arg, "list")) { + err_msg <- sprintf( + paste0( + "`%s` must be a named list of expressions but it is %s\n", + "\u2139 To create a list of expressions use `exprs()`" + ), + arg_name(substitute(arg)), + what_is_it(arg) + ) + abort(err_msg) + } + + if (named) { + assert_named(arg) + } + + if (!is.null(required_elements)) { + missing_elements <- setdiff(required_elements, names(arg)) + if (length(missing_elements) >= 1L) { + err_msg <- sprintf( + "The following required elements are missing in `%s`: %s", + arg_name(substitute(arg)), + enumerate(missing_elements, quote_fun = squote) + ) + abort(err_msg) + } + } + + invalids <- !map_lgl( + arg, + ~ is_call(.x) || is_expression(.x) + ) + invalidargs <- arg[invalids] + + if (any(invalids)) { + argname <- arg_name(substitute(arg)) + abort( + paste0( + "All elements of `", + argname, + "` must be an expression.\n", + paste0( + argname, + "[[", + if_else(names(invalidargs) == "", as.character(which(invalids)), names(invalidargs)), + "]] = ", + map_chr(invalidargs, expr_label), + " is of type ", + map_chr(invalidargs, typeof), + collapse = "\n" + ) + ) + ) + } + + invisible(arg) +} + #' Is an Element of a List of Lists/Classes Fulfilling a Condition? #' #' Checks if the elements of a list of named lists/classes fulfill a certain @@ -1524,7 +1628,7 @@ assert_date_var <- function(dataset, var, dataset_name = NULL, var_name = NULL) #' #' @param arg The function argument to be checked #' -#' @param optional Is the checked parameter optional? If set to `FALSE` +#' @param optional Is the checked argument optional? If set to `FALSE` #' and `arg` is `NULL` then the function `assert_date_vector` exits early and throw and error. #' #' @return diff --git a/R/dataset_vignette.R b/R/dataset_vignette.R index fe6afe6a..156f2840 100644 --- a/R/dataset_vignette.R +++ b/R/dataset_vignette.R @@ -75,7 +75,7 @@ dataset_vignette <- function(dataset, display_vars = NULL, filter = NULL) { buttons = list(list( extend = "colvis", text = "Choose the columns to display", - scroller = T, + scroller = TRUE, collectionLayout = "fixed two-column" )), colReorder = TRUE diff --git a/R/dev_utilities.R b/R/dev_utilities.R index 658851f4..4d37a178 100644 --- a/R/dev_utilities.R +++ b/R/dev_utilities.R @@ -62,7 +62,7 @@ arg_name <- function(expr) { # nolint #' Extract All Symbols from a List of Expressions #' #' @param x An `R` object -#' @param side One of `"lhs"` (the default) or `"rhs"` +#' @param side One of `"lhs"` (the default) or `"rhs"` for formulas #' #' @return A list of expressions #' @@ -70,19 +70,25 @@ arg_name <- function(expr) { # nolint #' @keywords dev_utility #' @family dev_utility #' @export +#' +#' @examples +#' library(rlang) +#' extract_vars(exprs(PARAMCD, (BASE - AVAL) / BASE + 100)) +#' extract_vars(AVAL ~ ARMCD + AGEGR1) +#' extract_vars(AVAL ~ ARMCD + AGEGR1, side = "rhs") extract_vars <- function(x, side = "lhs") { if (is.null(x)) { NULL } else if (is.list(x)) { do.call(expr_c, map(x, extract_vars, side)) - } else if (is_expression(x)) { + } else if (is_expression(x) && !is_formula(x)) { syms(all.vars(x)) } else if (is_formula(x)) { funs <- list("lhs" = f_lhs, "rhs" = f_rhs) assert_character_scalar(side, values = names(funs)) - expr(!!funs[[side]](x)) - } else { - abort() + extract_vars(expr(!!funs[[side]](x))) + } else if (is_call(x)) { + extract_vars(as.list(x[-1])) } } diff --git a/R/process_set_values_to.R b/R/process_set_values_to.R index 9d703774..50921de9 100644 --- a/R/process_set_values_to.R +++ b/R/process_set_values_to.R @@ -56,10 +56,10 @@ #' ) #' ) process_set_values_to <- function(dataset, - set_values_to, + set_values_to = NULL, expected_types = NULL) { assert_data_frame(dataset) - assert_varval_list(set_values_to, accept_expr = TRUE) + assert_varval_list(set_values_to, optional = TRUE) assert_character_vector( expected_types, values = c("numeric", "character"), diff --git a/R/quo.R b/R/quo.R index 17055e66..a5870a6f 100644 --- a/R/quo.R +++ b/R/quo.R @@ -9,13 +9,13 @@ #' @return An object of class `quosures` #' #' -#' @keywords quo -#' @family quo +#' @keywords deprecated +#' @family deprecated #' #' @export quo_c <- function(...) { - deprecate_warn( - "0.10.0", + deprecate_stop( + "0.3.0", "quo_c()", "expr_c()", details = paste( @@ -23,10 +23,6 @@ quo_c <- function(...) { "instead of quosures created by `vars()`." ) ) - inputs <- unlist(list(...), recursive = TRUE) - stopifnot(all(map_lgl(inputs, is_quosure))) - is_null <- map_lgl(inputs, quo_is_null) - rlang::as_quosures(inputs[!is_null]) } #' Concatenate One or More Expressions @@ -40,7 +36,18 @@ quo_c <- function(...) { #' #' @export expr_c <- function(...) { - inputs <- unlist(list(...), recursive = TRUE) + # Transform single expression into list of expression + inputs <- map( + list(...), + function(x) { + if (typeof(x) != "list") { + list(x) + } else { + x + } + } + ) + inputs <- flatten(inputs) stopifnot(all(map_lgl(inputs, is_expression))) is_null <- map_lgl(inputs, is.null) inputs[!is_null] @@ -53,12 +60,12 @@ expr_c <- function(...) { #' @return TRUE or error. #' #' -#' @keywords quo -#' @family quo +#' @keywords deprecated +#' @family deprecated #' #' @export quo_not_missing <- function(x) { - deprecate_warn( + deprecate_stop( "0.3.0", "quo_not_missing()", details = paste( @@ -67,15 +74,6 @@ quo_not_missing <- function(x) { sep = "\n" ) ) - !rlang::quo_is_missing(x) - - if (is.null(missing(x)) || quo_is_missing(x)) { - stop(paste0( - "Argument `", - deparse(substitute(x)), - "` is missing, with no default" - )) - } } @@ -92,15 +90,22 @@ quo_not_missing <- function(x) { #' #' @return A list of expressions #' @export +#' +#' @examples +#' library(rlang) +#' replace_values_by_names(exprs(AVAL, ADT = convert_dtc_to_dt(EXSTDTC))) replace_values_by_names <- function(expressions, quosures) { if (!missing(quosures)) { - deprecate_warn( - "0.10.0", + deprecate_stop( + "0.3.0", "replace_values_by_names(quosures = )", "replace_values_by_names(expressions = )" ) expressions <- map(quosures, rlang::quo_get_expr) } + if (is.null(names(expressions))) { + return(expressions) + } map2(expressions, names(expressions), function(e, n) { if (n == "") { return(e) @@ -125,15 +130,15 @@ replace_values_by_names <- function(expressions, quosures) { #' @return The quosure where every occurrence of the symbol `target` is replaced #' by `replace` #' -#' @keywords quo -#' @family quo +#' @keywords deprecated +#' @family deprecated #' #' @export replace_symbol_in_quo <- function(quosure, target, replace) { deprecate_stop( - "0.10.0", + "0.3.0", "replace_symbol_in_quo()", "replace_symbol_in_expr()", details = paste( @@ -224,7 +229,7 @@ replace_symbol_in_expr <- function(expression, add_suffix_to_vars <- function(order, vars, suffix) { - assert_order_vars(order) + assert_expr_list(order) assert_vars(vars) assert_character_scalar(suffix) for (i in seq_along(vars)) { diff --git a/R/warnings.R b/R/warnings.R index 13a905e5..8f6f3799 100644 --- a/R/warnings.R +++ b/R/warnings.R @@ -201,7 +201,7 @@ suppress_warning <- function(expr, regexpr) { withCallingHandlers( expr, warning = function(w) { - if (grepl(regexpr, w$message)) { + if (any(grepl(regexpr, w$message))) { invokeRestart("muffleWarning") } } diff --git a/README.Rmd b/README.Rmd index eb397bdb..0a3dc4c0 100644 --- a/README.Rmd +++ b/README.Rmd @@ -36,6 +36,9 @@ Utility Functions and Development Tools for the Admiral Package Family +[![CRAN status](https://www.r-pkg.org/badges/version/admiraldev)](https://CRAN.R-project.org/package=admiraldev) +[![Test Coverage](https://raw.githubusercontent.com/pharmaverse/admiraldev/badges/main/test-coverage.svg)](https://github.com/pharmaverse/admiraldev/actions/workflows/common.yml) + diff --git a/_pkgdown.yml b/_pkgdown.yml index 1ed36a31..22293eab 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -1,4 +1,4 @@ -url: https://pharmaverse.github.io/admiraldev +url: https://pharmaverse.github.io/admiraldev/devel template: bootstrap: 5 @@ -11,7 +11,7 @@ repo: issue: https://github.com/pharmaverse/admiraldev/issues/ user: https://github.com/ news: - cran_dates: false + cran_dates: true reference: - title: Assertion Functions @@ -78,6 +78,20 @@ reference: contents: - has_keyword('dev_utility') +- title: Deprecated + desc: | + As `{admiral}` is still evolving, functions/arguments may need to be removed or replaced over time. In such cases, the function/argument will enter the following 6-month deprecation cycle: + + * In the first release (0-3 months), there will be a warning issued if you use the function/argument, but it will still be available to use. + * In the following release (3-6 months), an error will be produced if you use the function/argument. + * Finally, from the 3rd release (6 months) onwards, the function/argument will be removed from `{admiral}` and its documentation completely. + + *Note: Guidance on replacement functionality can be found in the warning/error message produced or in the function's documentation.* + + Below, you can find a list of functions in the process of being deprecated: + contents: + - has_keyword("deprecated") + navbar: components: reference: diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index e1010f62..4e7f8407 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -1,5 +1,5 @@ -pandoc: 2.17.1.1 -pkgdown: 2.0.6 +pandoc: 2.11.4 +pkgdown: 2.0.7 pkgdown_sha: ~ articles: admiraldev: admiraldev.html @@ -10,7 +10,7 @@ articles: release_strategy: release_strategy.html unit_test_guidance: unit_test_guidance.html writing_vignettes: writing_vignettes.html -last_built: 2023-01-19T10:49Z +last_built: 2023-04-12T17:21Z urls: reference: https://pharmaverse.github.io/admiraldev/devel/reference article: https://pharmaverse.github.io/admiraldev/devel/articles diff --git a/man/add_suffix_to_vars.Rd b/man/add_suffix_to_vars.Rd index 8d561d7a..f0981e61 100644 --- a/man/add_suffix_to_vars.Rd +++ b/man/add_suffix_to_vars.Rd @@ -36,10 +36,7 @@ add_suffix_to_vars(exprs(ADT, desc(AVAL), AVALC), vars = exprs(AVAL), suffix = " \seealso{ Helpers for working with Quosures: \code{\link{expr_c}()}, -\code{\link{quo_c}()}, -\code{\link{quo_not_missing}()}, \code{\link{replace_symbol_in_expr}()}, -\code{\link{replace_symbol_in_quo}()}, \code{\link{replace_values_by_names}()} } \concept{quo} diff --git a/man/admiraldev-package.Rd b/man/admiraldev-package.Rd index e8c6db91..912f544d 100644 --- a/man/admiraldev-package.Rd +++ b/man/admiraldev-package.Rd @@ -15,6 +15,7 @@ Useful links: \itemize{ \item \url{https://pharmaverse.github.io/admiraldev/main/} \item \url{https://github.com/pharmaverse/admiraldev/} + \item Report bugs at \url{https://github.com/pharmaverse/admiraldev/issues} } } diff --git a/man/assert_atomic_vector.Rd b/man/assert_atomic_vector.Rd index aa5c2549..5314c62e 100644 --- a/man/assert_atomic_vector.Rd +++ b/man/assert_atomic_vector.Rd @@ -9,7 +9,7 @@ assert_atomic_vector(arg, optional = FALSE) \arguments{ \item{arg}{A function argument to be checked} -\item{optional}{Is the checked parameter optional? If set to \code{FALSE} and \code{arg} +\item{optional}{Is the checked argument optional? If set to \code{FALSE} and \code{arg} is \code{NULL} then an error is thrown} } \value{ @@ -34,6 +34,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -44,9 +45,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_character_scalar.Rd b/man/assert_character_scalar.Rd index b66ce00a..a4c8539f 100644 --- a/man/assert_character_scalar.Rd +++ b/man/assert_character_scalar.Rd @@ -21,7 +21,7 @@ Values is converted to a lower case vector if case_sensitive = FALSE is used.} If set to \code{FALSE}, the argument is converted to lower case for checking the permitted values and returning the argument.} -\item{optional}{Is the checked parameter optional? If set to \code{FALSE} and \code{arg} +\item{optional}{Is the checked argument optional? If set to \code{FALSE} and \code{arg} is \code{NULL} then an error is thrown} } \value{ @@ -44,7 +44,7 @@ try(example_fun("message")) try(example_fun(TRUE)) -# handling parameters case-insensitive +# handling arguments case-insensitive example_fun2 <- function(msg_type) { msg_type <- assert_character_scalar( msg_type, @@ -64,6 +64,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -74,9 +75,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_character_vector.Rd b/man/assert_character_vector.Rd index ec9a33c6..08e20d99 100644 --- a/man/assert_character_vector.Rd +++ b/man/assert_character_vector.Rd @@ -14,7 +14,7 @@ assert_character_vector(arg, values = NULL, named = FALSE, optional = FALSE) \item{named}{If set to \code{TRUE}, an error is issued if not all elements of the vector are named.} -\item{optional}{Is the checked parameter optional? If set to \code{FALSE} and \code{arg} +\item{optional}{Is the checked argument optional? If set to \code{FALSE} and \code{arg} is \code{NULL} then an error is thrown} } \value{ @@ -46,6 +46,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_scalar}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -56,9 +57,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_data_frame.Rd b/man/assert_data_frame.Rd index cae983bc..0b2a8c7d 100644 --- a/man/assert_data_frame.Rd +++ b/man/assert_data_frame.Rd @@ -18,7 +18,7 @@ assert_data_frame( \item{check_is_grouped}{Throw an error is \code{dataset} is grouped? Defaults to \code{TRUE}.} -\item{optional}{Is the checked parameter optional? If set to \code{FALSE} and \code{arg} +\item{optional}{Is the checked argument optional? If set to \code{FALSE} and \code{arg} is \code{NULL} then an error is thrown} } \value{ @@ -52,6 +52,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_scalar}()}, \code{\link{assert_character_vector}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -62,9 +63,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_date_vector.Rd b/man/assert_date_vector.Rd index bdf9de22..e9f1e2a9 100644 --- a/man/assert_date_vector.Rd +++ b/man/assert_date_vector.Rd @@ -9,7 +9,7 @@ assert_date_vector(arg, optional = FALSE) \arguments{ \item{arg}{The function argument to be checked} -\item{optional}{Is the checked parameter optional? If set to \code{FALSE} +\item{optional}{Is the checked argument optional? If set to \code{FALSE} and \code{arg} is \code{NULL} then the function \code{assert_date_vector} exits early and throw and error.} } \value{ @@ -35,6 +35,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_scalar}()}, \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -45,9 +46,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_expr.Rd b/man/assert_expr.Rd index 5dba5c09..aaa51970 100644 --- a/man/assert_expr.Rd +++ b/man/assert_expr.Rd @@ -9,7 +9,7 @@ assert_expr(arg, optional = FALSE) \arguments{ \item{arg}{A function argument to be checked} -\item{optional}{Is the checked parameter optional? If set to \code{FALSE} and \code{arg} +\item{optional}{Is the checked argument optional? If set to \code{FALSE} and \code{arg} is \code{NULL} then an error is thrown} } \value{ @@ -26,6 +26,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, \code{\link{assert_function}()}, @@ -35,9 +36,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_expr_list.Rd b/man/assert_expr_list.Rd new file mode 100644 index 00000000..790f8ec6 --- /dev/null +++ b/man/assert_expr_list.Rd @@ -0,0 +1,71 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/assertions.R +\name{assert_expr_list} +\alias{assert_expr_list} +\title{Is an Argument a List of Expressions?} +\usage{ +assert_expr_list( + arg, + required_elements = NULL, + named = FALSE, + optional = FALSE +) +} +\arguments{ +\item{arg}{A function argument to be checked} + +\item{required_elements}{A \code{character} vector of names that must be present in \code{arg}} + +\item{named}{If set to \code{TRUE}, an error is issued if not all elements of the +list are named.} + +\item{optional}{Is the checked argument optional? If set to \code{FALSE} and \code{arg} +is \code{NULL} then an error is thrown.} +} +\value{ +The function throws an error if \code{arg} is not a list of expressions. +Otherwise, the input it returned invisibly. +} +\description{ +Checks if the argument is a list of expressions. +} +\examples{ +library(rlang) + +example_fun <- function(vars) { + assert_expr_list(vars) +} +example_fun(exprs(DTHDOM = "AE", DTHSEQ = AESEQ)) + +try(example_fun(exprs("AE", DTSEQ = AESEQ, !!list("a")))) +} +\seealso{ +Checks for valid input and returns warning or errors messages: +\code{\link{assert_atomic_vector}()}, +\code{\link{assert_character_scalar}()}, +\code{\link{assert_character_vector}()}, +\code{\link{assert_data_frame}()}, +\code{\link{assert_date_vector}()}, +\code{\link{assert_expr}()}, +\code{\link{assert_filter_cond}()}, +\code{\link{assert_function_param}()}, +\code{\link{assert_function}()}, +\code{\link{assert_has_variables}()}, +\code{\link{assert_integer_scalar}()}, +\code{\link{assert_list_element}()}, +\code{\link{assert_list_of}()}, +\code{\link{assert_logical_scalar}()}, +\code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, +\code{\link{assert_numeric_vector}()}, +\code{\link{assert_one_to_one}()}, +\code{\link{assert_param_does_not_exist}()}, +\code{\link{assert_s3_class}()}, +\code{\link{assert_same_type}()}, +\code{\link{assert_symbol}()}, +\code{\link{assert_unit}()}, +\code{\link{assert_vars}()}, +\code{\link{assert_varval_list}()} +} +\concept{assertion} +\keyword{assertion} diff --git a/man/assert_filter_cond.Rd b/man/assert_filter_cond.Rd index 69ac111b..797cb61c 100644 --- a/man/assert_filter_cond.Rd +++ b/man/assert_filter_cond.Rd @@ -28,7 +28,7 @@ library(dplyr, warn.conflicts = FALSE) library(rlang) data(admiral_dm) -# typical usage in a function as a parameter check +# typical usage in a function as an argument check example_fun <- function(dat, x) { x <- assert_filter_cond(enquo(x)) filter(dat, !!x) @@ -45,6 +45,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_function_param}()}, \code{\link{assert_function}()}, @@ -54,9 +55,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_function.Rd b/man/assert_function.Rd index 34fac421..728746ff 100644 --- a/man/assert_function.Rd +++ b/man/assert_function.Rd @@ -9,9 +9,9 @@ assert_function(arg, params = NULL, optional = FALSE) \arguments{ \item{arg}{A function argument to be checked} -\item{params}{A character vector of expected parameter names} +\item{params}{A character vector of expected argument names} -\item{optional}{Is the checked parameter optional? +\item{optional}{Is the checked argument optional? If set to \code{FALSE} and \code{arg} is \code{NULL} then an error is thrown.} } @@ -19,12 +19,12 @@ If set to \code{FALSE} and \code{arg} is \code{NULL} then an error is thrown.} The function throws an error \itemize{ \item if the argument is not a function or -\item if the function does not provide all parameters as specified for the -\code{params} parameter. +\item if the function does not provide all arguments as specified for the +\code{params} argument. } } \description{ -Checks if the argument is a function and if all expected parameters are +Checks if the argument is a function and if all expected arguments are provided by the function. } \examples{ @@ -45,6 +45,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -54,9 +55,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_function_param.Rd b/man/assert_function_param.Rd index 8c7fcf2b..93a69636 100644 --- a/man/assert_function_param.Rd +++ b/man/assert_function_param.Rd @@ -12,7 +12,7 @@ assert_function_param(arg, params) \item{params}{A character vector of function parameters} } \value{ -The function throws an error if any elements of \code{params} is not a parameter of +The function throws an error if any elements of \code{params} is not an argument of the function given by \code{arg} } \description{ @@ -34,6 +34,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function}()}, @@ -43,9 +44,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_has_variables.Rd b/man/assert_has_variables.Rd index 73b09b6e..98fd5c4e 100644 --- a/man/assert_has_variables.Rd +++ b/man/assert_has_variables.Rd @@ -33,6 +33,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -42,9 +43,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_integer_scalar.Rd b/man/assert_integer_scalar.Rd index 1157d866..05d59895 100644 --- a/man/assert_integer_scalar.Rd +++ b/man/assert_integer_scalar.Rd @@ -12,7 +12,7 @@ assert_integer_scalar(arg, subset = "none", optional = FALSE) \item{subset}{A subset of integers that \code{arg} should be part of. Should be one of \code{"none"} (the default), \code{"positive"}, \code{"non-negative"} or \code{"negative"}.} -\item{optional}{Is the checked parameter optional? If set to \code{FALSE} and \code{arg} +\item{optional}{Is the checked argument optional? If set to \code{FALSE} and \code{arg} is \code{NULL} then an error is thrown} } \value{ @@ -43,6 +43,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -52,9 +53,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_list_element.Rd b/man/assert_list_element.Rd index 40018e9d..7167d04b 100644 --- a/man/assert_list_element.Rd +++ b/man/assert_list_element.Rd @@ -46,6 +46,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -55,9 +56,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_list_of.Rd b/man/assert_list_of.Rd index 9b481c2c..6541616b 100644 --- a/man/assert_list_of.Rd +++ b/man/assert_list_of.Rd @@ -14,7 +14,7 @@ assert_list_of(arg, class, named = FALSE, optional = TRUE) \item{named}{If set to \code{TRUE}, an error is issued if not all elements of the list are named.} -\item{optional}{Is the checked parameter optional? If set to \code{FALSE} and \code{arg} +\item{optional}{Is the checked argument optional? If set to \code{FALSE} and \code{arg} is \code{NULL} then an error is thrown} } \value{ @@ -48,6 +48,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -57,9 +58,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_element}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_logical_scalar.Rd b/man/assert_logical_scalar.Rd index 1bab8367..640fed0f 100644 --- a/man/assert_logical_scalar.Rd +++ b/man/assert_logical_scalar.Rd @@ -9,7 +9,7 @@ assert_logical_scalar(arg, optional = FALSE) \arguments{ \item{arg}{A function argument to be checked} -\item{optional}{Is the checked parameter optional? +\item{optional}{Is the checked argument optional? If set to \code{FALSE} and \code{arg} is \code{NULL} then an error is thrown. Otherwise, \code{NULL} is considered as valid value.} @@ -41,6 +41,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -50,9 +51,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_element}()}, \code{\link{assert_list_of}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_named.Rd b/man/assert_named.Rd new file mode 100644 index 00000000..24a486ee --- /dev/null +++ b/man/assert_named.Rd @@ -0,0 +1,62 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/assertions.R +\name{assert_named} +\alias{assert_named} +\title{Assert Argument is a Named List or Vector} +\usage{ +assert_named(arg, optional = FALSE) +} +\arguments{ +\item{arg}{A function argument to be checked} + +\item{optional}{Is the checked argument optional? If set to \code{FALSE} and \code{arg} +is \code{NULL} then an error is thrown} +} +\value{ +The function throws an error if \code{arg} is not a named list or vector or +returns the input invisibly otherwise +} +\description{ +Assert that all elements of the argument are named. +} +\examples{ +example_fun <- function(varval_list) { + assert_named(varval_list) +} + +example_fun(list(var1 = 1, var2 = "x")) + +try(example_fun(list(1, "x"))) + +try(example_fun(list(var = 1, "x"))) +} +\seealso{ +Checks for valid input and returns warning or errors messages: +\code{\link{assert_atomic_vector}()}, +\code{\link{assert_character_scalar}()}, +\code{\link{assert_character_vector}()}, +\code{\link{assert_data_frame}()}, +\code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, +\code{\link{assert_expr}()}, +\code{\link{assert_filter_cond}()}, +\code{\link{assert_function_param}()}, +\code{\link{assert_function}()}, +\code{\link{assert_has_variables}()}, +\code{\link{assert_integer_scalar}()}, +\code{\link{assert_list_element}()}, +\code{\link{assert_list_of}()}, +\code{\link{assert_logical_scalar}()}, +\code{\link{assert_named_exprs}()}, +\code{\link{assert_numeric_vector}()}, +\code{\link{assert_one_to_one}()}, +\code{\link{assert_param_does_not_exist}()}, +\code{\link{assert_s3_class}()}, +\code{\link{assert_same_type}()}, +\code{\link{assert_symbol}()}, +\code{\link{assert_unit}()}, +\code{\link{assert_vars}()}, +\code{\link{assert_varval_list}()} +} +\concept{assertion} +\keyword{assertion} diff --git a/man/assert_named_exprs.Rd b/man/assert_named_exprs.Rd index 45b2a907..e81213a2 100644 --- a/man/assert_named_exprs.Rd +++ b/man/assert_named_exprs.Rd @@ -9,7 +9,7 @@ assert_named_exprs(arg, optional = FALSE) \arguments{ \item{arg}{A function argument to be checked} -\item{optional}{Is the checked parameter optional? If set to \code{FALSE} and \code{arg} +\item{optional}{Is the checked argument optional? If set to \code{FALSE} and \code{arg} is \code{NULL} then an error is thrown} } \value{ @@ -26,6 +26,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -35,9 +36,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_element}()}, \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_numeric_vector.Rd b/man/assert_numeric_vector.Rd index ed6f7ffa..a12da5ca 100644 --- a/man/assert_numeric_vector.Rd +++ b/man/assert_numeric_vector.Rd @@ -9,7 +9,7 @@ assert_numeric_vector(arg, optional = FALSE) \arguments{ \item{arg}{A function argument to be checked} -\item{optional}{Is the checked parameter optional? If set to \code{FALSE} and \code{arg} +\item{optional}{Is the checked argument optional? If set to \code{FALSE} and \code{arg} is \code{NULL} then an error is thrown} } \value{ @@ -35,6 +35,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -45,8 +46,8 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_one_to_one.Rd b/man/assert_one_to_one.Rd index bdf6aa6f..09a71367 100644 --- a/man/assert_one_to_one.Rd +++ b/man/assert_one_to_one.Rd @@ -28,6 +28,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -38,8 +39,8 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_order_vars.Rd b/man/assert_order_vars.Rd index b24e9794..b17ce75a 100644 --- a/man/assert_order_vars.Rd +++ b/man/assert_order_vars.Rd @@ -9,58 +9,27 @@ assert_order_vars(arg, optional = FALSE) \arguments{ \item{arg}{A function argument to be checked} -\item{optional}{Is the checked parameter optional? If set to \code{FALSE} and \code{arg} +\item{optional}{Is the checked argument optional? If set to \code{FALSE} and \code{arg} is \code{NULL} then an error is thrown} } \value{ -The function throws an error if \code{arg} is not a list of variables or \code{desc()} -calls created using \code{exprs()} and returns the input invisibly otherwise. +The function throws an error if \code{arg} is not a list of variables or +expressions created using \code{exprs()} and returns the input invisibly +otherwise. } \description{ -Checks if an argument is a valid list of order variables created using \code{exprs()} -} -\examples{ -library(dplyr, warn.conflicts = FALSE) -library(rlang) - -example_fun <- function(by_vars) { - assert_order_vars(by_vars) -} - -example_fun(exprs(USUBJID, PARAMCD, desc(AVISITN))) - -try(example_fun(quos(USUBJID, PARAMCD))) +\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} -try(example_fun(c("USUBJID", "PARAMCD", "VISIT"))) +This function is \emph{deprecated}, please use \code{assert_expr_list()} instead. -try(example_fun(exprs(USUBJID, toupper(PARAMCD), -AVAL))) +Checks if an argument is a valid list of order variables/expressions created +using \code{exprs()} } \seealso{ -Checks for valid input and returns warning or errors messages: -\code{\link{assert_atomic_vector}()}, -\code{\link{assert_character_scalar}()}, -\code{\link{assert_character_vector}()}, -\code{\link{assert_data_frame}()}, -\code{\link{assert_date_vector}()}, -\code{\link{assert_expr}()}, -\code{\link{assert_filter_cond}()}, -\code{\link{assert_function_param}()}, -\code{\link{assert_function}()}, -\code{\link{assert_has_variables}()}, -\code{\link{assert_integer_scalar}()}, -\code{\link{assert_list_element}()}, -\code{\link{assert_list_of}()}, -\code{\link{assert_logical_scalar}()}, -\code{\link{assert_named_exprs}()}, -\code{\link{assert_numeric_vector}()}, -\code{\link{assert_one_to_one}()}, -\code{\link{assert_param_does_not_exist}()}, -\code{\link{assert_s3_class}()}, -\code{\link{assert_same_type}()}, -\code{\link{assert_symbol}()}, -\code{\link{assert_unit}()}, -\code{\link{assert_vars}()}, -\code{\link{assert_varval_list}()} +Other deprecated: +\code{\link{quo_c}()}, +\code{\link{quo_not_missing}()}, +\code{\link{replace_symbol_in_quo}()} } -\concept{assertion} -\keyword{assertion} +\concept{deprecated} +\keyword{deprecated} diff --git a/man/assert_param_does_not_exist.Rd b/man/assert_param_does_not_exist.Rd index 9ce0c1f2..c51ec8df 100644 --- a/man/assert_param_does_not_exist.Rd +++ b/man/assert_param_does_not_exist.Rd @@ -35,6 +35,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -45,9 +46,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, \code{\link{assert_symbol}()}, diff --git a/man/assert_s3_class.Rd b/man/assert_s3_class.Rd index 3243e551..1726392b 100644 --- a/man/assert_s3_class.Rd +++ b/man/assert_s3_class.Rd @@ -11,7 +11,7 @@ assert_s3_class(arg, class, optional = FALSE) \item{class}{The S3 class to check for} -\item{optional}{Is the checked parameter optional? If set to \code{FALSE} and \code{arg} +\item{optional}{Is the checked argument optional? If set to \code{FALSE} and \code{arg} is \code{NULL} then an error is thrown} } \value{ @@ -39,6 +39,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -49,9 +50,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_same_type}()}, \code{\link{assert_symbol}()}, diff --git a/man/assert_same_type.Rd b/man/assert_same_type.Rd index 639e5033..c12d7c6c 100644 --- a/man/assert_same_type.Rd +++ b/man/assert_same_type.Rd @@ -39,6 +39,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -49,9 +50,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_symbol}()}, diff --git a/man/assert_symbol.Rd b/man/assert_symbol.Rd index c92dd72b..52819dfb 100644 --- a/man/assert_symbol.Rd +++ b/man/assert_symbol.Rd @@ -9,7 +9,7 @@ assert_symbol(arg, optional = FALSE) \arguments{ \item{arg}{A function argument to be checked. Must be a \code{symbol}. See examples.} -\item{optional}{Is the checked parameter optional? If set to \code{FALSE} and \code{arg} +\item{optional}{Is the checked argument optional? If set to \code{FALSE} and \code{arg} is \code{NULL} then an error is thrown} } \value{ @@ -45,6 +45,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -55,9 +56,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_unit.Rd b/man/assert_unit.Rd index 7034fcec..52820720 100644 --- a/man/assert_unit.Rd +++ b/man/assert_unit.Rd @@ -41,6 +41,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -51,9 +52,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_vars.Rd b/man/assert_vars.Rd index c7c77cf4..596f418a 100644 --- a/man/assert_vars.Rd +++ b/man/assert_vars.Rd @@ -12,7 +12,7 @@ assert_vars(arg, expect_names = FALSE, optional = FALSE) \item{expect_names}{If the argument is set to \code{TRUE}, it is checked if all variables are named, e.g., \code{exprs(APERSDT = APxxSDT, APEREDT = APxxEDT)}.} -\item{optional}{Is the checked parameter optional? If set to \code{FALSE} and \code{arg} +\item{optional}{Is the checked argument optional? If set to \code{FALSE} and \code{arg} is \code{NULL} then an error is thrown} } \value{ @@ -53,6 +53,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -63,9 +64,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/assert_varval_list.Rd b/man/assert_varval_list.Rd index 82461851..343fe57c 100644 --- a/man/assert_varval_list.Rd +++ b/man/assert_varval_list.Rd @@ -7,7 +7,7 @@ assert_varval_list( arg, required_elements = NULL, - accept_expr = FALSE, + accept_expr = TRUE, accept_var = FALSE, optional = FALSE ) @@ -22,7 +22,7 @@ assert_varval_list( \item{accept_var}{Should unnamed variable names (e.g. \code{exprs(USUBJID)}) on the right hand side be accepted?} -\item{optional}{Is the checked parameter optional? If set to \code{FALSE} and \code{arg} +\item{optional}{Is the checked argument optional? If set to \code{FALSE} and \code{arg} is \code{NULL} then an error is thrown.} } \value{ @@ -31,8 +31,8 @@ Otherwise, the input it returned invisibly. } \description{ Checks if the argument is a list of expressions where the expressions are -variable-value pairs. The value can be a symbol, a string, a numeric, or -\code{NA}. More general expression are not allowed. +variable-value pairs. The value can be a symbol, a string, a numeric, an +expression, or \code{NA}. } \examples{ library(dplyr, warn.conflicts = FALSE) @@ -52,6 +52,7 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_character_vector}()}, \code{\link{assert_data_frame}()}, \code{\link{assert_date_vector}()}, +\code{\link{assert_expr_list}()}, \code{\link{assert_expr}()}, \code{\link{assert_filter_cond}()}, \code{\link{assert_function_param}()}, @@ -62,9 +63,9 @@ Checks for valid input and returns warning or errors messages: \code{\link{assert_list_of}()}, \code{\link{assert_logical_scalar}()}, \code{\link{assert_named_exprs}()}, +\code{\link{assert_named}()}, \code{\link{assert_numeric_vector}()}, \code{\link{assert_one_to_one}()}, -\code{\link{assert_order_vars}()}, \code{\link{assert_param_does_not_exist}()}, \code{\link{assert_s3_class}()}, \code{\link{assert_same_type}()}, diff --git a/man/expr_c.Rd b/man/expr_c.Rd index 8dc253ad..312f238e 100644 --- a/man/expr_c.Rd +++ b/man/expr_c.Rd @@ -18,10 +18,7 @@ Concatenate One or More Expressions \seealso{ Helpers for working with Quosures: \code{\link{add_suffix_to_vars}()}, -\code{\link{quo_c}()}, -\code{\link{quo_not_missing}()}, \code{\link{replace_symbol_in_expr}()}, -\code{\link{replace_symbol_in_quo}()}, \code{\link{replace_values_by_names}()} } \concept{quo} diff --git a/man/extract_vars.Rd b/man/extract_vars.Rd index 540015c6..198ed3eb 100644 --- a/man/extract_vars.Rd +++ b/man/extract_vars.Rd @@ -9,7 +9,7 @@ extract_vars(x, side = "lhs") \arguments{ \item{x}{An \code{R} object} -\item{side}{One of \code{"lhs"} (the default) or \code{"rhs"}} +\item{side}{One of \code{"lhs"} (the default) or \code{"rhs"} for formulas} } \value{ A list of expressions @@ -17,6 +17,12 @@ A list of expressions \description{ Extract All Symbols from a List of Expressions } +\examples{ +library(rlang) +extract_vars(exprs(PARAMCD, (BASE - AVAL) / BASE + 100)) +extract_vars(AVAL ~ ARMCD + AGEGR1) +extract_vars(AVAL ~ ARMCD + AGEGR1, side = "rhs") +} \seealso{ Developer Utility Functions: \code{\link{\%notin\%}()}, diff --git a/man/process_set_values_to.Rd b/man/process_set_values_to.Rd index 967d50b0..5ed3c567 100644 --- a/man/process_set_values_to.Rd +++ b/man/process_set_values_to.Rd @@ -4,7 +4,7 @@ \alias{process_set_values_to} \title{Process \code{set_values_to} Argument} \usage{ -process_set_values_to(dataset, set_values_to, expected_types = NULL) +process_set_values_to(dataset, set_values_to = NULL, expected_types = NULL) } \arguments{ \item{dataset}{Input dataset} diff --git a/man/quo_c.Rd b/man/quo_c.Rd index dad6a5ab..672877ae 100644 --- a/man/quo_c.Rd +++ b/man/quo_c.Rd @@ -19,13 +19,10 @@ An object of class \code{quosures} This function is \emph{deprecated}, please use \code{expr_c()} instead. } \seealso{ -Helpers for working with Quosures: -\code{\link{add_suffix_to_vars}()}, -\code{\link{expr_c}()}, +Other deprecated: +\code{\link{assert_order_vars}()}, \code{\link{quo_not_missing}()}, -\code{\link{replace_symbol_in_expr}()}, -\code{\link{replace_symbol_in_quo}()}, -\code{\link{replace_values_by_names}()} +\code{\link{replace_symbol_in_quo}()} } -\concept{quo} -\keyword{quo} +\concept{deprecated} +\keyword{deprecated} diff --git a/man/quo_not_missing.Rd b/man/quo_not_missing.Rd index d1161bc0..7e45b673 100644 --- a/man/quo_not_missing.Rd +++ b/man/quo_not_missing.Rd @@ -16,13 +16,10 @@ TRUE or error. Check Whether an Argument Is Not a Quosure of a Missing Argument } \seealso{ -Helpers for working with Quosures: -\code{\link{add_suffix_to_vars}()}, -\code{\link{expr_c}()}, +Other deprecated: +\code{\link{assert_order_vars}()}, \code{\link{quo_c}()}, -\code{\link{replace_symbol_in_expr}()}, -\code{\link{replace_symbol_in_quo}()}, -\code{\link{replace_values_by_names}()} +\code{\link{replace_symbol_in_quo}()} } -\concept{quo} -\keyword{quo} +\concept{deprecated} +\keyword{deprecated} diff --git a/man/replace_symbol_in_expr.Rd b/man/replace_symbol_in_expr.Rd index 248eb19a..61b95436 100644 --- a/man/replace_symbol_in_expr.Rd +++ b/man/replace_symbol_in_expr.Rd @@ -32,9 +32,6 @@ replace_symbol_in_expr(expr(desc(AVAL)), target = AVAL, replace = AVAL.join) Helpers for working with Quosures: \code{\link{add_suffix_to_vars}()}, \code{\link{expr_c}()}, -\code{\link{quo_c}()}, -\code{\link{quo_not_missing}()}, -\code{\link{replace_symbol_in_quo}()}, \code{\link{replace_values_by_names}()} } \author{ diff --git a/man/replace_symbol_in_quo.Rd b/man/replace_symbol_in_quo.Rd index 57b3752a..ccbb3200 100644 --- a/man/replace_symbol_in_quo.Rd +++ b/man/replace_symbol_in_quo.Rd @@ -24,13 +24,10 @@ by \code{replace} This function is \emph{deprecated}, please use \code{replace_symbol_in_expr()} instead. } \seealso{ -Helpers for working with Quosures: -\code{\link{add_suffix_to_vars}()}, -\code{\link{expr_c}()}, +Other deprecated: +\code{\link{assert_order_vars}()}, \code{\link{quo_c}()}, -\code{\link{quo_not_missing}()}, -\code{\link{replace_symbol_in_expr}()}, -\code{\link{replace_values_by_names}()} +\code{\link{quo_not_missing}()} } -\concept{quo} -\keyword{quo} +\concept{deprecated} +\keyword{deprecated} diff --git a/man/replace_values_by_names.Rd b/man/replace_values_by_names.Rd index 821d85cf..0ad71aa3 100644 --- a/man/replace_values_by_names.Rd +++ b/man/replace_values_by_names.Rd @@ -17,14 +17,15 @@ A list of expressions \description{ Replace Expression Value with Name } +\examples{ +library(rlang) +replace_values_by_names(exprs(AVAL, ADT = convert_dtc_to_dt(EXSTDTC))) +} \seealso{ Helpers for working with Quosures: \code{\link{add_suffix_to_vars}()}, \code{\link{expr_c}()}, -\code{\link{quo_c}()}, -\code{\link{quo_not_missing}()}, -\code{\link{replace_symbol_in_expr}()}, -\code{\link{replace_symbol_in_quo}()} +\code{\link{replace_symbol_in_expr}()} } \concept{quo} \keyword{quo} diff --git a/renv.lock b/renv.lock index 3df24733..66174483 100644 --- a/renv.lock +++ b/renv.lock @@ -1,382 +1,349 @@ { "R": { - "Version": "4.0.5", + "Version": "4.1.3", "Repositories": [ { "Name": "CRAN", "URL": "https://cloud.r-project.org" }, { - "Name": "MRAN", - "URL": "https://cran.microsoft.com/snapshot/2021-03-31" + "Name": "RSPM", + "URL": "https://packagemanager.posit.co/cran/2022-03-10" } ] }, "Packages": { - "BH": { - "Package": "BH", - "Version": "1.75.0-0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "e4c04affc2cac20c8fec18385cd14691", - "Requirements": [] - }, "DT": { "Package": "DT", - "Version": "0.17", + "Version": "0.21", "Source": "Repository", - "Repository": "CRAN", - "Hash": "56b33b77f4cffd78ff96b8e5a69eabb0", + "Repository": "RSPM", "Requirements": [ "crosstalk", "htmltools", "htmlwidgets", + "jquerylib", "jsonlite", "magrittr", "promises" - ] - }, - "KernSmooth": { - "Package": "KernSmooth", - "Version": "2.23-18", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "9e703ad8bf0e99f3691f05da32dfe68b", - "Requirements": [] - }, - "MASS": { - "Package": "MASS", - "Version": "7.3-53.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "4ef21dd0348b9abb7f8bd1d77e4cd0c3", - "Requirements": [] - }, - "Matrix": { - "Package": "Matrix", - "Version": "1.3-2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "ff280503079ad8623d3c4b1519b24ea2", - "Requirements": [ - "lattice" - ] + ], + "Hash": "45fa28dbf288cd606e13ca35d3d72437" }, "R.cache": { "Package": "R.cache", - "Version": "0.16.0", + "Version": "0.15.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "fe539ca3f8efb7410c3ae2cf5fe6c0f8", + "Repository": "RSPM", "Requirements": [ + "R", "R.methodsS3", "R.oo", "R.utils", - "digest" - ] + "digest", + "utils" + ], + "Hash": "e92a8ea8388c47c82ed8aa435ed3be50" }, "R.methodsS3": { "Package": "R.methodsS3", "Version": "1.8.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "4bf6453323755202d5909697b6f7c109", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "utils" + ], + "Hash": "4bf6453323755202d5909697b6f7c109" }, "R.oo": { "Package": "R.oo", "Version": "1.24.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "5709328352717e2f0a9c012be8a97554", + "Repository": "RSPM", "Requirements": [ - "R.methodsS3" - ] + "R", + "R.methodsS3", + "methods", + "utils" + ], + "Hash": "5709328352717e2f0a9c012be8a97554" }, "R.utils": { "Package": "R.utils", - "Version": "2.12.0", + "Version": "2.11.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "d31333e10f14027e1cbbc6f266512806", + "Repository": "RSPM", "Requirements": [ + "R", "R.methodsS3", - "R.oo" - ] + "R.oo", + "methods", + "tools", + "utils" + ], + "Hash": "a7ecb8e60815c7a18648e84cd121b23a" }, "R6": { "Package": "R6", - "Version": "2.5.0", + "Version": "2.5.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "b203113193e70978a696b2809525649d", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "470851b6d5d0ac559e9d01bb352b4021" }, "Rcpp": { "Package": "Rcpp", - "Version": "1.0.6", + "Version": "1.0.8", "Source": "Repository", - "Repository": "CRAN", - "Hash": "dbb5e436998a7eba5a9d682060533338", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "methods", + "utils" + ], + "Hash": "22b546dd7e337f6c0c58a39983a496bc" }, "askpass": { "Package": "askpass", "Version": "1.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "e8a22846fff485f0be3770c2da758713", + "Repository": "RSPM", "Requirements": [ "sys" - ] + ], + "Hash": "e8a22846fff485f0be3770c2da758713" }, "backports": { "Package": "backports", - "Version": "1.2.1", + "Version": "1.4.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "644043219fc24e190c2f620c1a380a69", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "c39fbec8a30d23e721980b8afb31984c" }, "base64enc": { "Package": "base64enc", "Version": "0.1-3", "Source": "Repository", - "Repository": "CRAN", - "Hash": "543776ae6848fde2f48ff3816d0628bc", - "Requirements": [] - }, - "boot": { - "Package": "boot", - "Version": "1.3-27", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "d9778c960792721e8433daaf3db8f16a", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "543776ae6848fde2f48ff3816d0628bc" }, "brew": { "Package": "brew", - "Version": "1.0-6", + "Version": "1.0-7", "Source": "Repository", - "Repository": "CRAN", - "Hash": "92a5f887f9ae3035ac7afde22ba73ee9", - "Requirements": [] + "Repository": "RSPM", + "Hash": "38875ea52350ff4b4c03849fc69736c8" }, "brio": { "Package": "brio", "Version": "1.1.3", "Source": "Repository", - "Repository": "CRAN", - "Hash": "976cf154dfb043c012d87cddd8bca363", - "Requirements": [] + "Repository": "RSPM", + "Hash": "976cf154dfb043c012d87cddd8bca363" }, "bslib": { "Package": "bslib", - "Version": "0.4.0", + "Version": "0.3.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "be5ee090716ce1671be6cd5d7c34d091", + "Repository": "RSPM", "Requirements": [ - "cachem", + "R", + "grDevices", "htmltools", "jquerylib", "jsonlite", - "memoise", "rlang", "sass" - ] + ], + "Hash": "56ae7e1987b340186a8a5a157c2ec358" }, "cachem": { "Package": "cachem", - "Version": "1.0.4", + "Version": "1.0.6", "Source": "Repository", - "Repository": "CRAN", - "Hash": "2703a46dcabfb902f10060b2bca9f708", + "Repository": "RSPM", "Requirements": [ "fastmap", "rlang" - ] + ], + "Hash": "648c5b3d71e6a37e3043617489a0a0e9" }, "callr": { "Package": "callr", - "Version": "3.7.2", + "Version": "3.7.3", "Source": "Repository", "Repository": "CRAN", - "Hash": "358689cac9fe93b1bb3a19088d2dbed8", "Requirements": [ + "R", "R6", - "processx" - ] - }, - "cellranger": { - "Package": "cellranger", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "f61dbaec772ccd2e17705c1e872e9e7c", - "Requirements": [ - "rematch", - "tibble" - ] - }, - "class": { - "Package": "class", - "Version": "7.3-18", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "15ef288688a6919417ade6251deea2b3", - "Requirements": [ - "MASS" - ] + "processx", + "utils" + ], + "Hash": "9b2191ede20fa29828139b9900922e51" }, "cli": { "Package": "cli", "Version": "3.4.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "0d297d01734d2bcea40197bd4971a764", - "Requirements": [] + "Requirements": [ + "R", + "utils" + ], + "Hash": "0d297d01734d2bcea40197bd4971a764" }, "clipr": { "Package": "clipr", - "Version": "0.7.1", + "Version": "0.8.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "ebaa97ac99cc2daf04e77eecc7b781d7", - "Requirements": [] - }, - "cluster": { - "Package": "cluster", - "Version": "2.1.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "5ea8f54741ff907e2c0b5efabc9de729", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "utils" + ], + "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" }, "codetools": { "Package": "codetools", "Version": "0.2-18", "Source": "Repository", "Repository": "CRAN", - "Hash": "019388fc48e48b3da0d3a76ff94608a8", - "Requirements": [] + "Requirements": [ + "R" + ], + "Hash": "019388fc48e48b3da0d3a76ff94608a8" }, "commonmark": { "Package": "commonmark", - "Version": "1.7", + "Version": "1.8.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "0f22be39ec1d141fd03683c06f3a6e67", - "Requirements": [] + "Repository": "RSPM", + "Hash": "2ba81b120c1655ab696c935ef33ea716" }, "covr": { "Package": "covr", "Version": "3.5.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "6d80a9fc3c0c8473153b54fa54719dfd", + "Repository": "RSPM", "Requirements": [ + "R", "crayon", "digest", "httr", "jsonlite", + "methods", "rex", + "stats", + "utils", "withr", "yaml" - ] + ], + "Hash": "6d80a9fc3c0c8473153b54fa54719dfd" }, "cpp11": { "Package": "cpp11", "Version": "0.4.3", "Source": "Repository", "Repository": "CRAN", - "Hash": "ed588261931ee3be2c700d22e94a29ab", - "Requirements": [] + "Hash": "ed588261931ee3be2c700d22e94a29ab" }, "crayon": { "Package": "crayon", - "Version": "1.4.1", + "Version": "1.5.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "e75525c55c70e5f4f78c9960a4b402e9", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "grDevices", + "methods", + "utils" + ], + "Hash": "741c2e098e98afe3dc26a7b0e5489f4e" }, "credentials": { "Package": "credentials", - "Version": "1.3.0", + "Version": "1.3.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "a96728288c75a814c900af9da84387be", + "Repository": "RSPM", "Requirements": [ "askpass", "curl", "jsonlite", "openssl", "sys" - ] + ], + "Hash": "93762d0a34d78e6a025efdbfb5c6bb41" }, "crosstalk": { "Package": "crosstalk", - "Version": "1.1.1", + "Version": "1.2.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "2b06f9e415a62b6762e4b8098d2aecbc", + "Repository": "RSPM", "Requirements": [ "R6", "htmltools", "jsonlite", "lazyeval" - ] + ], + "Hash": "6aa54f69598c32177e920eb3402e8293" }, "curl": { "Package": "curl", - "Version": "4.3", + "Version": "4.3.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "2b7d10581cc730804e9ed178c8374bd6", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "022c42d49c28e95d69ca60446dbabf88" }, "cyclocomp": { "Package": "cyclocomp", "Version": "1.1.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "53cbed70a2f7472d48fb6aef08442f25", + "Repository": "RSPM", "Requirements": [ "callr", "crayon", "desc", "remotes", "withr" - ] + ], + "Hash": "53cbed70a2f7472d48fb6aef08442f25" }, "desc": { "Package": "desc", "Version": "1.4.2", "Source": "Repository", "Repository": "CRAN", - "Hash": "6b9602c7ebbe87101a9c8edb6e8b6d21", "Requirements": [ + "R", "R6", "cli", - "rprojroot" - ] + "rprojroot", + "utils" + ], + "Hash": "6b9602c7ebbe87101a9c8edb6e8b6d21" }, "devtools": { "Package": "devtools", - "Version": "2.3.2", + "Version": "2.4.3", "Source": "Repository", - "Repository": "CRAN", - "Hash": "415656f50722f5b6e6bcf80855ce11b9", + "Repository": "RSPM", "Requirements": [ - "DT", + "R", "callr", "cli", - "covr", "desc", "ellipsis", + "fs", "httr", - "jsonlite", + "lifecycle", "memoise", "pkgbuild", "pkgload", @@ -387,46 +354,59 @@ "rstudioapi", "rversions", "sessioninfo", + "stats", "testthat", + "tools", "usethis", + "utils", "withr" - ] + ], + "Hash": "fc35e13bb582e5fe6f63f3d647a4cbe5" }, "diffdf": { "Package": "diffdf", "Version": "1.0.4", "Source": "Repository", - "Repository": "CRAN", - "Hash": "9ddedef46959baad2080047a1b0117fe", + "Repository": "RSPM", "Requirements": [ + "R", "tibble" - ] + ], + "Hash": "9ddedef46959baad2080047a1b0117fe" }, "diffobj": { "Package": "diffobj", - "Version": "0.3.4", + "Version": "0.3.5", "Source": "Repository", - "Repository": "CRAN", - "Hash": "feb5b7455eba422a2c110bb89852e6a3", + "Repository": "RSPM", "Requirements": [ - "crayon" - ] + "R", + "crayon", + "methods", + "stats", + "tools", + "utils" + ], + "Hash": "bcaa8b95f8d7d01a5dedfd959ce88ab8" }, "digest": { "Package": "digest", - "Version": "0.6.27", + "Version": "0.6.29", "Source": "Repository", - "Repository": "CRAN", - "Hash": "a0cbe758a531d054b537d16dff4d58a1", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "utils" + ], + "Hash": "cf6b206a045a684728c3267ef7596190" }, "downlit": { "Package": "downlit", - "Version": "0.4.2", + "Version": "0.4.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "79bf3f66590752ffbba20f8d2da94c7c", + "Repository": "RSPM", "Requirements": [ + "R", "brio", "desc", "digest", @@ -435,93 +415,113 @@ "memoise", "rlang", "vctrs", - "withr", "yaml" - ] + ], + "Hash": "ba63dc9ab5a31f3209892437e40c5f60" }, "dplyr": { "Package": "dplyr", - "Version": "1.0.5", + "Version": "1.1.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "d0d76c11ec807eb3f000eba4e3eb0f68", "Requirements": [ + "R", "R6", - "ellipsis", + "cli", "generics", "glue", "lifecycle", "magrittr", + "methods", + "pillar", "rlang", "tibble", "tidyselect", + "utils", "vctrs" - ] + ], + "Hash": "eb5742d256a0d9306d85ea68756d8187" }, "ellipsis": { "Package": "ellipsis", "Version": "0.3.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077", + "Repository": "RSPM", "Requirements": [ + "R", "rlang" - ] + ], + "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077" }, "evaluate": { "Package": "evaluate", - "Version": "0.17", + "Version": "0.15", "Source": "Repository", - "Repository": "CRAN", - "Hash": "9171b012a55a1ef53f1442b1d798a3b4", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "699a7a93d08c962d9f8950b2d7a227f1" }, "fansi": { "Package": "fansi", - "Version": "0.4.2", + "Version": "1.0.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "fea074fb67fe4c25d47ad09087da847d", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "grDevices", + "utils" + ], + "Hash": "f28149c2d7a1342a834b314e95e67260" }, "fastmap": { "Package": "fastmap", "Version": "1.1.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "77bd60a6157420d4ffa93b27cf6a58b8", - "Requirements": [] + "Repository": "RSPM", + "Hash": "77bd60a6157420d4ffa93b27cf6a58b8" }, - "foreign": { - "Package": "foreign", - "Version": "0.8-81", + "fontawesome": { + "Package": "fontawesome", + "Version": "0.2.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "74628ea7a3be5ee8a7b5bb0a8e84882e", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "htmltools", + "rlang" + ], + "Hash": "55624ed409e46c5f358b2c060be87f67" }, "fs": { "Package": "fs", "Version": "1.5.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "7c89603d81793f0d5486d91ab1fc6f1d", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "7c89603d81793f0d5486d91ab1fc6f1d" }, "generics": { "Package": "generics", - "Version": "0.1.0", + "Version": "0.1.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "4d243a9c10b00589889fe32314ffd902", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "177475892cf4a55865868527654a7741" }, "gert": { "Package": "gert", - "Version": "1.9.1", + "Version": "1.5.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "9a091a6d2fb91e43afd4337e2dcef2e7", + "Repository": "RSPM", "Requirements": [ "askpass", "credentials", @@ -529,366 +529,338 @@ "rstudioapi", "sys", "zip" - ] + ], + "Hash": "8fddce7cbd59467106266a6e93e253b4" }, "gh": { "Package": "gh", - "Version": "1.3.1", + "Version": "1.3.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "b6a12054ee13dce0f6696c019c10e539", + "Repository": "RSPM", "Requirements": [ "cli", "gitcreds", "httr", "ini", "jsonlite" - ] + ], + "Hash": "38c2580abbda249bd6afeec00d14f531" }, "git2r": { "Package": "git2r", - "Version": "0.28.0", + "Version": "0.29.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "f64fd34026f6025de71a4354800e6d79", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "graphics", + "utils" + ], + "Hash": "b114135c4749076bd5ef74a5827b6f62" }, "gitcreds": { "Package": "gitcreds", "Version": "0.1.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "f3aefccc1cc50de6338146b62f115de8", - "Requirements": [] + "Repository": "RSPM", + "Hash": "f3aefccc1cc50de6338146b62f115de8" }, "glue": { "Package": "glue", "Version": "1.6.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "4f2596dfb05dac67b9dc558e5c6fba2e", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "4f2596dfb05dac67b9dc558e5c6fba2e" }, "highr": { "Package": "highr", - "Version": "0.8", + "Version": "0.9", "Source": "Repository", - "Repository": "CRAN", - "Hash": "4dc5bb88961e347a0f4d8aad597cbfac", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "xfun" + ], + "Hash": "8eb36c8125038e648e5d111c0d7b2ed4" }, "hms": { "Package": "hms", - "Version": "1.0.0", + "Version": "1.1.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "bf552cdd96f5969873afdac7311c7d0d", + "Repository": "RSPM", "Requirements": [ "ellipsis", "lifecycle", + "methods", "pkgconfig", "rlang", "vctrs" - ] + ], + "Hash": "5b8a2dd0fdbe2ab4f6081e6c7be6dfca" }, "htmltools": { "Package": "htmltools", - "Version": "0.5.3", + "Version": "0.5.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "6496090a9e00f8354b811d1a2d47b566", + "Repository": "RSPM", "Requirements": [ + "R", "base64enc", "digest", "fastmap", - "rlang" - ] + "grDevices", + "rlang", + "utils" + ], + "Hash": "526c484233f42522278ab06fb185cb26" }, "htmlwidgets": { "Package": "htmlwidgets", - "Version": "1.5.3", + "Version": "1.5.4", "Source": "Repository", - "Repository": "CRAN", - "Hash": "6fdaa86d0700f8b3e92ee3c445a5a10d", + "Repository": "RSPM", "Requirements": [ + "grDevices", "htmltools", "jsonlite", "yaml" - ] + ], + "Hash": "76147821cd3fcd8c4b04e1ef0498e7fb" }, "httpuv": { "Package": "httpuv", - "Version": "1.5.5", + "Version": "1.6.5", "Source": "Repository", - "Repository": "CRAN", - "Hash": "b9d5d39be2150cf86538b8488334b8f8", + "Repository": "RSPM", "Requirements": [ - "BH", + "R", "R6", "Rcpp", "later", - "promises" - ] + "promises", + "utils" + ], + "Hash": "97fe71f0a4a1c9890e6c2128afa04bc0" }, "httr": { "Package": "httr", "Version": "1.4.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "a525aba14184fec243f9eaec62fbed43", + "Repository": "RSPM", "Requirements": [ + "R", "R6", "curl", "jsonlite", "mime", "openssl" - ] + ], + "Hash": "a525aba14184fec243f9eaec62fbed43" }, "hunspell": { "Package": "hunspell", "Version": "3.0.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "3987784c19192ad0f2261c456d936df1", + "Repository": "RSPM", "Requirements": [ + "R", "Rcpp", "digest" - ] + ], + "Hash": "3987784c19192ad0f2261c456d936df1" }, "ini": { "Package": "ini", "Version": "0.3.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "6154ec2223172bce8162d4153cda21f7", - "Requirements": [] + "Repository": "RSPM", + "Hash": "6154ec2223172bce8162d4153cda21f7" }, "jquerylib": { "Package": "jquerylib", "Version": "0.1.4", "Source": "Repository", - "Repository": "CRAN", - "Hash": "5aab57a3bd297eee1c1d862735972182", + "Repository": "RSPM", "Requirements": [ "htmltools" - ] + ], + "Hash": "5aab57a3bd297eee1c1d862735972182" }, "jsonlite": { "Package": "jsonlite", - "Version": "1.7.2", + "Version": "1.8.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "98138e0994d41508c7a6b84a0600cfcb", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "methods" + ], + "Hash": "d07e729b27b372429d42d24d503613a0" }, "knitr": { "Package": "knitr", "Version": "1.40", "Source": "Repository", "Repository": "CRAN", - "Hash": "caea8b0f899a0b1738444b9bc47067e7", "Requirements": [ + "R", "evaluate", "highr", + "methods", "stringr", + "tools", "xfun", "yaml" - ] + ], + "Hash": "caea8b0f899a0b1738444b9bc47067e7" }, "later": { "Package": "later", - "Version": "1.1.0.1", + "Version": "1.3.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "d0a62b247165aabf397fded504660d8a", + "Repository": "RSPM", "Requirements": [ - "BH", "Rcpp", "rlang" - ] - }, - "lattice": { - "Package": "lattice", - "Version": "0.20-41", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "fbd9285028b0263d76d18c95ae51a53d", - "Requirements": [] + ], + "Hash": "7e7b457d7766bc47f2a5f21cc2984f8e" }, "lazyeval": { "Package": "lazyeval", "Version": "0.2.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "d908914ae53b04d4c0c0fd72ecc35370", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "d908914ae53b04d4c0c0fd72ecc35370" }, "lifecycle": { "Package": "lifecycle", "Version": "1.0.3", "Source": "Repository", - "Repository": "CRAN", - "Hash": "001cecbeac1cff9301bdc3775ee46a86", + "Repository": "RSPM", "Requirements": [ + "R", "cli", "glue", "rlang" - ] + ], + "Hash": "001cecbeac1cff9301bdc3775ee46a86" }, "lintr": { "Package": "lintr", - "Version": "2.0.1", + "Version": "3.0.2", "Source": "Repository", "Repository": "CRAN", - "Hash": "023cecbdc0a32f86ad3cb1734c018d2e", "Requirements": [ + "R", + "backports", "codetools", "crayon", "cyclocomp", "digest", - "httr", + "glue", "jsonlite", "knitr", "rex", - "rstudioapi", - "testthat", + "stats", + "utils", "xml2", "xmlparsedata" - ] + ], + "Hash": "b21ebd652d940f099915221f3328ab7b" }, "lubridate": { "Package": "lubridate", - "Version": "1.7.10", + "Version": "1.8.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "1ebfdc8a3cfe8fe19184f5481972b092", + "Repository": "RSPM", "Requirements": [ - "Rcpp", - "generics" - ] + "R", + "cpp11", + "generics", + "methods" + ], + "Hash": "2ff5eedb6ee38fb1b81205c73be1be5a" }, "magrittr": { "Package": "magrittr", - "Version": "2.0.3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "7ce2733a9826b3aeb1775d56fd305472", - "Requirements": [] - }, - "markdown": { - "Package": "markdown", - "Version": "1.1", + "Version": "2.0.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "61e4a10781dd00d7d81dd06ca9b94e95", - "Requirements": [ - "mime", - "xfun" - ] + "Repository": "RSPM", + "Hash": "cdc87ecd81934679d1557633d8e1fe51" }, "memoise": { "Package": "memoise", - "Version": "2.0.0", + "Version": "2.0.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "a0bc51650201a56d00a4798523cc91b3", + "Repository": "RSPM", "Requirements": [ "cachem", "rlang" - ] - }, - "mgcv": { - "Package": "mgcv", - "Version": "1.8-34", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "bd4a6c4b600f58651d60d381b0e9a397", - "Requirements": [ - "Matrix", - "nlme" - ] + ], + "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" }, "mime": { "Package": "mime", - "Version": "0.10", + "Version": "0.12", "Source": "Repository", - "Repository": "CRAN", - "Hash": "26fa77e707223e1ce042b2b5d09993dc", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "tools" + ], + "Hash": "18e9c28c1d3ca1560ce30658b22ce104" }, "miniUI": { "Package": "miniUI", "Version": "0.1.1.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "fec5f52652d60615fdb3957b3d74324a", + "Repository": "RSPM", "Requirements": [ "htmltools", - "shiny" - ] - }, - "mockery": { - "Package": "mockery", - "Version": "0.4.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "313fa6504824ba5aab9308412135fb5f", - "Requirements": [ - "testthat" - ] - }, - "nlme": { - "Package": "nlme", - "Version": "3.1-152", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "35de1ce639f20b5e10f7f46260730c65", - "Requirements": [ - "lattice" - ] - }, - "nnet": { - "Package": "nnet", - "Version": "7.3-15", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "b67ac021b3fb3a4b69d0d3c2bc049e9f", - "Requirements": [] + "shiny", + "utils" + ], + "Hash": "fec5f52652d60615fdb3957b3d74324a" }, "openssl": { "Package": "openssl", - "Version": "2.0.4", + "Version": "2.0.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "e86c5ffeb8474a9e03d75f5d2919683e", + "Repository": "RSPM", "Requirements": [ "askpass" - ] + ], + "Hash": "cf4329aac12c2c44089974559c18e446" }, "pillar": { "Package": "pillar", - "Version": "1.5.1", + "Version": "1.9.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "24622aa4a0d3de3463c34513edca99b2", "Requirements": [ "cli", - "crayon", - "ellipsis", "fansi", + "glue", "lifecycle", "rlang", "utf8", + "utils", "vctrs" - ] + ], + "Hash": "15da5a8412f317beeee6175fbc76f4bb" }, "pkgbuild": { "Package": "pkgbuild", - "Version": "1.2.0", + "Version": "1.3.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "725fcc30222d4d11ec68efb8ff11a9af", + "Repository": "RSPM", "Requirements": [ + "R", "R6", "callr", "cli", @@ -897,23 +869,26 @@ "prettyunits", "rprojroot", "withr" - ] + ], + "Hash": "66d2adfed274daf81ccfe77d974c3b9b" }, "pkgconfig": { "Package": "pkgconfig", "Version": "2.0.3", "Source": "Repository", - "Repository": "CRAN", - "Hash": "01f28d4278f15c76cddbea05899c5d6f", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "utils" + ], + "Hash": "01f28d4278f15c76cddbea05899c5d6f" }, "pkgdown": { "Package": "pkgdown", - "Version": "2.0.6", + "Version": "2.0.7", "Source": "Repository", "Repository": "CRAN", - "Hash": "f958d0b2a5dabc5ffd414f062b1ffbe7", "Requirements": [ + "R", "bslib", "callr", "cli", @@ -934,375 +909,362 @@ "withr", "xml2", "yaml" - ] + ], + "Hash": "16fa15449c930bf3a7761d3c68f8abf9" }, "pkgload": { "Package": "pkgload", - "Version": "1.2.0", + "Version": "1.2.4", "Source": "Repository", - "Repository": "CRAN", - "Hash": "cb57de933545960a86f03513e4bd2911", + "Repository": "RSPM", "Requirements": [ "cli", "crayon", "desc", - "pkgbuild", + "methods", "rlang", "rprojroot", "rstudioapi", + "utils", "withr" - ] + ], + "Hash": "7533cd805940821bf23eaf3c8d4c1735" }, "praise": { "Package": "praise", "Version": "1.0.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "a555924add98c99d2f411e37e7d25e9f", - "Requirements": [] + "Repository": "RSPM", + "Hash": "a555924add98c99d2f411e37e7d25e9f" }, "prettyunits": { "Package": "prettyunits", "Version": "1.1.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "95ef9167b75dde9d2ccc3c7528393e7e", - "Requirements": [] + "Repository": "RSPM", + "Hash": "95ef9167b75dde9d2ccc3c7528393e7e" }, "processx": { "Package": "processx", - "Version": "3.8.0", + "Version": "3.6.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "a33ee2d9bf07564efb888ad98410da84", "Requirements": [ + "R", "R6", - "ps" - ] - }, - "progress": { - "Package": "progress", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "14dc9f7a3c91ebb14ec5bb9208a07061", - "Requirements": [ - "R6", - "crayon", - "hms", - "prettyunits" - ] + "ps", + "utils" + ], + "Hash": "a11891e28c1f1e5ddd773ba1b8c07cf6" }, "promises": { "Package": "promises", "Version": "1.2.0.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "4ab2c43adb4d4699cf3690acd378d75d", + "Repository": "RSPM", "Requirements": [ "R6", "Rcpp", "later", "magrittr", - "rlang" - ] + "rlang", + "stats" + ], + "Hash": "4ab2c43adb4d4699cf3690acd378d75d" }, "ps": { "Package": "ps", "Version": "1.6.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "32620e2001c1dce1af49c49dccbb9420", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "utils" + ], + "Hash": "32620e2001c1dce1af49c49dccbb9420" }, "purrr": { "Package": "purrr", "Version": "0.3.4", "Source": "Repository", - "Repository": "CRAN", - "Hash": "97def703420c8ab10d8f0e6c72101e02", + "Repository": "RSPM", "Requirements": [ + "R", "magrittr", "rlang" - ] + ], + "Hash": "97def703420c8ab10d8f0e6c72101e02" }, "ragg": { "Package": "ragg", - "Version": "1.2.4", + "Version": "1.2.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "0db17bd5a1d4abfec76487b6f5dd957b", + "Repository": "RSPM", "Requirements": [ "systemfonts", "textshaping" - ] + ], + "Hash": "14932bb6f2739c771ca4ceaba6b4248e" }, "rappdirs": { "Package": "rappdirs", "Version": "0.3.3", "Source": "Repository", - "Repository": "CRAN", - "Hash": "5e3c5dc0b071b21fa128676560dbe94d", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "5e3c5dc0b071b21fa128676560dbe94d" }, "rcmdcheck": { "Package": "rcmdcheck", - "Version": "1.3.3", + "Version": "1.4.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "ed95895886dab6d2a584da45503555da", + "Repository": "RSPM", "Requirements": [ "R6", "callr", "cli", - "crayon", + "curl", "desc", "digest", "pkgbuild", "prettyunits", "rprojroot", "sessioninfo", + "utils", "withr", "xopen" - ] - }, - "readxl": { - "Package": "readxl", - "Version": "1.3.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "63537c483c2dbec8d9e3183b3735254a", - "Requirements": [ - "Rcpp", - "cellranger", - "progress", - "tibble" - ] - }, - "rematch": { - "Package": "rematch", - "Version": "1.0.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "c66b930d20bb6d858cd18e1cebcfae5c", - "Requirements": [] + ], + "Hash": "8f25ebe2ec38b1f2aef3b0d2ef76f6c4" }, "rematch2": { "Package": "rematch2", "Version": "2.1.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "76c9e04c712a05848ae7a23d2f170a40", + "Repository": "RSPM", "Requirements": [ "tibble" - ] + ], + "Hash": "76c9e04c712a05848ae7a23d2f170a40" }, "remotes": { "Package": "remotes", - "Version": "2.2.0", + "Version": "2.4.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "430a0908aee75b1fcba0e62857cab0ce", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "methods", + "stats", + "tools", + "utils" + ], + "Hash": "227045be9aee47e6dda9bb38ac870d67" }, "renv": { "Package": "renv", - "Version": "0.16.0", + "Version": "0.17.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "c9e8442ab69bc21c9697ecf856c1e6c7", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "utils" + ], + "Hash": "ce3065fc1a0b64a859f55ac3998d6927" }, "rex": { "Package": "rex", - "Version": "1.2.0", + "Version": "1.2.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "093584b944440c5cd07a696b3c8e0e4c", + "Repository": "RSPM", "Requirements": [ "lazyeval" - ] + ], + "Hash": "ae34cd56890607370665bee5bd17812f" }, "rlang": { "Package": "rlang", - "Version": "1.0.6", + "Version": "1.1.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "4ed1f8336c8d52c3e750adcdc57228a7", - "Requirements": [] + "Requirements": [ + "R", + "utils" + ], + "Hash": "dc079ccd156cde8647360f473c1fa718" }, "rmarkdown": { "Package": "rmarkdown", "Version": "2.17", "Source": "Repository", "Repository": "CRAN", - "Hash": "e97c8be593e010f93520e8215c0f9189", "Requirements": [ + "R", "bslib", "evaluate", "htmltools", "jquerylib", "jsonlite", "knitr", + "methods", "stringr", "tinytex", + "tools", + "utils", "xfun", "yaml" - ] + ], + "Hash": "e97c8be593e010f93520e8215c0f9189" }, "roxygen2": { "Package": "roxygen2", - "Version": "7.2.1", + "Version": "7.2.3", "Source": "Repository", "Repository": "CRAN", - "Hash": "da1f278262e563c835345872f2fef537", "Requirements": [ + "R", "R6", "brew", "cli", "commonmark", "cpp11", "desc", - "digest", "knitr", + "methods", "pkgload", "purrr", "rlang", "stringi", "stringr", + "utils", "withr", "xml2" - ] - }, - "rpart": { - "Package": "rpart", - "Version": "4.1-15", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "9787c1fcb680e655d062e7611cadf78e", - "Requirements": [] + ], + "Hash": "7b153c746193b143c14baa072bae4e27" }, "rprojroot": { "Package": "rprojroot", "Version": "2.0.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "249d8cd1e74a8f6a26194a91b47f21d1", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "249d8cd1e74a8f6a26194a91b47f21d1" }, "rstudioapi": { "Package": "rstudioapi", "Version": "0.13", "Source": "Repository", - "Repository": "CRAN", - "Hash": "06c85365a03fdaf699966cc1d3cf53ea", - "Requirements": [] + "Repository": "RSPM", + "Hash": "06c85365a03fdaf699966cc1d3cf53ea" }, "rversions": { "Package": "rversions", - "Version": "2.0.2", + "Version": "2.1.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "0ec41191f744d0f5afad8c6f35cc36e4", + "Repository": "RSPM", "Requirements": [ "curl", + "utils", "xml2" - ] + ], + "Hash": "f88fab00907b312f8b23ec13e2d437cb" }, "sass": { "Package": "sass", - "Version": "0.4.2", + "Version": "0.4.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "1b191143d7d3444d504277843f3a95fe", + "Repository": "RSPM", "Requirements": [ "R6", "fs", "htmltools", "rappdirs", "rlang" - ] + ], + "Hash": "50cf822feb64bb3977bda0b7091be623" }, "sessioninfo": { "Package": "sessioninfo", - "Version": "1.1.1", + "Version": "1.2.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "308013098befe37484df72c39cf90d6e", + "Repository": "RSPM", "Requirements": [ + "R", "cli", - "withr" - ] + "tools", + "utils" + ], + "Hash": "3f9796a8d0a0e8c6eb49a4b029359d1f" }, "shiny": { "Package": "shiny", - "Version": "1.6.0", + "Version": "1.7.1", "Source": "Repository", - "Repository": "CRAN", - "Hash": "6e3b6ae7fe02b5859e4bb277f218b8ae", + "Repository": "RSPM", "Requirements": [ + "R", "R6", "bslib", "cachem", "commonmark", "crayon", - "digest", "ellipsis", "fastmap", + "fontawesome", "glue", + "grDevices", "htmltools", "httpuv", "jsonlite", "later", "lifecycle", + "methods", "mime", "promises", "rlang", "sourcetools", + "tools", + "utils", "withr", "xtable" - ] + ], + "Hash": "00344c227c7bd0ab5d78052c5d736c44" }, "sourcetools": { "Package": "sourcetools", "Version": "0.1.7", "Source": "Repository", - "Repository": "CRAN", - "Hash": "947e4e02a79effa5d512473e10f41797", - "Requirements": [] - }, - "spatial": { - "Package": "spatial", - "Version": "7.3-13", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "8d0918547149f72e78ae942ccd1fdbc7", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "947e4e02a79effa5d512473e10f41797" }, "spelling": { "Package": "spelling", "Version": "2.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "b8c899a5c83f0d897286550481c91798", + "Repository": "RSPM", "Requirements": [ "commonmark", "hunspell", "knitr", "xml2" - ] + ], + "Hash": "b8c899a5c83f0d897286550481c91798" }, "staged.dependencies": { "Package": "staged.dependencies", - "Version": "0.2.7", + "Version": "0.2.8", "Source": "GitHub", "RemoteType": "github", "RemoteHost": "api.github.com", - "RemoteRepo": "staged.dependencies", "RemoteUsername": "openpharma", - "RemoteRef": "HEAD", - "RemoteSha": "669f45a95d8772899551ad51fc3b38a3b5a1056a", - "Hash": "348648f944ce5dbcbdc2b120c9ba3a3c", + "RemoteRepo": "staged.dependencies", + "RemoteRef": "main", + "RemoteSha": "ce7c112ba3d75cf48e4dd6310b3140ab0ec3b486", "Requirements": [ "desc", "devtools", @@ -1313,91 +1275,92 @@ "glue", "httr", "jsonlite", + "methods", "rcmdcheck", "remotes", "rlang", + "stats", "tidyr", + "utils", "withr", "yaml" - ] + ], + "Hash": "89f2e1d1009601f58f64b7092abcc0d7" }, "stringi": { "Package": "stringi", - "Version": "1.5.3", + "Version": "1.7.6", "Source": "Repository", - "Repository": "CRAN", - "Hash": "a063ebea753c92910a4cca7b18bc1f05", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "stats", + "tools", + "utils" + ], + "Hash": "bba431031d30789535745a9627ac9271" }, "stringr": { "Package": "stringr", "Version": "1.4.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "0759e6b6c0957edb1311028a49a35e76", + "Repository": "RSPM", "Requirements": [ + "R", "glue", "magrittr", "stringi" - ] + ], + "Hash": "0759e6b6c0957edb1311028a49a35e76" }, "styler": { "Package": "styler", - "Version": "1.8.0", + "Version": "1.9.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "c855e70eb69b3dd8883660b7110e0c44", "Requirements": [ + "R", "R.cache", "cli", "magrittr", "purrr", "rlang", "rprojroot", + "tools", "vctrs", "withr" - ] - }, - "survival": { - "Package": "survival", - "Version": "3.2-10", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "6b7453cd9bb32b12577c78d54eeea56a", - "Requirements": [ - "Matrix" - ] + ], + "Hash": "ed8c90822b7da46beee603f263a85fe0" }, "sys": { "Package": "sys", "Version": "3.4", "Source": "Repository", - "Repository": "CRAN", - "Hash": "b227d13e29222b4574486cfcbde077fa", - "Requirements": [] + "Repository": "RSPM", + "Hash": "b227d13e29222b4574486cfcbde077fa" }, "systemfonts": { "Package": "systemfonts", "Version": "1.0.4", "Source": "Repository", - "Repository": "CRAN", - "Hash": "90b28393209827327de889f49935140a", + "Repository": "RSPM", "Requirements": [ + "R", "cpp11" - ] + ], + "Hash": "90b28393209827327de889f49935140a" }, "testthat": { "Package": "testthat", - "Version": "3.0.2", + "Version": "3.1.7", "Source": "Repository", "Repository": "CRAN", - "Hash": "495e0434d9305716b6a87031570ce109", "Requirements": [ + "R", "R6", "brio", "callr", "cli", - "crayon", "desc", "digest", "ellipsis", @@ -1405,50 +1368,56 @@ "jsonlite", "lifecycle", "magrittr", + "methods", "pkgload", "praise", "processx", "ps", "rlang", + "utils", "waldo", "withr" - ] + ], + "Hash": "7eb5fd202a61d2fb78af5869b6c08998" }, "textshaping": { "Package": "textshaping", "Version": "0.3.6", "Source": "Repository", - "Repository": "CRAN", - "Hash": "1ab6223d3670fac7143202cb6a2d43d5", + "Repository": "RSPM", "Requirements": [ + "R", "cpp11", "systemfonts" - ] + ], + "Hash": "1ab6223d3670fac7143202cb6a2d43d5" }, "tibble": { "Package": "tibble", - "Version": "3.1.0", + "Version": "3.2.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "4d894a114dbd4ecafeda5074e7c538e6", "Requirements": [ - "ellipsis", + "R", "fansi", "lifecycle", "magrittr", + "methods", "pillar", "pkgconfig", "rlang", + "utils", "vctrs" - ] + ], + "Hash": "37695ff125982007d42a59ad10982ff2" }, "tidyr": { "Package": "tidyr", - "Version": "1.1.3", + "Version": "1.2.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "450d7dfaedde58e28586b854eeece4fa", + "Repository": "RSPM", "Requirements": [ + "R", "cpp11", "dplyr", "ellipsis", @@ -1459,40 +1428,44 @@ "rlang", "tibble", "tidyselect", + "utils", "vctrs" - ] + ], + "Hash": "d8b95b7fee945d7da6888cf7eb71a49c" }, "tidyselect": { "Package": "tidyselect", - "Version": "1.1.0", + "Version": "1.2.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "6ea435c354e8448819627cf686f66e0a", "Requirements": [ - "ellipsis", + "R", + "cli", "glue", - "purrr", + "lifecycle", "rlang", - "vctrs" - ] + "vctrs", + "withr" + ], + "Hash": "79540e5fcd9e0435af547d885f184fd5" }, "tinytex": { "Package": "tinytex", - "Version": "0.42", + "Version": "0.37", "Source": "Repository", - "Repository": "CRAN", - "Hash": "7629c6c1540835d5248e6e7df265fa74", + "Repository": "RSPM", "Requirements": [ "xfun" - ] + ], + "Hash": "a80abeb527a977e4bef21873d29222dd" }, "usethis": { "Package": "usethis", - "Version": "2.1.6", + "Version": "2.1.5", "Source": "Repository", - "Repository": "CRAN", - "Hash": "a67a22c201832b12c036cc059f1d137d", + "Repository": "RSPM", "Requirements": [ + "R", "cli", "clipr", "crayon", @@ -1509,134 +1482,143 @@ "rlang", "rprojroot", "rstudioapi", + "stats", + "utils", "whisker", "withr", "yaml" - ] + ], + "Hash": "c499f488e6dd7718accffaee5bc5a79b" }, "utf8": { "Package": "utf8", - "Version": "1.2.1", + "Version": "1.2.2", "Source": "Repository", - "Repository": "CRAN", - "Hash": "c3ad47dc6da0751f18ed53c4613e3ac7", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "c9c462b759a5cc844ae25b5942654d13" }, "vctrs": { "Package": "vctrs", - "Version": "0.5.0", + "Version": "0.6.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "001fd6a5ebfff8316baf9fb2b5516dc9", "Requirements": [ + "R", "cli", "glue", "lifecycle", "rlang" - ] - }, - "visNetwork": { - "Package": "visNetwork", - "Version": "2.0.9", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "12545f2acf49d1d346d075580122d89c", - "Requirements": [ - "htmltools", - "htmlwidgets", - "jsonlite", - "magrittr" - ] + ], + "Hash": "7e877404388794361277be95d8445de8" }, "waldo": { "Package": "waldo", - "Version": "0.2.5", + "Version": "0.4.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "20c45f1d511a3f730b7b469f4d11e104", "Requirements": [ "cli", "diffobj", "fansi", "glue", + "methods", "rematch2", "rlang", "tibble" - ] + ], + "Hash": "035fba89d0c86e2113120f93301b98ad" }, "whisker": { "Package": "whisker", "Version": "0.4", "Source": "Repository", - "Repository": "CRAN", - "Hash": "ca970b96d894e90397ed20637a0c1bbe", - "Requirements": [] + "Repository": "RSPM", + "Hash": "ca970b96d894e90397ed20637a0c1bbe" }, "withr": { "Package": "withr", "Version": "2.5.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "c0e49a9760983e81e55cdd9be92e7182", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "grDevices", + "graphics", + "stats" + ], + "Hash": "c0e49a9760983e81e55cdd9be92e7182" }, "xfun": { "Package": "xfun", "Version": "0.34", "Source": "Repository", "Repository": "CRAN", - "Hash": "9eba2411b0b1f879797141bd24df7407", - "Requirements": [] + "Requirements": [ + "stats", + "tools" + ], + "Hash": "9eba2411b0b1f879797141bd24df7407" }, "xml2": { "Package": "xml2", "Version": "1.3.3", "Source": "Repository", - "Repository": "CRAN", - "Hash": "40682ed6a969ea5abfd351eb67833adc", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "40682ed6a969ea5abfd351eb67833adc" }, "xmlparsedata": { "Package": "xmlparsedata", "Version": "1.0.5", "Source": "Repository", - "Repository": "CRAN", - "Hash": "45e4bf3c46476896e821fc0a408fb4fc", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "45e4bf3c46476896e821fc0a408fb4fc" }, "xopen": { "Package": "xopen", "Version": "1.0.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "6c85f015dee9cc7710ddd20f86881f58", + "Repository": "RSPM", "Requirements": [ + "R", "processx" - ] + ], + "Hash": "6c85f015dee9cc7710ddd20f86881f58" }, "xtable": { "Package": "xtable", "Version": "1.8-4", "Source": "Repository", - "Repository": "CRAN", - "Hash": "b8acdf8af494d9ec19ccb2481a9b11c2", - "Requirements": [] + "Repository": "RSPM", + "Requirements": [ + "R", + "stats", + "utils" + ], + "Hash": "b8acdf8af494d9ec19ccb2481a9b11c2" }, "yaml": { "Package": "yaml", - "Version": "2.2.1", + "Version": "2.3.5", "Source": "Repository", - "Repository": "CRAN", - "Hash": "2826c5d9efb0a88f657c7a679c7106db", - "Requirements": [] + "Repository": "RSPM", + "Hash": "458bb38374d73bf83b1bb85e353da200" }, "zip": { "Package": "zip", - "Version": "2.2.2", + "Version": "2.2.0", "Source": "Repository", - "Repository": "CRAN", - "Hash": "c42bfcec3fa6a0cce17ce1f8bc684f88", - "Requirements": [] + "Repository": "RSPM", + "Hash": "c7eef2996ac270a18c2715c997a727c5" } } } diff --git a/renv/.gitignore b/renv/.gitignore index 6ae4167d..2649d0a0 100644 --- a/renv/.gitignore +++ b/renv/.gitignore @@ -5,3 +5,4 @@ local/ lock/ python/ staging/ +profile diff --git a/renv/activate.R b/renv/activate.R index 019b5a66..360dd528 100644 --- a/renv/activate.R +++ b/renv/activate.R @@ -2,7 +2,7 @@ local({ # the requested version of renv - version <- "0.16.0" + version <- "0.17.0" # the project directory project <- getwd() @@ -94,8 +94,11 @@ local({ return(repos) # if we're testing, re-use the test repositories - if (renv_bootstrap_tests_running()) - return(getOption("renv.tests.repos")) + if (renv_bootstrap_tests_running()) { + repos <- getOption("renv.tests.repos") + if (!is.null(repos)) + return(repos) + } # retrieve current repos repos <- getOption("repos") @@ -344,8 +347,7 @@ 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) } @@ -659,8 +661,8 @@ local({ if (version == loadedversion) return(TRUE) - # assume four-component versions are from GitHub; three-component - # versions are from CRAN + # 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 = "@") @@ -700,6 +702,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 = warning) + # load the project renv::load(project) @@ -842,11 +850,29 @@ local({ renv_json_read <- function(file = NULL, text = NULL) { + jlerr <- NULL + # if jsonlite is loaded, use that instead - if ("jsonlite" %in% loadedNamespaces()) - renv_json_read_jsonlite(file, text) + if ("jsonlite" %in% loadedNamespaces()) { + + json <- catch(renv_json_read_jsonlite(file, text)) + if (!inherits(json, "error")) + return(json) + + jlerr <- json + + } + + # otherwise, fall back to the default JSON reader + json <- catch(renv_json_read_default(file, text)) + if (!inherits(json, "error")) + return(json) + + # report an error + if (!is.null(jlerr)) + stop(jlerr) else - renv_json_read_default(file, text) + stop(json) } diff --git a/renv/profiles/4.1/renv.lock b/renv/profiles/4.1/renv.lock new file mode 100644 index 00000000..0f3ac2c8 --- /dev/null +++ b/renv/profiles/4.1/renv.lock @@ -0,0 +1,1624 @@ +{ + "R": { + "Version": "4.1.3", + "Repositories": [ + { + "Name": "CRAN", + "URL": "https://cloud.r-project.org" + }, + { + "Name": "RSPM", + "URL": "https://packagemanager.posit.co/cran/2022-03-10" + } + ] + }, + "Packages": { + "DT": { + "Package": "DT", + "Version": "0.21", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "crosstalk", + "htmltools", + "htmlwidgets", + "jquerylib", + "jsonlite", + "magrittr", + "promises" + ], + "Hash": "45fa28dbf288cd606e13ca35d3d72437" + }, + "R.cache": { + "Package": "R.cache", + "Version": "0.15.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R.methodsS3", + "R.oo", + "R.utils", + "digest", + "utils" + ], + "Hash": "e92a8ea8388c47c82ed8aa435ed3be50" + }, + "R.methodsS3": { + "Package": "R.methodsS3", + "Version": "1.8.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "utils" + ], + "Hash": "4bf6453323755202d5909697b6f7c109" + }, + "R.oo": { + "Package": "R.oo", + "Version": "1.24.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R.methodsS3", + "methods", + "utils" + ], + "Hash": "5709328352717e2f0a9c012be8a97554" + }, + "R.utils": { + "Package": "R.utils", + "Version": "2.11.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R.methodsS3", + "R.oo", + "methods", + "tools", + "utils" + ], + "Hash": "a7ecb8e60815c7a18648e84cd121b23a" + }, + "R6": { + "Package": "R6", + "Version": "2.5.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "470851b6d5d0ac559e9d01bb352b4021" + }, + "Rcpp": { + "Package": "Rcpp", + "Version": "1.0.8", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "methods", + "utils" + ], + "Hash": "22b546dd7e337f6c0c58a39983a496bc" + }, + "askpass": { + "Package": "askpass", + "Version": "1.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "sys" + ], + "Hash": "e8a22846fff485f0be3770c2da758713" + }, + "backports": { + "Package": "backports", + "Version": "1.4.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "c39fbec8a30d23e721980b8afb31984c" + }, + "base64enc": { + "Package": "base64enc", + "Version": "0.1-3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "543776ae6848fde2f48ff3816d0628bc" + }, + "brew": { + "Package": "brew", + "Version": "1.0-7", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "38875ea52350ff4b4c03849fc69736c8" + }, + "brio": { + "Package": "brio", + "Version": "1.1.3", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "976cf154dfb043c012d87cddd8bca363" + }, + "bslib": { + "Package": "bslib", + "Version": "0.3.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "grDevices", + "htmltools", + "jquerylib", + "jsonlite", + "rlang", + "sass" + ], + "Hash": "56ae7e1987b340186a8a5a157c2ec358" + }, + "cachem": { + "Package": "cachem", + "Version": "1.0.6", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "fastmap", + "rlang" + ], + "Hash": "648c5b3d71e6a37e3043617489a0a0e9" + }, + "callr": { + "Package": "callr", + "Version": "3.7.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "processx", + "utils" + ], + "Hash": "9b2191ede20fa29828139b9900922e51" + }, + "cli": { + "Package": "cli", + "Version": "3.4.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "utils" + ], + "Hash": "0d297d01734d2bcea40197bd4971a764" + }, + "clipr": { + "Package": "clipr", + "Version": "0.8.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "utils" + ], + "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" + }, + "codetools": { + "Package": "codetools", + "Version": "0.2-18", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "019388fc48e48b3da0d3a76ff94608a8" + }, + "commonmark": { + "Package": "commonmark", + "Version": "1.8.0", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "2ba81b120c1655ab696c935ef33ea716" + }, + "covr": { + "Package": "covr", + "Version": "3.5.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "crayon", + "digest", + "httr", + "jsonlite", + "methods", + "rex", + "stats", + "utils", + "withr", + "yaml" + ], + "Hash": "6d80a9fc3c0c8473153b54fa54719dfd" + }, + "cpp11": { + "Package": "cpp11", + "Version": "0.4.3", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "ed588261931ee3be2c700d22e94a29ab" + }, + "crayon": { + "Package": "crayon", + "Version": "1.5.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "grDevices", + "methods", + "utils" + ], + "Hash": "741c2e098e98afe3dc26a7b0e5489f4e" + }, + "credentials": { + "Package": "credentials", + "Version": "1.3.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "askpass", + "curl", + "jsonlite", + "openssl", + "sys" + ], + "Hash": "93762d0a34d78e6a025efdbfb5c6bb41" + }, + "crosstalk": { + "Package": "crosstalk", + "Version": "1.2.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R6", + "htmltools", + "jsonlite", + "lazyeval" + ], + "Hash": "6aa54f69598c32177e920eb3402e8293" + }, + "curl": { + "Package": "curl", + "Version": "4.3.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "022c42d49c28e95d69ca60446dbabf88" + }, + "cyclocomp": { + "Package": "cyclocomp", + "Version": "1.1.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "callr", + "crayon", + "desc", + "remotes", + "withr" + ], + "Hash": "53cbed70a2f7472d48fb6aef08442f25" + }, + "desc": { + "Package": "desc", + "Version": "1.4.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "cli", + "rprojroot", + "utils" + ], + "Hash": "6b9602c7ebbe87101a9c8edb6e8b6d21" + }, + "devtools": { + "Package": "devtools", + "Version": "2.4.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "callr", + "cli", + "desc", + "ellipsis", + "fs", + "httr", + "lifecycle", + "memoise", + "pkgbuild", + "pkgload", + "rcmdcheck", + "remotes", + "rlang", + "roxygen2", + "rstudioapi", + "rversions", + "sessioninfo", + "stats", + "testthat", + "tools", + "usethis", + "utils", + "withr" + ], + "Hash": "fc35e13bb582e5fe6f63f3d647a4cbe5" + }, + "diffdf": { + "Package": "diffdf", + "Version": "1.0.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "tibble" + ], + "Hash": "9ddedef46959baad2080047a1b0117fe" + }, + "diffobj": { + "Package": "diffobj", + "Version": "0.3.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "crayon", + "methods", + "stats", + "tools", + "utils" + ], + "Hash": "bcaa8b95f8d7d01a5dedfd959ce88ab8" + }, + "digest": { + "Package": "digest", + "Version": "0.6.29", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "utils" + ], + "Hash": "cf6b206a045a684728c3267ef7596190" + }, + "downlit": { + "Package": "downlit", + "Version": "0.4.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "brio", + "desc", + "digest", + "evaluate", + "fansi", + "memoise", + "rlang", + "vctrs", + "yaml" + ], + "Hash": "ba63dc9ab5a31f3209892437e40c5f60" + }, + "dplyr": { + "Package": "dplyr", + "Version": "1.1.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "cli", + "generics", + "glue", + "lifecycle", + "magrittr", + "methods", + "pillar", + "rlang", + "tibble", + "tidyselect", + "utils", + "vctrs" + ], + "Hash": "eb5742d256a0d9306d85ea68756d8187" + }, + "ellipsis": { + "Package": "ellipsis", + "Version": "0.3.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "rlang" + ], + "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077" + }, + "evaluate": { + "Package": "evaluate", + "Version": "0.15", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "699a7a93d08c962d9f8950b2d7a227f1" + }, + "fansi": { + "Package": "fansi", + "Version": "1.0.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "grDevices", + "utils" + ], + "Hash": "f28149c2d7a1342a834b314e95e67260" + }, + "fastmap": { + "Package": "fastmap", + "Version": "1.1.0", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "77bd60a6157420d4ffa93b27cf6a58b8" + }, + "fontawesome": { + "Package": "fontawesome", + "Version": "0.2.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "htmltools", + "rlang" + ], + "Hash": "55624ed409e46c5f358b2c060be87f67" + }, + "fs": { + "Package": "fs", + "Version": "1.5.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "7c89603d81793f0d5486d91ab1fc6f1d" + }, + "generics": { + "Package": "generics", + "Version": "0.1.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "177475892cf4a55865868527654a7741" + }, + "gert": { + "Package": "gert", + "Version": "1.5.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "askpass", + "credentials", + "openssl", + "rstudioapi", + "sys", + "zip" + ], + "Hash": "8fddce7cbd59467106266a6e93e253b4" + }, + "gh": { + "Package": "gh", + "Version": "1.3.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "cli", + "gitcreds", + "httr", + "ini", + "jsonlite" + ], + "Hash": "38c2580abbda249bd6afeec00d14f531" + }, + "git2r": { + "Package": "git2r", + "Version": "0.29.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "graphics", + "utils" + ], + "Hash": "b114135c4749076bd5ef74a5827b6f62" + }, + "gitcreds": { + "Package": "gitcreds", + "Version": "0.1.1", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "f3aefccc1cc50de6338146b62f115de8" + }, + "glue": { + "Package": "glue", + "Version": "1.6.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "4f2596dfb05dac67b9dc558e5c6fba2e" + }, + "highr": { + "Package": "highr", + "Version": "0.9", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "xfun" + ], + "Hash": "8eb36c8125038e648e5d111c0d7b2ed4" + }, + "hms": { + "Package": "hms", + "Version": "1.1.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "ellipsis", + "lifecycle", + "methods", + "pkgconfig", + "rlang", + "vctrs" + ], + "Hash": "5b8a2dd0fdbe2ab4f6081e6c7be6dfca" + }, + "htmltools": { + "Package": "htmltools", + "Version": "0.5.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "base64enc", + "digest", + "fastmap", + "grDevices", + "rlang", + "utils" + ], + "Hash": "526c484233f42522278ab06fb185cb26" + }, + "htmlwidgets": { + "Package": "htmlwidgets", + "Version": "1.5.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "grDevices", + "htmltools", + "jsonlite", + "yaml" + ], + "Hash": "76147821cd3fcd8c4b04e1ef0498e7fb" + }, + "httpuv": { + "Package": "httpuv", + "Version": "1.6.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "Rcpp", + "later", + "promises", + "utils" + ], + "Hash": "97fe71f0a4a1c9890e6c2128afa04bc0" + }, + "httr": { + "Package": "httr", + "Version": "1.4.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "curl", + "jsonlite", + "mime", + "openssl" + ], + "Hash": "a525aba14184fec243f9eaec62fbed43" + }, + "hunspell": { + "Package": "hunspell", + "Version": "3.0.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "Rcpp", + "digest" + ], + "Hash": "3987784c19192ad0f2261c456d936df1" + }, + "ini": { + "Package": "ini", + "Version": "0.3.1", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "6154ec2223172bce8162d4153cda21f7" + }, + "jquerylib": { + "Package": "jquerylib", + "Version": "0.1.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "htmltools" + ], + "Hash": "5aab57a3bd297eee1c1d862735972182" + }, + "jsonlite": { + "Package": "jsonlite", + "Version": "1.8.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "methods" + ], + "Hash": "d07e729b27b372429d42d24d503613a0" + }, + "knitr": { + "Package": "knitr", + "Version": "1.40", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "evaluate", + "highr", + "methods", + "stringr", + "tools", + "xfun", + "yaml" + ], + "Hash": "caea8b0f899a0b1738444b9bc47067e7" + }, + "later": { + "Package": "later", + "Version": "1.3.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "Rcpp", + "rlang" + ], + "Hash": "7e7b457d7766bc47f2a5f21cc2984f8e" + }, + "lazyeval": { + "Package": "lazyeval", + "Version": "0.2.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "d908914ae53b04d4c0c0fd72ecc35370" + }, + "lifecycle": { + "Package": "lifecycle", + "Version": "1.0.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "glue", + "rlang" + ], + "Hash": "001cecbeac1cff9301bdc3775ee46a86" + }, + "lintr": { + "Package": "lintr", + "Version": "3.0.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "backports", + "codetools", + "crayon", + "cyclocomp", + "digest", + "glue", + "jsonlite", + "knitr", + "rex", + "stats", + "utils", + "xml2", + "xmlparsedata" + ], + "Hash": "b21ebd652d940f099915221f3328ab7b" + }, + "lubridate": { + "Package": "lubridate", + "Version": "1.8.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cpp11", + "generics", + "methods" + ], + "Hash": "2ff5eedb6ee38fb1b81205c73be1be5a" + }, + "magrittr": { + "Package": "magrittr", + "Version": "2.0.2", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "cdc87ecd81934679d1557633d8e1fe51" + }, + "memoise": { + "Package": "memoise", + "Version": "2.0.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "cachem", + "rlang" + ], + "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" + }, + "mime": { + "Package": "mime", + "Version": "0.12", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "tools" + ], + "Hash": "18e9c28c1d3ca1560ce30658b22ce104" + }, + "miniUI": { + "Package": "miniUI", + "Version": "0.1.1.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "htmltools", + "shiny", + "utils" + ], + "Hash": "fec5f52652d60615fdb3957b3d74324a" + }, + "openssl": { + "Package": "openssl", + "Version": "2.0.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "askpass" + ], + "Hash": "cf4329aac12c2c44089974559c18e446" + }, + "pillar": { + "Package": "pillar", + "Version": "1.9.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "cli", + "fansi", + "glue", + "lifecycle", + "rlang", + "utf8", + "utils", + "vctrs" + ], + "Hash": "15da5a8412f317beeee6175fbc76f4bb" + }, + "pkgbuild": { + "Package": "pkgbuild", + "Version": "1.3.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "callr", + "cli", + "crayon", + "desc", + "prettyunits", + "rprojroot", + "withr" + ], + "Hash": "66d2adfed274daf81ccfe77d974c3b9b" + }, + "pkgconfig": { + "Package": "pkgconfig", + "Version": "2.0.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "utils" + ], + "Hash": "01f28d4278f15c76cddbea05899c5d6f" + }, + "pkgdown": { + "Package": "pkgdown", + "Version": "2.0.7", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "bslib", + "callr", + "cli", + "desc", + "digest", + "downlit", + "fs", + "httr", + "jsonlite", + "magrittr", + "memoise", + "purrr", + "ragg", + "rlang", + "rmarkdown", + "tibble", + "whisker", + "withr", + "xml2", + "yaml" + ], + "Hash": "16fa15449c930bf3a7761d3c68f8abf9" + }, + "pkgload": { + "Package": "pkgload", + "Version": "1.2.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "cli", + "crayon", + "desc", + "methods", + "rlang", + "rprojroot", + "rstudioapi", + "utils", + "withr" + ], + "Hash": "7533cd805940821bf23eaf3c8d4c1735" + }, + "praise": { + "Package": "praise", + "Version": "1.0.0", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "a555924add98c99d2f411e37e7d25e9f" + }, + "prettyunits": { + "Package": "prettyunits", + "Version": "1.1.1", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "95ef9167b75dde9d2ccc3c7528393e7e" + }, + "processx": { + "Package": "processx", + "Version": "3.6.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "ps", + "utils" + ], + "Hash": "a11891e28c1f1e5ddd773ba1b8c07cf6" + }, + "promises": { + "Package": "promises", + "Version": "1.2.0.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R6", + "Rcpp", + "later", + "magrittr", + "rlang", + "stats" + ], + "Hash": "4ab2c43adb4d4699cf3690acd378d75d" + }, + "ps": { + "Package": "ps", + "Version": "1.6.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "utils" + ], + "Hash": "32620e2001c1dce1af49c49dccbb9420" + }, + "purrr": { + "Package": "purrr", + "Version": "0.3.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "magrittr", + "rlang" + ], + "Hash": "97def703420c8ab10d8f0e6c72101e02" + }, + "ragg": { + "Package": "ragg", + "Version": "1.2.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "systemfonts", + "textshaping" + ], + "Hash": "14932bb6f2739c771ca4ceaba6b4248e" + }, + "rappdirs": { + "Package": "rappdirs", + "Version": "0.3.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "5e3c5dc0b071b21fa128676560dbe94d" + }, + "rcmdcheck": { + "Package": "rcmdcheck", + "Version": "1.4.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R6", + "callr", + "cli", + "curl", + "desc", + "digest", + "pkgbuild", + "prettyunits", + "rprojroot", + "sessioninfo", + "utils", + "withr", + "xopen" + ], + "Hash": "8f25ebe2ec38b1f2aef3b0d2ef76f6c4" + }, + "rematch2": { + "Package": "rematch2", + "Version": "2.1.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "tibble" + ], + "Hash": "76c9e04c712a05848ae7a23d2f170a40" + }, + "remotes": { + "Package": "remotes", + "Version": "2.4.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods", + "stats", + "tools", + "utils" + ], + "Hash": "227045be9aee47e6dda9bb38ac870d67" + }, + "renv": { + "Package": "renv", + "Version": "0.17.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "utils" + ], + "Hash": "ce3065fc1a0b64a859f55ac3998d6927" + }, + "rex": { + "Package": "rex", + "Version": "1.2.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "lazyeval" + ], + "Hash": "ae34cd56890607370665bee5bd17812f" + }, + "rlang": { + "Package": "rlang", + "Version": "1.1.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "utils" + ], + "Hash": "dc079ccd156cde8647360f473c1fa718" + }, + "rmarkdown": { + "Package": "rmarkdown", + "Version": "2.17", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "bslib", + "evaluate", + "htmltools", + "jquerylib", + "jsonlite", + "knitr", + "methods", + "stringr", + "tinytex", + "tools", + "utils", + "xfun", + "yaml" + ], + "Hash": "e97c8be593e010f93520e8215c0f9189" + }, + "roxygen2": { + "Package": "roxygen2", + "Version": "7.2.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "brew", + "cli", + "commonmark", + "cpp11", + "desc", + "knitr", + "methods", + "pkgload", + "purrr", + "rlang", + "stringi", + "stringr", + "utils", + "withr", + "xml2" + ], + "Hash": "7b153c746193b143c14baa072bae4e27" + }, + "rprojroot": { + "Package": "rprojroot", + "Version": "2.0.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "249d8cd1e74a8f6a26194a91b47f21d1" + }, + "rstudioapi": { + "Package": "rstudioapi", + "Version": "0.13", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "06c85365a03fdaf699966cc1d3cf53ea" + }, + "rversions": { + "Package": "rversions", + "Version": "2.1.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "curl", + "utils", + "xml2" + ], + "Hash": "f88fab00907b312f8b23ec13e2d437cb" + }, + "sass": { + "Package": "sass", + "Version": "0.4.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R6", + "fs", + "htmltools", + "rappdirs", + "rlang" + ], + "Hash": "50cf822feb64bb3977bda0b7091be623" + }, + "sessioninfo": { + "Package": "sessioninfo", + "Version": "1.2.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "tools", + "utils" + ], + "Hash": "3f9796a8d0a0e8c6eb49a4b029359d1f" + }, + "shiny": { + "Package": "shiny", + "Version": "1.7.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "bslib", + "cachem", + "commonmark", + "crayon", + "ellipsis", + "fastmap", + "fontawesome", + "glue", + "grDevices", + "htmltools", + "httpuv", + "jsonlite", + "later", + "lifecycle", + "methods", + "mime", + "promises", + "rlang", + "sourcetools", + "tools", + "utils", + "withr", + "xtable" + ], + "Hash": "00344c227c7bd0ab5d78052c5d736c44" + }, + "sourcetools": { + "Package": "sourcetools", + "Version": "0.1.7", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "947e4e02a79effa5d512473e10f41797" + }, + "spelling": { + "Package": "spelling", + "Version": "2.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "commonmark", + "hunspell", + "knitr", + "xml2" + ], + "Hash": "b8c899a5c83f0d897286550481c91798" + }, + "staged.dependencies": { + "Package": "staged.dependencies", + "Version": "0.2.8", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteUsername": "openpharma", + "RemoteRepo": "staged.dependencies", + "RemoteRef": "main", + "RemoteSha": "ce7c112ba3d75cf48e4dd6310b3140ab0ec3b486", + "Requirements": [ + "desc", + "devtools", + "digest", + "dplyr", + "fs", + "git2r", + "glue", + "httr", + "jsonlite", + "methods", + "rcmdcheck", + "remotes", + "rlang", + "stats", + "tidyr", + "utils", + "withr", + "yaml" + ], + "Hash": "89f2e1d1009601f58f64b7092abcc0d7" + }, + "stringi": { + "Package": "stringi", + "Version": "1.7.6", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "stats", + "tools", + "utils" + ], + "Hash": "bba431031d30789535745a9627ac9271" + }, + "stringr": { + "Package": "stringr", + "Version": "1.4.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "glue", + "magrittr", + "stringi" + ], + "Hash": "0759e6b6c0957edb1311028a49a35e76" + }, + "styler": { + "Package": "styler", + "Version": "1.9.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R.cache", + "cli", + "magrittr", + "purrr", + "rlang", + "rprojroot", + "tools", + "vctrs", + "withr" + ], + "Hash": "ed8c90822b7da46beee603f263a85fe0" + }, + "sys": { + "Package": "sys", + "Version": "3.4", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "b227d13e29222b4574486cfcbde077fa" + }, + "systemfonts": { + "Package": "systemfonts", + "Version": "1.0.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cpp11" + ], + "Hash": "90b28393209827327de889f49935140a" + }, + "testthat": { + "Package": "testthat", + "Version": "3.1.7", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "brio", + "callr", + "cli", + "desc", + "digest", + "ellipsis", + "evaluate", + "jsonlite", + "lifecycle", + "magrittr", + "methods", + "pkgload", + "praise", + "processx", + "ps", + "rlang", + "utils", + "waldo", + "withr" + ], + "Hash": "7eb5fd202a61d2fb78af5869b6c08998" + }, + "textshaping": { + "Package": "textshaping", + "Version": "0.3.6", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cpp11", + "systemfonts" + ], + "Hash": "1ab6223d3670fac7143202cb6a2d43d5" + }, + "tibble": { + "Package": "tibble", + "Version": "3.2.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "fansi", + "lifecycle", + "magrittr", + "methods", + "pillar", + "pkgconfig", + "rlang", + "utils", + "vctrs" + ], + "Hash": "37695ff125982007d42a59ad10982ff2" + }, + "tidyr": { + "Package": "tidyr", + "Version": "1.2.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cpp11", + "dplyr", + "ellipsis", + "glue", + "lifecycle", + "magrittr", + "purrr", + "rlang", + "tibble", + "tidyselect", + "utils", + "vctrs" + ], + "Hash": "d8b95b7fee945d7da6888cf7eb71a49c" + }, + "tidyselect": { + "Package": "tidyselect", + "Version": "1.2.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "glue", + "lifecycle", + "rlang", + "vctrs", + "withr" + ], + "Hash": "79540e5fcd9e0435af547d885f184fd5" + }, + "tinytex": { + "Package": "tinytex", + "Version": "0.37", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "xfun" + ], + "Hash": "a80abeb527a977e4bef21873d29222dd" + }, + "usethis": { + "Package": "usethis", + "Version": "2.1.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "clipr", + "crayon", + "curl", + "desc", + "fs", + "gert", + "gh", + "glue", + "jsonlite", + "lifecycle", + "purrr", + "rappdirs", + "rlang", + "rprojroot", + "rstudioapi", + "stats", + "utils", + "whisker", + "withr", + "yaml" + ], + "Hash": "c499f488e6dd7718accffaee5bc5a79b" + }, + "utf8": { + "Package": "utf8", + "Version": "1.2.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "c9c462b759a5cc844ae25b5942654d13" + }, + "vctrs": { + "Package": "vctrs", + "Version": "0.6.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "glue", + "lifecycle", + "rlang" + ], + "Hash": "7e877404388794361277be95d8445de8" + }, + "waldo": { + "Package": "waldo", + "Version": "0.4.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "cli", + "diffobj", + "fansi", + "glue", + "methods", + "rematch2", + "rlang", + "tibble" + ], + "Hash": "035fba89d0c86e2113120f93301b98ad" + }, + "whisker": { + "Package": "whisker", + "Version": "0.4", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "ca970b96d894e90397ed20637a0c1bbe" + }, + "withr": { + "Package": "withr", + "Version": "2.5.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "grDevices", + "graphics", + "stats" + ], + "Hash": "c0e49a9760983e81e55cdd9be92e7182" + }, + "xfun": { + "Package": "xfun", + "Version": "0.34", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "stats", + "tools" + ], + "Hash": "9eba2411b0b1f879797141bd24df7407" + }, + "xml2": { + "Package": "xml2", + "Version": "1.3.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "40682ed6a969ea5abfd351eb67833adc" + }, + "xmlparsedata": { + "Package": "xmlparsedata", + "Version": "1.0.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "45e4bf3c46476896e821fc0a408fb4fc" + }, + "xopen": { + "Package": "xopen", + "Version": "1.0.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "processx" + ], + "Hash": "6c85f015dee9cc7710ddd20f86881f58" + }, + "xtable": { + "Package": "xtable", + "Version": "1.8-4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "stats", + "utils" + ], + "Hash": "b8acdf8af494d9ec19ccb2481a9b11c2" + }, + "yaml": { + "Package": "yaml", + "Version": "2.3.5", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "458bb38374d73bf83b1bb85e353da200" + }, + "zip": { + "Package": "zip", + "Version": "2.2.0", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "c7eef2996ac270a18c2715c997a727c5" + } + } +} diff --git a/renv/profiles/4.1/renv/.gitignore b/renv/profiles/4.1/renv/.gitignore new file mode 100644 index 00000000..0ec0cbba --- /dev/null +++ b/renv/profiles/4.1/renv/.gitignore @@ -0,0 +1,7 @@ +library/ +local/ +cellar/ +lock/ +python/ +sandbox/ +staging/ diff --git a/renv/profiles/4.1/renv/settings.dcf b/renv/profiles/4.1/renv/settings.dcf new file mode 100644 index 00000000..fd205f80 --- /dev/null +++ b/renv/profiles/4.1/renv/settings.dcf @@ -0,0 +1,10 @@ +bioconductor.version: +external.libraries: +ignored.packages: admiral, admiraldev, admiral.test, admiralci +package.dependency.fields: Imports, Depends, LinkingTo +r.version: +snapshot.type: implicit +use.cache: TRUE +vcs.ignore.cellar: TRUE +vcs.ignore.library: TRUE +vcs.ignore.local: TRUE diff --git a/renv/profiles/4.2/renv.lock b/renv/profiles/4.2/renv.lock new file mode 100644 index 00000000..0bb8fc56 --- /dev/null +++ b/renv/profiles/4.2/renv.lock @@ -0,0 +1,1707 @@ +{ + "R": { + "Version": "4.2.3", + "Repositories": [ + { + "Name": "CRAN", + "URL": "https://cloud.r-project.org" + }, + { + "Name": "RSPM", + "URL": "https://packagemanager.posit.co/cran/2023-03-15" + } + ] + }, + "Packages": { + "DT": { + "Package": "DT", + "Version": "0.27", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "crosstalk", + "htmltools", + "htmlwidgets", + "jquerylib", + "jsonlite", + "magrittr", + "promises" + ], + "Hash": "3444e6ed78763f9f13aaa39f2481eb34" + }, + "R.cache": { + "Package": "R.cache", + "Version": "0.16.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R.methodsS3", + "R.oo", + "R.utils", + "digest", + "utils" + ], + "Hash": "fe539ca3f8efb7410c3ae2cf5fe6c0f8" + }, + "R.methodsS3": { + "Package": "R.methodsS3", + "Version": "1.8.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "utils" + ], + "Hash": "278c286fd6e9e75d0c2e8f731ea445c8" + }, + "R.oo": { + "Package": "R.oo", + "Version": "1.25.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R.methodsS3", + "methods", + "utils" + ], + "Hash": "a0900a114f4f0194cf4aa8cd4a700681" + }, + "R.utils": { + "Package": "R.utils", + "Version": "2.12.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R.methodsS3", + "R.oo", + "methods", + "tools", + "utils" + ], + "Hash": "325f01db13da12c04d8f6e7be36ff514" + }, + "R6": { + "Package": "R6", + "Version": "2.5.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "470851b6d5d0ac559e9d01bb352b4021" + }, + "Rcpp": { + "Package": "Rcpp", + "Version": "1.0.10", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "methods", + "utils" + ], + "Hash": "e749cae40fa9ef469b6050959517453c" + }, + "askpass": { + "Package": "askpass", + "Version": "1.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "sys" + ], + "Hash": "e8a22846fff485f0be3770c2da758713" + }, + "backports": { + "Package": "backports", + "Version": "1.4.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "c39fbec8a30d23e721980b8afb31984c" + }, + "base64enc": { + "Package": "base64enc", + "Version": "0.1-3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "543776ae6848fde2f48ff3816d0628bc" + }, + "brew": { + "Package": "brew", + "Version": "1.0-8", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "d69a786e85775b126bddbee185ae6084" + }, + "brio": { + "Package": "brio", + "Version": "1.1.3", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "976cf154dfb043c012d87cddd8bca363" + }, + "bslib": { + "Package": "bslib", + "Version": "0.4.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "base64enc", + "cachem", + "grDevices", + "htmltools", + "jquerylib", + "jsonlite", + "memoise", + "mime", + "rlang", + "sass" + ], + "Hash": "a7fbf03946ad741129dc81098722fca1" + }, + "cachem": { + "Package": "cachem", + "Version": "1.0.7", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "fastmap", + "rlang" + ], + "Hash": "cda74447c42f529de601fe4d4050daef" + }, + "callr": { + "Package": "callr", + "Version": "3.7.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "processx", + "utils" + ], + "Hash": "9b2191ede20fa29828139b9900922e51" + }, + "cli": { + "Package": "cli", + "Version": "3.6.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "utils" + ], + "Hash": "3177a5a16c243adc199ba33117bd9657" + }, + "clipr": { + "Package": "clipr", + "Version": "0.8.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "utils" + ], + "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" + }, + "codetools": { + "Package": "codetools", + "Version": "0.2-19", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "c089a619a7fae175d149d89164f8c7d8" + }, + "commonmark": { + "Package": "commonmark", + "Version": "1.8.1", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "b6e3e947d1d7ebf3d2bdcea1bde63fe7" + }, + "covr": { + "Package": "covr", + "Version": "3.6.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "crayon", + "digest", + "httr", + "jsonlite", + "methods", + "rex", + "stats", + "utils", + "withr", + "yaml" + ], + "Hash": "a861cee34fbb4b107a73dd414ef56724" + }, + "cpp11": { + "Package": "cpp11", + "Version": "0.4.3", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "ed588261931ee3be2c700d22e94a29ab" + }, + "crayon": { + "Package": "crayon", + "Version": "1.5.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "grDevices", + "methods", + "utils" + ], + "Hash": "e8a1e41acf02548751f45c718d55aa6a" + }, + "credentials": { + "Package": "credentials", + "Version": "1.3.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "askpass", + "curl", + "jsonlite", + "openssl", + "sys" + ], + "Hash": "93762d0a34d78e6a025efdbfb5c6bb41" + }, + "crosstalk": { + "Package": "crosstalk", + "Version": "1.2.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R6", + "htmltools", + "jsonlite", + "lazyeval" + ], + "Hash": "6aa54f69598c32177e920eb3402e8293" + }, + "curl": { + "Package": "curl", + "Version": "5.0.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "e4f97056611e8e6b8b852d13b7400cf1" + }, + "cyclocomp": { + "Package": "cyclocomp", + "Version": "1.1.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "callr", + "crayon", + "desc", + "remotes", + "withr" + ], + "Hash": "53cbed70a2f7472d48fb6aef08442f25" + }, + "desc": { + "Package": "desc", + "Version": "1.4.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "cli", + "rprojroot", + "utils" + ], + "Hash": "6b9602c7ebbe87101a9c8edb6e8b6d21" + }, + "devtools": { + "Package": "devtools", + "Version": "2.4.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "desc", + "ellipsis", + "fs", + "lifecycle", + "memoise", + "miniUI", + "pkgbuild", + "pkgdown", + "pkgload", + "profvis", + "rcmdcheck", + "remotes", + "rlang", + "roxygen2", + "rversions", + "sessioninfo", + "stats", + "testthat", + "tools", + "urlchecker", + "usethis", + "utils", + "withr" + ], + "Hash": "ea5bc8b4a6a01e4f12d98b58329930bb" + }, + "diffdf": { + "Package": "diffdf", + "Version": "1.0.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "tibble" + ], + "Hash": "9ddedef46959baad2080047a1b0117fe" + }, + "diffobj": { + "Package": "diffobj", + "Version": "0.3.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "crayon", + "methods", + "stats", + "tools", + "utils" + ], + "Hash": "bcaa8b95f8d7d01a5dedfd959ce88ab8" + }, + "digest": { + "Package": "digest", + "Version": "0.6.31", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "utils" + ], + "Hash": "8b708f296afd9ae69f450f9640be8990" + }, + "downlit": { + "Package": "downlit", + "Version": "0.4.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "brio", + "desc", + "digest", + "evaluate", + "fansi", + "memoise", + "rlang", + "vctrs", + "withr", + "yaml" + ], + "Hash": "79bf3f66590752ffbba20f8d2da94c7c" + }, + "dplyr": { + "Package": "dplyr", + "Version": "1.1.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "cli", + "generics", + "glue", + "lifecycle", + "magrittr", + "methods", + "pillar", + "rlang", + "tibble", + "tidyselect", + "utils", + "vctrs" + ], + "Hash": "eb5742d256a0d9306d85ea68756d8187" + }, + "ellipsis": { + "Package": "ellipsis", + "Version": "0.3.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "rlang" + ], + "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077" + }, + "evaluate": { + "Package": "evaluate", + "Version": "0.20", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "4b68aa51edd89a0e044a66e75ae3cc6c" + }, + "fansi": { + "Package": "fansi", + "Version": "1.0.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "grDevices", + "utils" + ], + "Hash": "1d9e7ad3c8312a192dea7d3db0274fde" + }, + "fastmap": { + "Package": "fastmap", + "Version": "1.1.1", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "f7736a18de97dea803bde0a2daaafb27" + }, + "fontawesome": { + "Package": "fontawesome", + "Version": "0.5.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "htmltools", + "rlang" + ], + "Hash": "e80750aec5717dedc019ad7ee40e4a7c" + }, + "fs": { + "Package": "fs", + "Version": "1.6.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "f4dcd23b67e33d851d2079f703e8b985" + }, + "generics": { + "Package": "generics", + "Version": "0.1.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "15e9634c0fcd294799e9b2e929ed1b86" + }, + "gert": { + "Package": "gert", + "Version": "1.9.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "askpass", + "credentials", + "openssl", + "rstudioapi", + "sys", + "zip" + ], + "Hash": "9122b3958e749badb5c939f498038b57" + }, + "gh": { + "Package": "gh", + "Version": "1.4.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "gitcreds", + "httr2", + "ini", + "jsonlite", + "rlang" + ], + "Hash": "03533b1c875028233598f848fda44c4c" + }, + "git2r": { + "Package": "git2r", + "Version": "0.31.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "graphics", + "utils" + ], + "Hash": "acb972e0be37f83b9c762d962d75a188" + }, + "gitcreds": { + "Package": "gitcreds", + "Version": "0.1.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "ab08ac61f3e1be454ae21911eb8bc2fe" + }, + "glue": { + "Package": "glue", + "Version": "1.6.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "4f2596dfb05dac67b9dc558e5c6fba2e" + }, + "highr": { + "Package": "highr", + "Version": "0.10", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "xfun" + ], + "Hash": "06230136b2d2b9ba5805e1963fa6e890" + }, + "hms": { + "Package": "hms", + "Version": "1.1.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "ellipsis", + "lifecycle", + "methods", + "pkgconfig", + "rlang", + "vctrs" + ], + "Hash": "41100392191e1244b887878b533eea91" + }, + "htmltools": { + "Package": "htmltools", + "Version": "0.5.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "base64enc", + "digest", + "ellipsis", + "fastmap", + "grDevices", + "rlang", + "utils" + ], + "Hash": "9d27e99cc90bd701c0a7a63e5923f9b7" + }, + "htmlwidgets": { + "Package": "htmlwidgets", + "Version": "1.6.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "grDevices", + "htmltools", + "jsonlite", + "knitr", + "rmarkdown", + "yaml" + ], + "Hash": "b677ee5954471eaa974c0d099a343a1a" + }, + "httpuv": { + "Package": "httpuv", + "Version": "1.6.9", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "Rcpp", + "later", + "promises", + "utils" + ], + "Hash": "1046aa31a57eae8b357267a56a0b6d8b" + }, + "httr": { + "Package": "httr", + "Version": "1.4.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "curl", + "jsonlite", + "mime", + "openssl" + ], + "Hash": "f6844033201269bec3ca0097bc6c97b3" + }, + "httr2": { + "Package": "httr2", + "Version": "0.2.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "cli", + "curl", + "glue", + "magrittr", + "openssl", + "rappdirs", + "rlang", + "withr" + ], + "Hash": "5c09fe33064978ede54de42309c8b532" + }, + "hunspell": { + "Package": "hunspell", + "Version": "3.0.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "Rcpp", + "digest" + ], + "Hash": "656219b6f3f605499d7cdbe208656639" + }, + "ini": { + "Package": "ini", + "Version": "0.3.1", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "6154ec2223172bce8162d4153cda21f7" + }, + "jquerylib": { + "Package": "jquerylib", + "Version": "0.1.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "htmltools" + ], + "Hash": "5aab57a3bd297eee1c1d862735972182" + }, + "jsonlite": { + "Package": "jsonlite", + "Version": "1.8.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "methods" + ], + "Hash": "a4269a09a9b865579b2635c77e572374" + }, + "knitr": { + "Package": "knitr", + "Version": "1.42", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "evaluate", + "highr", + "methods", + "tools", + "xfun", + "yaml" + ], + "Hash": "8329a9bcc82943c8069104d4be3ee22d" + }, + "later": { + "Package": "later", + "Version": "1.3.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "Rcpp", + "rlang" + ], + "Hash": "7e7b457d7766bc47f2a5f21cc2984f8e" + }, + "lazyeval": { + "Package": "lazyeval", + "Version": "0.2.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "d908914ae53b04d4c0c0fd72ecc35370" + }, + "lifecycle": { + "Package": "lifecycle", + "Version": "1.0.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "glue", + "rlang" + ], + "Hash": "001cecbeac1cff9301bdc3775ee46a86" + }, + "lintr": { + "Package": "lintr", + "Version": "3.0.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "backports", + "codetools", + "crayon", + "cyclocomp", + "digest", + "glue", + "jsonlite", + "knitr", + "rex", + "stats", + "utils", + "xml2", + "xmlparsedata" + ], + "Hash": "b21ebd652d940f099915221f3328ab7b" + }, + "lubridate": { + "Package": "lubridate", + "Version": "1.9.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "generics", + "methods", + "timechange" + ], + "Hash": "e25f18436e3efd42c7c590a1c4c15390" + }, + "magrittr": { + "Package": "magrittr", + "Version": "2.0.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "7ce2733a9826b3aeb1775d56fd305472" + }, + "memoise": { + "Package": "memoise", + "Version": "2.0.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "cachem", + "rlang" + ], + "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" + }, + "mime": { + "Package": "mime", + "Version": "0.12", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "tools" + ], + "Hash": "18e9c28c1d3ca1560ce30658b22ce104" + }, + "miniUI": { + "Package": "miniUI", + "Version": "0.1.1.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "htmltools", + "shiny", + "utils" + ], + "Hash": "fec5f52652d60615fdb3957b3d74324a" + }, + "openssl": { + "Package": "openssl", + "Version": "2.0.6", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "askpass" + ], + "Hash": "0f7cd2962e3044bb940cca4f4b5cecbe" + }, + "pillar": { + "Package": "pillar", + "Version": "1.9.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "cli", + "fansi", + "glue", + "lifecycle", + "rlang", + "utf8", + "utils", + "vctrs" + ], + "Hash": "15da5a8412f317beeee6175fbc76f4bb" + }, + "pkgbuild": { + "Package": "pkgbuild", + "Version": "1.4.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "callr", + "cli", + "crayon", + "desc", + "prettyunits", + "processx", + "rprojroot", + "withr" + ], + "Hash": "d6c3008d79653a0f267703288230105e" + }, + "pkgconfig": { + "Package": "pkgconfig", + "Version": "2.0.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "utils" + ], + "Hash": "01f28d4278f15c76cddbea05899c5d6f" + }, + "pkgdown": { + "Package": "pkgdown", + "Version": "2.0.7", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "bslib", + "callr", + "cli", + "desc", + "digest", + "downlit", + "fs", + "httr", + "jsonlite", + "magrittr", + "memoise", + "purrr", + "ragg", + "rlang", + "rmarkdown", + "tibble", + "whisker", + "withr", + "xml2", + "yaml" + ], + "Hash": "16fa15449c930bf3a7761d3c68f8abf9" + }, + "pkgload": { + "Package": "pkgload", + "Version": "1.3.2", + "Source": "Repository", + "Repository": "RSPM", + "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" + }, + "prettyunits": { + "Package": "prettyunits", + "Version": "1.1.1", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "95ef9167b75dde9d2ccc3c7528393e7e" + }, + "processx": { + "Package": "processx", + "Version": "3.8.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "ps", + "utils" + ], + "Hash": "a33ee2d9bf07564efb888ad98410da84" + }, + "profvis": { + "Package": "profvis", + "Version": "0.3.7", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "htmlwidgets", + "stringr" + ], + "Hash": "e9d21e79848e02e524bea6f5bd53e7e4" + }, + "promises": { + "Package": "promises", + "Version": "1.2.0.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R6", + "Rcpp", + "later", + "magrittr", + "rlang", + "stats" + ], + "Hash": "4ab2c43adb4d4699cf3690acd378d75d" + }, + "ps": { + "Package": "ps", + "Version": "1.7.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "utils" + ], + "Hash": "68dd03d98a5efd1eb3012436de45ba83" + }, + "purrr": { + "Package": "purrr", + "Version": "1.0.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "lifecycle", + "magrittr", + "rlang", + "vctrs" + ], + "Hash": "d71c815267c640f17ddbf7f16144b4bb" + }, + "ragg": { + "Package": "ragg", + "Version": "1.2.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "systemfonts", + "textshaping" + ], + "Hash": "690bc058ea2b1b8a407d3cfe3dce3ef9" + }, + "rappdirs": { + "Package": "rappdirs", + "Version": "0.3.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "5e3c5dc0b071b21fa128676560dbe94d" + }, + "rcmdcheck": { + "Package": "rcmdcheck", + "Version": "1.4.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R6", + "callr", + "cli", + "curl", + "desc", + "digest", + "pkgbuild", + "prettyunits", + "rprojroot", + "sessioninfo", + "utils", + "withr", + "xopen" + ], + "Hash": "8f25ebe2ec38b1f2aef3b0d2ef76f6c4" + }, + "rematch2": { + "Package": "rematch2", + "Version": "2.1.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "tibble" + ], + "Hash": "76c9e04c712a05848ae7a23d2f170a40" + }, + "remotes": { + "Package": "remotes", + "Version": "2.4.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods", + "stats", + "tools", + "utils" + ], + "Hash": "227045be9aee47e6dda9bb38ac870d67" + }, + "renv": { + "Package": "renv", + "Version": "0.17.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "utils" + ], + "Hash": "ce3065fc1a0b64a859f55ac3998d6927" + }, + "rex": { + "Package": "rex", + "Version": "1.2.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "lazyeval" + ], + "Hash": "ae34cd56890607370665bee5bd17812f" + }, + "rlang": { + "Package": "rlang", + "Version": "1.1.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "utils" + ], + "Hash": "dc079ccd156cde8647360f473c1fa718" + }, + "rmarkdown": { + "Package": "rmarkdown", + "Version": "2.20", + "Source": "Repository", + "Repository": "RSPM", + "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": "CRAN", + "Requirements": [ + "R", + "R6", + "brew", + "cli", + "commonmark", + "cpp11", + "desc", + "knitr", + "methods", + "pkgload", + "purrr", + "rlang", + "stringi", + "stringr", + "utils", + "withr", + "xml2" + ], + "Hash": "7b153c746193b143c14baa072bae4e27" + }, + "rprojroot": { + "Package": "rprojroot", + "Version": "2.0.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "1de7ab598047a87bba48434ba35d497d" + }, + "rstudioapi": { + "Package": "rstudioapi", + "Version": "0.14", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "690bd2acc42a9166ce34845884459320" + }, + "rversions": { + "Package": "rversions", + "Version": "2.1.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "curl", + "utils", + "xml2" + ], + "Hash": "a9881dfed103e83f9de151dc17002cd1" + }, + "sass": { + "Package": "sass", + "Version": "0.4.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R6", + "fs", + "htmltools", + "rappdirs", + "rlang" + ], + "Hash": "2bb4371a4c80115518261866eab6ab11" + }, + "sessioninfo": { + "Package": "sessioninfo", + "Version": "1.2.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "tools", + "utils" + ], + "Hash": "3f9796a8d0a0e8c6eb49a4b029359d1f" + }, + "shiny": { + "Package": "shiny", + "Version": "1.7.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "bslib", + "cachem", + "commonmark", + "crayon", + "ellipsis", + "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", + "Requirements": [ + "R" + ], + "Hash": "5f5a7629f956619d519205ec475fe647" + }, + "spelling": { + "Package": "spelling", + "Version": "2.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "commonmark", + "hunspell", + "knitr", + "xml2" + ], + "Hash": "b8c899a5c83f0d897286550481c91798" + }, + "staged.dependencies": { + "Package": "staged.dependencies", + "Version": "0.2.8", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteUsername": "openpharma", + "RemoteRepo": "staged.dependencies", + "RemoteRef": "main", + "RemoteSha": "ce7c112ba3d75cf48e4dd6310b3140ab0ec3b486", + "Requirements": [ + "desc", + "devtools", + "digest", + "dplyr", + "fs", + "git2r", + "glue", + "httr", + "jsonlite", + "methods", + "rcmdcheck", + "remotes", + "rlang", + "stats", + "tidyr", + "utils", + "withr", + "yaml" + ], + "Hash": "89f2e1d1009601f58f64b7092abcc0d7" + }, + "stringi": { + "Package": "stringi", + "Version": "1.7.12", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "stats", + "tools", + "utils" + ], + "Hash": "ca8bd84263c77310739d2cf64d84d7c9" + }, + "stringr": { + "Package": "stringr", + "Version": "1.5.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "glue", + "lifecycle", + "magrittr", + "rlang", + "stringi", + "vctrs" + ], + "Hash": "671a4d384ae9d32fc47a14e98bfa3dc8" + }, + "styler": { + "Package": "styler", + "Version": "1.9.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R.cache", + "cli", + "magrittr", + "purrr", + "rlang", + "rprojroot", + "tools", + "vctrs", + "withr" + ], + "Hash": "ed8c90822b7da46beee603f263a85fe0" + }, + "sys": { + "Package": "sys", + "Version": "3.4.1", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "34c16f1ef796057bfa06d3f4ff818a5d" + }, + "systemfonts": { + "Package": "systemfonts", + "Version": "1.0.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cpp11" + ], + "Hash": "90b28393209827327de889f49935140a" + }, + "testthat": { + "Package": "testthat", + "Version": "3.1.7", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "brio", + "callr", + "cli", + "desc", + "digest", + "ellipsis", + "evaluate", + "jsonlite", + "lifecycle", + "magrittr", + "methods", + "pkgload", + "praise", + "processx", + "ps", + "rlang", + "utils", + "waldo", + "withr" + ], + "Hash": "7eb5fd202a61d2fb78af5869b6c08998" + }, + "textshaping": { + "Package": "textshaping", + "Version": "0.3.6", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cpp11", + "systemfonts" + ], + "Hash": "1ab6223d3670fac7143202cb6a2d43d5" + }, + "tibble": { + "Package": "tibble", + "Version": "3.2.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "fansi", + "lifecycle", + "magrittr", + "methods", + "pillar", + "pkgconfig", + "rlang", + "utils", + "vctrs" + ], + "Hash": "37695ff125982007d42a59ad10982ff2" + }, + "tidyr": { + "Package": "tidyr", + "Version": "1.3.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "cpp11", + "dplyr", + "glue", + "lifecycle", + "magrittr", + "purrr", + "rlang", + "stringr", + "tibble", + "tidyselect", + "utils", + "vctrs" + ], + "Hash": "e47debdc7ce599b070c8e78e8ac0cfcf" + }, + "tidyselect": { + "Package": "tidyselect", + "Version": "1.2.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "glue", + "lifecycle", + "rlang", + "vctrs", + "withr" + ], + "Hash": "79540e5fcd9e0435af547d885f184fd5" + }, + "timechange": { + "Package": "timechange", + "Version": "0.2.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cpp11" + ], + "Hash": "8548b44f79a35ba1791308b61e6012d7" + }, + "tinytex": { + "Package": "tinytex", + "Version": "0.44", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "xfun" + ], + "Hash": "c0f007e2eeed7722ce13d42b84a22e07" + }, + "urlchecker": { + "Package": "urlchecker", + "Version": "1.0.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "curl", + "tools", + "xml2" + ], + "Hash": "409328b8e1253c8d729a7836fe7f7a16" + }, + "usethis": { + "Package": "usethis", + "Version": "2.1.6", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "clipr", + "crayon", + "curl", + "desc", + "fs", + "gert", + "gh", + "glue", + "jsonlite", + "lifecycle", + "purrr", + "rappdirs", + "rlang", + "rprojroot", + "rstudioapi", + "stats", + "utils", + "whisker", + "withr", + "yaml" + ], + "Hash": "a67a22c201832b12c036cc059f1d137d" + }, + "utf8": { + "Package": "utf8", + "Version": "1.2.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "1fe17157424bb09c48a8b3b550c753bc" + }, + "vctrs": { + "Package": "vctrs", + "Version": "0.6.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "glue", + "lifecycle", + "rlang" + ], + "Hash": "7e877404388794361277be95d8445de8" + }, + "waldo": { + "Package": "waldo", + "Version": "0.4.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "cli", + "diffobj", + "fansi", + "glue", + "methods", + "rematch2", + "rlang", + "tibble" + ], + "Hash": "035fba89d0c86e2113120f93301b98ad" + }, + "whisker": { + "Package": "whisker", + "Version": "0.4.1", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "c6abfa47a46d281a7d5159d0a8891e88" + }, + "withr": { + "Package": "withr", + "Version": "2.5.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "grDevices", + "graphics", + "stats" + ], + "Hash": "c0e49a9760983e81e55cdd9be92e7182" + }, + "xfun": { + "Package": "xfun", + "Version": "0.37", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "stats", + "tools" + ], + "Hash": "a6860e1400a8fd1ddb6d9b4230cc34ab" + }, + "xml2": { + "Package": "xml2", + "Version": "1.3.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "40682ed6a969ea5abfd351eb67833adc" + }, + "xmlparsedata": { + "Package": "xmlparsedata", + "Version": "1.0.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "45e4bf3c46476896e821fc0a408fb4fc" + }, + "xopen": { + "Package": "xopen", + "Version": "1.0.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "processx" + ], + "Hash": "6c85f015dee9cc7710ddd20f86881f58" + }, + "xtable": { + "Package": "xtable", + "Version": "1.8-4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "stats", + "utils" + ], + "Hash": "b8acdf8af494d9ec19ccb2481a9b11c2" + }, + "yaml": { + "Package": "yaml", + "Version": "2.3.7", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "0d0056cc5383fbc240ccd0cb584bf436" + }, + "zip": { + "Package": "zip", + "Version": "2.2.2", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "c42bfcec3fa6a0cce17ce1f8bc684f88" + } + } +} diff --git a/renv/profiles/4.2/renv/.gitignore b/renv/profiles/4.2/renv/.gitignore new file mode 100644 index 00000000..0ec0cbba --- /dev/null +++ b/renv/profiles/4.2/renv/.gitignore @@ -0,0 +1,7 @@ +library/ +local/ +cellar/ +lock/ +python/ +sandbox/ +staging/ diff --git a/renv/profiles/4.2/renv/settings.dcf b/renv/profiles/4.2/renv/settings.dcf new file mode 100644 index 00000000..fd205f80 --- /dev/null +++ b/renv/profiles/4.2/renv/settings.dcf @@ -0,0 +1,10 @@ +bioconductor.version: +external.libraries: +ignored.packages: admiral, admiraldev, admiral.test, admiralci +package.dependency.fields: Imports, Depends, LinkingTo +r.version: +snapshot.type: implicit +use.cache: TRUE +vcs.ignore.cellar: TRUE +vcs.ignore.library: TRUE +vcs.ignore.local: TRUE diff --git a/renv/profiles/4.3/renv.lock b/renv/profiles/4.3/renv.lock new file mode 100644 index 00000000..b875a5b8 --- /dev/null +++ b/renv/profiles/4.3/renv.lock @@ -0,0 +1,1707 @@ +{ + "R": { + "Version": "4.3.0", + "Repositories": [ + { + "Name": "CRAN", + "URL": "https://cloud.r-project.org" + }, + { + "Name": "RSPM", + "URL": "https://packagemanager.posit.co/cran/2023-04-20" + } + ] + }, + "Packages": { + "DT": { + "Package": "DT", + "Version": "0.27", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "crosstalk", + "htmltools", + "htmlwidgets", + "jquerylib", + "jsonlite", + "magrittr", + "promises" + ], + "Hash": "3444e6ed78763f9f13aaa39f2481eb34" + }, + "R.cache": { + "Package": "R.cache", + "Version": "0.16.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R.methodsS3", + "R.oo", + "R.utils", + "digest", + "utils" + ], + "Hash": "fe539ca3f8efb7410c3ae2cf5fe6c0f8" + }, + "R.methodsS3": { + "Package": "R.methodsS3", + "Version": "1.8.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "utils" + ], + "Hash": "278c286fd6e9e75d0c2e8f731ea445c8" + }, + "R.oo": { + "Package": "R.oo", + "Version": "1.25.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R.methodsS3", + "methods", + "utils" + ], + "Hash": "a0900a114f4f0194cf4aa8cd4a700681" + }, + "R.utils": { + "Package": "R.utils", + "Version": "2.12.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R.methodsS3", + "R.oo", + "methods", + "tools", + "utils" + ], + "Hash": "325f01db13da12c04d8f6e7be36ff514" + }, + "R6": { + "Package": "R6", + "Version": "2.5.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "470851b6d5d0ac559e9d01bb352b4021" + }, + "Rcpp": { + "Package": "Rcpp", + "Version": "1.0.10", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "methods", + "utils" + ], + "Hash": "e749cae40fa9ef469b6050959517453c" + }, + "askpass": { + "Package": "askpass", + "Version": "1.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "sys" + ], + "Hash": "e8a22846fff485f0be3770c2da758713" + }, + "backports": { + "Package": "backports", + "Version": "1.4.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "c39fbec8a30d23e721980b8afb31984c" + }, + "base64enc": { + "Package": "base64enc", + "Version": "0.1-3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "543776ae6848fde2f48ff3816d0628bc" + }, + "brew": { + "Package": "brew", + "Version": "1.0-8", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "d69a786e85775b126bddbee185ae6084" + }, + "brio": { + "Package": "brio", + "Version": "1.1.3", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "976cf154dfb043c012d87cddd8bca363" + }, + "bslib": { + "Package": "bslib", + "Version": "0.4.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "base64enc", + "cachem", + "grDevices", + "htmltools", + "jquerylib", + "jsonlite", + "memoise", + "mime", + "rlang", + "sass" + ], + "Hash": "a7fbf03946ad741129dc81098722fca1" + }, + "cachem": { + "Package": "cachem", + "Version": "1.0.7", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "fastmap", + "rlang" + ], + "Hash": "cda74447c42f529de601fe4d4050daef" + }, + "callr": { + "Package": "callr", + "Version": "3.7.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "processx", + "utils" + ], + "Hash": "9b2191ede20fa29828139b9900922e51" + }, + "cli": { + "Package": "cli", + "Version": "3.6.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "utils" + ], + "Hash": "89e6d8219950eac806ae0c489052048a" + }, + "clipr": { + "Package": "clipr", + "Version": "0.8.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "utils" + ], + "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" + }, + "codetools": { + "Package": "codetools", + "Version": "0.2-19", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "c089a619a7fae175d149d89164f8c7d8" + }, + "commonmark": { + "Package": "commonmark", + "Version": "1.9.0", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "d691c61bff84bd63c383874d2d0c3307" + }, + "covr": { + "Package": "covr", + "Version": "3.6.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "crayon", + "digest", + "httr", + "jsonlite", + "methods", + "rex", + "stats", + "utils", + "withr", + "yaml" + ], + "Hash": "a0d8f9a55add5311d48227b6f7f38e34" + }, + "cpp11": { + "Package": "cpp11", + "Version": "0.4.3", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "ed588261931ee3be2c700d22e94a29ab" + }, + "crayon": { + "Package": "crayon", + "Version": "1.5.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "grDevices", + "methods", + "utils" + ], + "Hash": "e8a1e41acf02548751f45c718d55aa6a" + }, + "credentials": { + "Package": "credentials", + "Version": "1.3.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "askpass", + "curl", + "jsonlite", + "openssl", + "sys" + ], + "Hash": "93762d0a34d78e6a025efdbfb5c6bb41" + }, + "crosstalk": { + "Package": "crosstalk", + "Version": "1.2.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R6", + "htmltools", + "jsonlite", + "lazyeval" + ], + "Hash": "6aa54f69598c32177e920eb3402e8293" + }, + "curl": { + "Package": "curl", + "Version": "5.0.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "e4f97056611e8e6b8b852d13b7400cf1" + }, + "cyclocomp": { + "Package": "cyclocomp", + "Version": "1.1.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "callr", + "crayon", + "desc", + "remotes", + "withr" + ], + "Hash": "53cbed70a2f7472d48fb6aef08442f25" + }, + "desc": { + "Package": "desc", + "Version": "1.4.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "cli", + "rprojroot", + "utils" + ], + "Hash": "6b9602c7ebbe87101a9c8edb6e8b6d21" + }, + "devtools": { + "Package": "devtools", + "Version": "2.4.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "desc", + "ellipsis", + "fs", + "lifecycle", + "memoise", + "miniUI", + "pkgbuild", + "pkgdown", + "pkgload", + "profvis", + "rcmdcheck", + "remotes", + "rlang", + "roxygen2", + "rversions", + "sessioninfo", + "stats", + "testthat", + "tools", + "urlchecker", + "usethis", + "utils", + "withr" + ], + "Hash": "ea5bc8b4a6a01e4f12d98b58329930bb" + }, + "diffdf": { + "Package": "diffdf", + "Version": "1.0.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "tibble" + ], + "Hash": "9ddedef46959baad2080047a1b0117fe" + }, + "diffobj": { + "Package": "diffobj", + "Version": "0.3.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "crayon", + "methods", + "stats", + "tools", + "utils" + ], + "Hash": "bcaa8b95f8d7d01a5dedfd959ce88ab8" + }, + "digest": { + "Package": "digest", + "Version": "0.6.31", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "utils" + ], + "Hash": "8b708f296afd9ae69f450f9640be8990" + }, + "downlit": { + "Package": "downlit", + "Version": "0.4.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "brio", + "desc", + "digest", + "evaluate", + "fansi", + "memoise", + "rlang", + "vctrs", + "withr", + "yaml" + ], + "Hash": "79bf3f66590752ffbba20f8d2da94c7c" + }, + "dplyr": { + "Package": "dplyr", + "Version": "1.1.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "cli", + "generics", + "glue", + "lifecycle", + "magrittr", + "methods", + "pillar", + "rlang", + "tibble", + "tidyselect", + "utils", + "vctrs" + ], + "Hash": "eb5742d256a0d9306d85ea68756d8187" + }, + "ellipsis": { + "Package": "ellipsis", + "Version": "0.3.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "rlang" + ], + "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077" + }, + "evaluate": { + "Package": "evaluate", + "Version": "0.20", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "4b68aa51edd89a0e044a66e75ae3cc6c" + }, + "fansi": { + "Package": "fansi", + "Version": "1.0.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "grDevices", + "utils" + ], + "Hash": "1d9e7ad3c8312a192dea7d3db0274fde" + }, + "fastmap": { + "Package": "fastmap", + "Version": "1.1.1", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "f7736a18de97dea803bde0a2daaafb27" + }, + "fontawesome": { + "Package": "fontawesome", + "Version": "0.5.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "htmltools", + "rlang" + ], + "Hash": "1e22b8cabbad1eae951a75e9f8b52378" + }, + "fs": { + "Package": "fs", + "Version": "1.6.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "f4dcd23b67e33d851d2079f703e8b985" + }, + "generics": { + "Package": "generics", + "Version": "0.1.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "15e9634c0fcd294799e9b2e929ed1b86" + }, + "gert": { + "Package": "gert", + "Version": "1.9.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "askpass", + "credentials", + "openssl", + "rstudioapi", + "sys", + "zip" + ], + "Hash": "9122b3958e749badb5c939f498038b57" + }, + "gh": { + "Package": "gh", + "Version": "1.4.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "gitcreds", + "httr2", + "ini", + "jsonlite", + "rlang" + ], + "Hash": "03533b1c875028233598f848fda44c4c" + }, + "git2r": { + "Package": "git2r", + "Version": "0.32.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "graphics", + "utils" + ], + "Hash": "1882d7a76fd8c14b2322865f74c9a348" + }, + "gitcreds": { + "Package": "gitcreds", + "Version": "0.1.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "ab08ac61f3e1be454ae21911eb8bc2fe" + }, + "glue": { + "Package": "glue", + "Version": "1.6.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "4f2596dfb05dac67b9dc558e5c6fba2e" + }, + "highr": { + "Package": "highr", + "Version": "0.10", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "xfun" + ], + "Hash": "06230136b2d2b9ba5805e1963fa6e890" + }, + "hms": { + "Package": "hms", + "Version": "1.1.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "lifecycle", + "methods", + "pkgconfig", + "rlang", + "vctrs" + ], + "Hash": "b59377caa7ed00fa41808342002138f9" + }, + "htmltools": { + "Package": "htmltools", + "Version": "0.5.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "base64enc", + "digest", + "ellipsis", + "fastmap", + "grDevices", + "rlang", + "utils" + ], + "Hash": "ba0240784ad50a62165058a27459304a" + }, + "htmlwidgets": { + "Package": "htmlwidgets", + "Version": "1.6.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "grDevices", + "htmltools", + "jsonlite", + "knitr", + "rmarkdown", + "yaml" + ], + "Hash": "a865aa85bcb2697f47505bfd70422471" + }, + "httpuv": { + "Package": "httpuv", + "Version": "1.6.9", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "Rcpp", + "later", + "promises", + "utils" + ], + "Hash": "1046aa31a57eae8b357267a56a0b6d8b" + }, + "httr": { + "Package": "httr", + "Version": "1.4.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "curl", + "jsonlite", + "mime", + "openssl" + ], + "Hash": "f6844033201269bec3ca0097bc6c97b3" + }, + "httr2": { + "Package": "httr2", + "Version": "0.2.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "cli", + "curl", + "glue", + "magrittr", + "openssl", + "rappdirs", + "rlang", + "withr" + ], + "Hash": "5c09fe33064978ede54de42309c8b532" + }, + "hunspell": { + "Package": "hunspell", + "Version": "3.0.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "Rcpp", + "digest" + ], + "Hash": "656219b6f3f605499d7cdbe208656639" + }, + "ini": { + "Package": "ini", + "Version": "0.3.1", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "6154ec2223172bce8162d4153cda21f7" + }, + "jquerylib": { + "Package": "jquerylib", + "Version": "0.1.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "htmltools" + ], + "Hash": "5aab57a3bd297eee1c1d862735972182" + }, + "jsonlite": { + "Package": "jsonlite", + "Version": "1.8.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "methods" + ], + "Hash": "a4269a09a9b865579b2635c77e572374" + }, + "knitr": { + "Package": "knitr", + "Version": "1.42", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "evaluate", + "highr", + "methods", + "tools", + "xfun", + "yaml" + ], + "Hash": "8329a9bcc82943c8069104d4be3ee22d" + }, + "later": { + "Package": "later", + "Version": "1.3.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "Rcpp", + "rlang" + ], + "Hash": "7e7b457d7766bc47f2a5f21cc2984f8e" + }, + "lazyeval": { + "Package": "lazyeval", + "Version": "0.2.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "d908914ae53b04d4c0c0fd72ecc35370" + }, + "lifecycle": { + "Package": "lifecycle", + "Version": "1.0.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "glue", + "rlang" + ], + "Hash": "001cecbeac1cff9301bdc3775ee46a86" + }, + "lintr": { + "Package": "lintr", + "Version": "3.0.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "backports", + "codetools", + "crayon", + "cyclocomp", + "digest", + "glue", + "jsonlite", + "knitr", + "rex", + "stats", + "utils", + "xml2", + "xmlparsedata" + ], + "Hash": "b21ebd652d940f099915221f3328ab7b" + }, + "lubridate": { + "Package": "lubridate", + "Version": "1.9.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "generics", + "methods", + "timechange" + ], + "Hash": "e25f18436e3efd42c7c590a1c4c15390" + }, + "magrittr": { + "Package": "magrittr", + "Version": "2.0.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "7ce2733a9826b3aeb1775d56fd305472" + }, + "memoise": { + "Package": "memoise", + "Version": "2.0.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "cachem", + "rlang" + ], + "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" + }, + "mime": { + "Package": "mime", + "Version": "0.12", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "tools" + ], + "Hash": "18e9c28c1d3ca1560ce30658b22ce104" + }, + "miniUI": { + "Package": "miniUI", + "Version": "0.1.1.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "htmltools", + "shiny", + "utils" + ], + "Hash": "fec5f52652d60615fdb3957b3d74324a" + }, + "openssl": { + "Package": "openssl", + "Version": "2.0.6", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "askpass" + ], + "Hash": "0f7cd2962e3044bb940cca4f4b5cecbe" + }, + "pillar": { + "Package": "pillar", + "Version": "1.9.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "cli", + "fansi", + "glue", + "lifecycle", + "rlang", + "utf8", + "utils", + "vctrs" + ], + "Hash": "15da5a8412f317beeee6175fbc76f4bb" + }, + "pkgbuild": { + "Package": "pkgbuild", + "Version": "1.4.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "callr", + "cli", + "crayon", + "desc", + "prettyunits", + "processx", + "rprojroot", + "withr" + ], + "Hash": "d6c3008d79653a0f267703288230105e" + }, + "pkgconfig": { + "Package": "pkgconfig", + "Version": "2.0.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "utils" + ], + "Hash": "01f28d4278f15c76cddbea05899c5d6f" + }, + "pkgdown": { + "Package": "pkgdown", + "Version": "2.0.7", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "bslib", + "callr", + "cli", + "desc", + "digest", + "downlit", + "fs", + "httr", + "jsonlite", + "magrittr", + "memoise", + "purrr", + "ragg", + "rlang", + "rmarkdown", + "tibble", + "whisker", + "withr", + "xml2", + "yaml" + ], + "Hash": "16fa15449c930bf3a7761d3c68f8abf9" + }, + "pkgload": { + "Package": "pkgload", + "Version": "1.3.2", + "Source": "Repository", + "Repository": "RSPM", + "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" + }, + "prettyunits": { + "Package": "prettyunits", + "Version": "1.1.1", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "95ef9167b75dde9d2ccc3c7528393e7e" + }, + "processx": { + "Package": "processx", + "Version": "3.8.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "ps", + "utils" + ], + "Hash": "d75b4059d781336efba24021915902b4" + }, + "profvis": { + "Package": "profvis", + "Version": "0.3.7", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "htmlwidgets", + "stringr" + ], + "Hash": "e9d21e79848e02e524bea6f5bd53e7e4" + }, + "promises": { + "Package": "promises", + "Version": "1.2.0.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R6", + "Rcpp", + "later", + "magrittr", + "rlang", + "stats" + ], + "Hash": "4ab2c43adb4d4699cf3690acd378d75d" + }, + "ps": { + "Package": "ps", + "Version": "1.7.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "utils" + ], + "Hash": "709d852d33178db54b17c722e5b1e594" + }, + "purrr": { + "Package": "purrr", + "Version": "1.0.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "lifecycle", + "magrittr", + "rlang", + "vctrs" + ], + "Hash": "d71c815267c640f17ddbf7f16144b4bb" + }, + "ragg": { + "Package": "ragg", + "Version": "1.2.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "systemfonts", + "textshaping" + ], + "Hash": "690bc058ea2b1b8a407d3cfe3dce3ef9" + }, + "rappdirs": { + "Package": "rappdirs", + "Version": "0.3.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "5e3c5dc0b071b21fa128676560dbe94d" + }, + "rcmdcheck": { + "Package": "rcmdcheck", + "Version": "1.4.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R6", + "callr", + "cli", + "curl", + "desc", + "digest", + "pkgbuild", + "prettyunits", + "rprojroot", + "sessioninfo", + "utils", + "withr", + "xopen" + ], + "Hash": "8f25ebe2ec38b1f2aef3b0d2ef76f6c4" + }, + "rematch2": { + "Package": "rematch2", + "Version": "2.1.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "tibble" + ], + "Hash": "76c9e04c712a05848ae7a23d2f170a40" + }, + "remotes": { + "Package": "remotes", + "Version": "2.4.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods", + "stats", + "tools", + "utils" + ], + "Hash": "227045be9aee47e6dda9bb38ac870d67" + }, + "renv": { + "Package": "renv", + "Version": "0.17.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "utils" + ], + "Hash": "ce3065fc1a0b64a859f55ac3998d6927" + }, + "rex": { + "Package": "rex", + "Version": "1.2.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "lazyeval" + ], + "Hash": "ae34cd56890607370665bee5bd17812f" + }, + "rlang": { + "Package": "rlang", + "Version": "1.1.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "utils" + ], + "Hash": "dc079ccd156cde8647360f473c1fa718" + }, + "rmarkdown": { + "Package": "rmarkdown", + "Version": "2.21", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "bslib", + "evaluate", + "fontawesome", + "htmltools", + "jquerylib", + "jsonlite", + "knitr", + "methods", + "stringr", + "tinytex", + "tools", + "utils", + "xfun", + "yaml" + ], + "Hash": "493df4ae51e2e984952ea4d5c75786a3" + }, + "roxygen2": { + "Package": "roxygen2", + "Version": "7.2.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "brew", + "cli", + "commonmark", + "cpp11", + "desc", + "knitr", + "methods", + "pkgload", + "purrr", + "rlang", + "stringi", + "stringr", + "utils", + "withr", + "xml2" + ], + "Hash": "7b153c746193b143c14baa072bae4e27" + }, + "rprojroot": { + "Package": "rprojroot", + "Version": "2.0.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "1de7ab598047a87bba48434ba35d497d" + }, + "rstudioapi": { + "Package": "rstudioapi", + "Version": "0.14", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "690bd2acc42a9166ce34845884459320" + }, + "rversions": { + "Package": "rversions", + "Version": "2.1.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "curl", + "utils", + "xml2" + ], + "Hash": "a9881dfed103e83f9de151dc17002cd1" + }, + "sass": { + "Package": "sass", + "Version": "0.4.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R6", + "fs", + "htmltools", + "rappdirs", + "rlang" + ], + "Hash": "2bb4371a4c80115518261866eab6ab11" + }, + "sessioninfo": { + "Package": "sessioninfo", + "Version": "1.2.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "tools", + "utils" + ], + "Hash": "3f9796a8d0a0e8c6eb49a4b029359d1f" + }, + "shiny": { + "Package": "shiny", + "Version": "1.7.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "bslib", + "cachem", + "commonmark", + "crayon", + "ellipsis", + "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", + "Requirements": [ + "R" + ], + "Hash": "5f5a7629f956619d519205ec475fe647" + }, + "spelling": { + "Package": "spelling", + "Version": "2.2.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "commonmark", + "hunspell", + "knitr", + "xml2" + ], + "Hash": "8ed9f010f7caeb8586523088b7f23dcd" + }, + "staged.dependencies": { + "Package": "staged.dependencies", + "Version": "0.2.8", + "Source": "GitHub", + "RemoteType": "github", + "RemoteHost": "api.github.com", + "RemoteUsername": "openpharma", + "RemoteRepo": "staged.dependencies", + "RemoteRef": "main", + "RemoteSha": "ce7c112ba3d75cf48e4dd6310b3140ab0ec3b486", + "Requirements": [ + "desc", + "devtools", + "digest", + "dplyr", + "fs", + "git2r", + "glue", + "httr", + "jsonlite", + "methods", + "rcmdcheck", + "remotes", + "rlang", + "stats", + "tidyr", + "utils", + "withr", + "yaml" + ], + "Hash": "89f2e1d1009601f58f64b7092abcc0d7" + }, + "stringi": { + "Package": "stringi", + "Version": "1.7.12", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "stats", + "tools", + "utils" + ], + "Hash": "ca8bd84263c77310739d2cf64d84d7c9" + }, + "stringr": { + "Package": "stringr", + "Version": "1.5.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "glue", + "lifecycle", + "magrittr", + "rlang", + "stringi", + "vctrs" + ], + "Hash": "671a4d384ae9d32fc47a14e98bfa3dc8" + }, + "styler": { + "Package": "styler", + "Version": "1.9.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R.cache", + "cli", + "magrittr", + "purrr", + "rlang", + "rprojroot", + "tools", + "vctrs", + "withr" + ], + "Hash": "ed8c90822b7da46beee603f263a85fe0" + }, + "sys": { + "Package": "sys", + "Version": "3.4.1", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "34c16f1ef796057bfa06d3f4ff818a5d" + }, + "systemfonts": { + "Package": "systemfonts", + "Version": "1.0.4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cpp11" + ], + "Hash": "90b28393209827327de889f49935140a" + }, + "testthat": { + "Package": "testthat", + "Version": "3.1.7", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "R6", + "brio", + "callr", + "cli", + "desc", + "digest", + "ellipsis", + "evaluate", + "jsonlite", + "lifecycle", + "magrittr", + "methods", + "pkgload", + "praise", + "processx", + "ps", + "rlang", + "utils", + "waldo", + "withr" + ], + "Hash": "7eb5fd202a61d2fb78af5869b6c08998" + }, + "textshaping": { + "Package": "textshaping", + "Version": "0.3.6", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cpp11", + "systemfonts" + ], + "Hash": "1ab6223d3670fac7143202cb6a2d43d5" + }, + "tibble": { + "Package": "tibble", + "Version": "3.2.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "fansi", + "lifecycle", + "magrittr", + "methods", + "pillar", + "pkgconfig", + "rlang", + "utils", + "vctrs" + ], + "Hash": "a84e2cc86d07289b3b6f5069df7a004c" + }, + "tidyr": { + "Package": "tidyr", + "Version": "1.3.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "cpp11", + "dplyr", + "glue", + "lifecycle", + "magrittr", + "purrr", + "rlang", + "stringr", + "tibble", + "tidyselect", + "utils", + "vctrs" + ], + "Hash": "e47debdc7ce599b070c8e78e8ac0cfcf" + }, + "tidyselect": { + "Package": "tidyselect", + "Version": "1.2.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "glue", + "lifecycle", + "rlang", + "vctrs", + "withr" + ], + "Hash": "79540e5fcd9e0435af547d885f184fd5" + }, + "timechange": { + "Package": "timechange", + "Version": "0.2.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cpp11" + ], + "Hash": "8548b44f79a35ba1791308b61e6012d7" + }, + "tinytex": { + "Package": "tinytex", + "Version": "0.45", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "xfun" + ], + "Hash": "e4e357f28c2edff493936b6cb30c3d65" + }, + "urlchecker": { + "Package": "urlchecker", + "Version": "1.0.1", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "curl", + "tools", + "xml2" + ], + "Hash": "409328b8e1253c8d729a7836fe7f7a16" + }, + "usethis": { + "Package": "usethis", + "Version": "2.1.6", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "clipr", + "crayon", + "curl", + "desc", + "fs", + "gert", + "gh", + "glue", + "jsonlite", + "lifecycle", + "purrr", + "rappdirs", + "rlang", + "rprojroot", + "rstudioapi", + "stats", + "utils", + "whisker", + "withr", + "yaml" + ], + "Hash": "a67a22c201832b12c036cc059f1d137d" + }, + "utf8": { + "Package": "utf8", + "Version": "1.2.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "1fe17157424bb09c48a8b3b550c753bc" + }, + "vctrs": { + "Package": "vctrs", + "Version": "0.6.2", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "cli", + "glue", + "lifecycle", + "rlang" + ], + "Hash": "a745bda7aff4734c17294bb41d4e4607" + }, + "waldo": { + "Package": "waldo", + "Version": "0.4.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "cli", + "diffobj", + "fansi", + "glue", + "methods", + "rematch2", + "rlang", + "tibble" + ], + "Hash": "035fba89d0c86e2113120f93301b98ad" + }, + "whisker": { + "Package": "whisker", + "Version": "0.4.1", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "c6abfa47a46d281a7d5159d0a8891e88" + }, + "withr": { + "Package": "withr", + "Version": "2.5.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "grDevices", + "graphics", + "stats" + ], + "Hash": "c0e49a9760983e81e55cdd9be92e7182" + }, + "xfun": { + "Package": "xfun", + "Version": "0.38", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "stats", + "tools" + ], + "Hash": "1ed71215d45e85562d3b1b29a068ccec" + }, + "xml2": { + "Package": "xml2", + "Version": "1.3.3", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "methods" + ], + "Hash": "40682ed6a969ea5abfd351eb67833adc" + }, + "xmlparsedata": { + "Package": "xmlparsedata", + "Version": "1.0.5", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R" + ], + "Hash": "45e4bf3c46476896e821fc0a408fb4fc" + }, + "xopen": { + "Package": "xopen", + "Version": "1.0.0", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "processx" + ], + "Hash": "6c85f015dee9cc7710ddd20f86881f58" + }, + "xtable": { + "Package": "xtable", + "Version": "1.8-4", + "Source": "Repository", + "Repository": "RSPM", + "Requirements": [ + "R", + "stats", + "utils" + ], + "Hash": "b8acdf8af494d9ec19ccb2481a9b11c2" + }, + "yaml": { + "Package": "yaml", + "Version": "2.3.7", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "0d0056cc5383fbc240ccd0cb584bf436" + }, + "zip": { + "Package": "zip", + "Version": "2.3.0", + "Source": "Repository", + "Repository": "RSPM", + "Hash": "d98c94dacb7e0efcf83b0a133a705504" + } + } +} diff --git a/renv/profiles/4.3/renv/.gitignore b/renv/profiles/4.3/renv/.gitignore new file mode 100644 index 00000000..0ec0cbba --- /dev/null +++ b/renv/profiles/4.3/renv/.gitignore @@ -0,0 +1,7 @@ +library/ +local/ +cellar/ +lock/ +python/ +sandbox/ +staging/ diff --git a/renv/profiles/4.3/renv/settings.dcf b/renv/profiles/4.3/renv/settings.dcf new file mode 100644 index 00000000..fd205f80 --- /dev/null +++ b/renv/profiles/4.3/renv/settings.dcf @@ -0,0 +1,10 @@ +bioconductor.version: +external.libraries: +ignored.packages: admiral, admiraldev, admiral.test, admiralci +package.dependency.fields: Imports, Depends, LinkingTo +r.version: +snapshot.type: implicit +use.cache: TRUE +vcs.ignore.cellar: TRUE +vcs.ignore.library: TRUE +vcs.ignore.local: TRUE diff --git a/renv/settings.dcf b/renv/settings.dcf index 0c5119c7..fd205f80 100644 --- a/renv/settings.dcf +++ b/renv/settings.dcf @@ -1,6 +1,10 @@ -ignored.packages: +bioconductor.version: +external.libraries: +ignored.packages: admiral, admiraldev, admiral.test, admiralci package.dependency.fields: Imports, Depends, LinkingTo r.version: snapshot.type: implicit use.cache: TRUE +vcs.ignore.cellar: TRUE vcs.ignore.library: TRUE +vcs.ignore.local: TRUE diff --git a/tests/testthat.R b/tests/testthat.R index dcc37694..87653738 100644 --- a/tests/testthat.R +++ b/tests/testthat.R @@ -6,7 +6,7 @@ # * https://r-pkgs.org/tests.html # * https://testthat.r-lib.org/reference/test_package.html#special-files -library(testthat) -library(admiraldev) +library(testthat) # nolint: undesirable_function_linter +library(admiraldev) # nolint: undesirable_function_linter test_check("admiraldev") diff --git a/tests/testthat/test-assertions.R b/tests/testthat/test-assertions.R index 740ecd0b..0a0fd597 100644 --- a/tests/testthat/test-assertions.R +++ b/tests/testthat/test-assertions.R @@ -84,7 +84,7 @@ test_that("assert_data_frame Test 5: assert_data_frame extract_vars() works as i expect_invisible(example_fun(input, order = exprs(SEQ))) }) -## Test 6: assert_data_frame throws not throw error if extract_vars() has NULL input ---- +## Test 6: assert_data_frame throws error if extract_vars() has NULL input ---- test_that("assert_data_frame Test 6: assert_data_frame throws error if extract_vars() has NULL input", { # nolint input <- tibble::tribble( ~STUDYID, ~USUBJID, ~SEQ, @@ -432,67 +432,33 @@ test_that("assert_symbol Test 25: `assert_symbol` does not throw an error if `ar # assert_expr ---- ## Test 26: `assert_expr` does not throw an error if `arg` is an expression ---- test_that("assert_expr Test 26: `assert_expr` does not throw an error if `arg` is an expression", { - f <- function(var) { - v <- enexpr(var) - } - - example_fun <- function(arg) { - assert_expr(arg) - } - expect_invisible( - example_fun( - f(admiral.test::admiral_dm) - ) + assert_expr(var <- expr(admiral.test::admiral_dm)) ) }) ## Test 27: no error if optional is TRUE and `arg` is NULL ---- test_that("assert_expr Test 27: no error if optional is TRUE and `arg` is NULL", { - f <- function(var) { - v <- enexpr(var) - } - - example_fun <- function(arg) { - assert_expr(arg, optional = TRUE) - } - expect_invisible( - example_fun( - f(NULL) - ) + assert_expr(var <- NULL, optional = TRUE) ) }) ## Test 28: `assert_expr` throws an error if `arg` is missing ---- test_that("assert_expr Test 28: `assert_expr` throws an error if `arg` is missing", { - f <- function(var) { - v <- enexpr(var) - } - - example_fun <- function(arg) { - assert_expr(arg) - } - expect_error( - example_fun(f()) + assert_expr(), + regexp = "Argument `arg` missing, with no default", + fixed = TRUE ) }) ## Test 29: `assert_expr` throws an error if `arg` is not an expression ---- test_that("assert_expr Test 29: `assert_expr` throws an error if `arg` is not an expression", { - f <- function(var) { - v <- enexpr(var) - } - - example_fun <- function(arg) { - assert_expr(arg) - } - expect_error( - example_fun( - f(NULL) - ) + assert_expr(var <- c(1, 2)), + regexp = "`var` must be an expression but is a double vector", + fixed = TRUE ) }) @@ -523,34 +489,17 @@ test_that("assert_vars Test 31: error if some elements of `arg` are not unquoted }) # assert_order_vars ---- -## Test 32: error if `arg` is not a list variable names or `desc()` ---- -test_that("assert_order_vars Test 32: error if `arg` is not a list variable names or `desc()`", { - example_fun <- function(arg) { - assert_order_vars(arg) - } - - expect_error( - example_fun(TRUE) - ) - expect_error( - example_fun(1) - ) -}) - -## Test 33: no error if `arg` is NULL and optional is TRUE ---- -test_that("assert_order_vars Test 33: no error if `arg` is NULL and optional is TRUE", { - example_fun <- function(arg) { - assert_order_vars(arg, optional = TRUE) - } - - expect_invisible( - example_fun(NULL) +## Test 32: warn if assert_order_vars() is called ---- +test_that("assert_order_vars Test 32: warn if assert_order_vars() is called", { + expect_warning( + assert_order_vars(arg <- exprs(USUBJID)), + class = "lifecycle_warning_deprecated" ) }) # assert_integer_scalar ---- -## Test 34: no error if `arg` is NULL and optional is TRUE ---- -test_that("assert_integer_scalar Test 34: no error if `arg` is NULL and optional is TRUE", { +## Test 33: no error if `arg` is NULL and optional is TRUE ---- +test_that("assert_integer_scalar Test 33: no error if `arg` is NULL and optional is TRUE", { example_fun <- function(arg) { assert_integer_scalar(arg, optional = TRUE) } @@ -560,8 +509,8 @@ test_that("assert_integer_scalar Test 34: no error if `arg` is NULL and optional ) }) -## Test 35: error if chosen subset not in subsets ---- -test_that("assert_integer_scalar Test 35: error if chosen subset not in subsets", { +## Test 34: error if chosen subset not in subsets ---- +test_that("assert_integer_scalar Test 34: error if chosen subset not in subsets", { example_fun <- function(arg) { assert_integer_scalar(arg, subset = "infinity") } @@ -571,8 +520,8 @@ test_that("assert_integer_scalar Test 35: error if chosen subset not in subsets" ) }) -## Test 36: no error if `arg` is in selected subset ---- -test_that("assert_integer_scalar Test 36: no error if `arg` is in selected subset", { +## Test 35: no error if `arg` is in selected subset ---- +test_that("assert_integer_scalar Test 35: no error if `arg` is in selected subset", { example_fun <- function(arg) { assert_integer_scalar(arg, subset = "positive") } @@ -582,8 +531,8 @@ test_that("assert_integer_scalar Test 36: no error if `arg` is in selected subse ) }) -## Test 37: error if `arg` is not an integer scalar ---- -test_that("assert_integer_scalar Test 37: error if `arg` is not an integer scalar", { +## Test 36: error if `arg` is not an integer scalar ---- +test_that("assert_integer_scalar Test 36: error if `arg` is not an integer scalar", { example_fun <- function(arg) { assert_integer_scalar(arg) } @@ -597,8 +546,8 @@ test_that("assert_integer_scalar Test 37: error if `arg` is not an integer scala }) # assert_numeric_vector ---- -## Test 38: no error if `arg` is NULL and optional is TRUE ---- -test_that("assert_numeric_vector Test 38: no error if `arg` is NULL and optional is TRUE", { +## Test 37: no error if `arg` is NULL and optional is TRUE ---- +test_that("assert_numeric_vector Test 37: no error if `arg` is NULL and optional is TRUE", { example_fun <- function(arg) { assert_numeric_vector(arg, optional = TRUE) } @@ -609,8 +558,8 @@ test_that("assert_numeric_vector Test 38: no error if `arg` is NULL and optional }) # assert_integer_scalar ---- -## Test 39: error if `arg` is not an integer scalar ---- -test_that("assert_integer_scalar Test 39: error if `arg` is not an integer scalar", { +## Test 38: error if `arg` is not an integer scalar ---- +test_that("assert_integer_scalar Test 38: error if `arg` is not an integer scalar", { example_fun <- function(arg) { assert_numeric_vector(arg) } @@ -623,8 +572,8 @@ test_that("assert_integer_scalar Test 39: error if `arg` is not an integer scala }) # assert_s3_class ---- -## Test 40: error if `arg` is not an object of a specific class S3 ---- -test_that("assert_s3_class Test 40: error if `arg` is not an object of a specific class S3", { +## Test 39: error if `arg` is not an object of a specific class S3 ---- +test_that("assert_s3_class Test 39: error if `arg` is not an object of a specific class S3", { example_fun <- function(arg) { assert_s3_class(arg, "factor") } @@ -632,8 +581,8 @@ test_that("assert_s3_class Test 40: error if `arg` is not an object of a specifi expect_error(example_fun("test")) }) -## Test 41: no error if `arg` is NULL and optional is TRUE ---- -test_that("assert_s3_class Test 41: no error if `arg` is NULL and optional is TRUE", { +## Test 40: no error if `arg` is NULL and optional is TRUE ---- +test_that("assert_s3_class Test 40: no error if `arg` is NULL and optional is TRUE", { example_fun <- function(arg) { assert_s3_class(arg, class = "factor", optional = TRUE) } @@ -643,8 +592,8 @@ test_that("assert_s3_class Test 41: no error if `arg` is NULL and optional is TR ) }) -## Test 42: error if `arg` is NULL and optional is FALSE ---- -test_that("assert_s3_class Test 42: error if `arg` is NULL and optional is FALSE", { +## Test 41: error if `arg` is NULL and optional is FALSE ---- +test_that("assert_s3_class Test 41: error if `arg` is NULL and optional is FALSE", { example_fun <- function(arg) { assert_s3_class(arg, class = "factor", optional = FALSE) } @@ -656,8 +605,8 @@ test_that("assert_s3_class Test 42: error if `arg` is NULL and optional is FALSE ) }) -## Test 43: no error if `arg` is an object of a specific class S3 ---- -test_that("assert_s3_class Test 43: no error if `arg` is an object of a specific class S3", { +## Test 42: no error if `arg` is an object of a specific class S3 ---- +test_that("assert_s3_class Test 42: no error if `arg` is an object of a specific class S3", { example_fun <- function(arg) { assert_s3_class(arg, "factor") } @@ -666,8 +615,8 @@ test_that("assert_s3_class Test 43: no error if `arg` is an object of a specific }) # assert_list_of ---- -## Test 44: error if `arg` is not a list of specific class S3 objects ---- -test_that("assert_list_of Test 44: error if `arg` is not a list of specific class S3 objects", { +## Test 43: error if `arg` is not a list of specific class S3 objects ---- +test_that("assert_list_of Test 43: error if `arg` is not a list of specific class S3 objects", { example_fun <- function(arg) { assert_list_of(arg, "factor") } @@ -675,8 +624,8 @@ test_that("assert_list_of Test 44: error if `arg` is not a list of specific clas expect_error(example_fun(list("test"))) }) -## Test 45: no error if `arg` is NULL and optional is TRUE ---- -test_that("assert_list_of Test 45: no error if `arg` is NULL and optional is TRUE", { +## Test 44: no error if `arg` is NULL and optional is TRUE ---- +test_that("assert_list_of Test 44: no error if `arg` is NULL and optional is TRUE", { example_fun <- function(arg) { assert_list_of(arg, class = "factor", optional = TRUE) } @@ -686,8 +635,8 @@ test_that("assert_list_of Test 45: no error if `arg` is NULL and optional is TRU ) }) -## Test 46: error if `arg` is NULL and optional is FALSE ---- -test_that("assert_list_of Test 46: error if `arg` is NULL and optional is FALSE", { +## Test 45: error if `arg` is NULL and optional is FALSE ---- +test_that("assert_list_of Test 45: error if `arg` is NULL and optional is FALSE", { example_fun <- function(arg) { assert_list_of(arg, class = "factor", optional = FALSE) } @@ -699,8 +648,8 @@ test_that("assert_list_of Test 46: error if `arg` is NULL and optional is FALSE" ) }) -## Test 47: no error if `arg` is a list of specific class S3 objects ---- -test_that("assert_list_of Test 47: no error if `arg` is a list of specific class S3 objects", { +## Test 46: no error if `arg` is a list of specific class S3 objects ---- +test_that("assert_list_of Test 46: no error if `arg` is a list of specific class S3 objects", { example_fun <- function(arg) { assert_list_of(arg, "factor") } @@ -712,8 +661,8 @@ test_that("assert_list_of Test 47: no error if `arg` is a list of specific class ) }) -## Test 48: error if `arg` is not a named list (no elements named) ---- -test_that("assert_list_of Test 48: error if `arg` is not a named list (no elements named)", { +## Test 47: error if `arg` is not a named list (no elements named) ---- +test_that("assert_list_of Test 47: error if `arg` is not a named list (no elements named)", { expect_error( assert_list_of(mylist <- list(1, 2, 3), class = "numeric", named = TRUE), paste( @@ -724,8 +673,8 @@ test_that("assert_list_of Test 48: error if `arg` is not a named list (no elemen ) }) -## Test 49: error if `arg` is not a named list (some elements named) ---- -test_that("assert_list_of Test 49: error if `arg` is not a named list (some elements named)", { +## Test 48: error if `arg` is not a named list (some elements named) ---- +test_that("assert_list_of Test 48: error if `arg` is not a named list (some elements named)", { expect_error( assert_list_of(mylist <- list(1, 2, 3, d = 4), class = "numeric", named = TRUE), paste( @@ -736,16 +685,35 @@ test_that("assert_list_of Test 49: error if `arg` is not a named list (some elem ) }) -## Test 50: no error if `arg` is a named list ---- -test_that("assert_list_of Test 50: no error if `arg` is a named list", { +## Test 49: no error if `arg` is a named list ---- +test_that("assert_list_of Test 49: no error if `arg` is a named list", { expect_invisible( assert_list_of(mylist <- list(a = 1, b = 2, c = 3), class = "numeric", named = TRUE) ) }) +# assert_named ---- +## Test 50: no error if arg is NULL and optional = TRUE ---- +test_that("assert_named Test 50: no error if arg is NULL and optional = TRUE", { + expect_invisible(assert_named(arg <- NULL, optional = TRUE)) +}) + +## Test 51: error if no elements are named ---- +test_that("assert_named Test 51: error if no elements are named", { + expect_error( + assert_named(arg <- c(1, 2)), + regexp = paste( + "All elements of `arg` must be named.", + "No element is named.", + sep = "\n" + ), + fixed = TRUE + ) +}) + # assert_named_exprs ---- -## Test 51: error if `arg` is not a named list of expressions ---- -test_that("assert_named_exprs Test 51: error if `arg` is not a named list of expressions", { +## Test 52: error if `arg` is not a named list of expressions ---- +test_that("assert_named_exprs Test 52: error if `arg` is not a named list of expressions", { example_fun <- function(arg) { assert_named_exprs(arg) } @@ -759,8 +727,8 @@ test_that("assert_named_exprs Test 51: error if `arg` is not a named list of exp expect_error(example_fun(arg)) }) -## Test 52: no error if `arg` is NULL and optional is TRUE ---- -test_that("assert_named_exprs Test 52: no error if `arg` is NULL and optional is TRUE", { +## Test 53: no error if `arg` is NULL and optional is TRUE ---- +test_that("assert_named_exprs Test 53: no error if `arg` is NULL and optional is TRUE", { example_fun <- function(arg) { assert_named_exprs(arg, optional = TRUE) } @@ -770,8 +738,8 @@ test_that("assert_named_exprs Test 52: no error if `arg` is NULL and optional is ) }) -## Test 53: no error if `arg` is a named list of expressions ---- -test_that("assert_named_exprs Test 53: no error if `arg` is a named list of expressions", { +## Test 54: no error if `arg` is a named list of expressions ---- +test_that("assert_named_exprs Test 54: no error if `arg` is a named list of expressions", { example_fun <- function(arg) { assert_named_exprs(arg) } @@ -784,8 +752,8 @@ test_that("assert_named_exprs Test 53: no error if `arg` is a named list of expr }) # assert_function ---- -## Test 54: error if `arg` is not a function ---- -test_that("assert_function Test 54: error if `arg` is not a function", { +## Test 55: error if `arg` is not a function ---- +test_that("assert_function Test 55: error if `arg` is not a function", { example_fun <- function(arg) { assert_function(arg) } @@ -794,8 +762,8 @@ test_that("assert_function Test 54: error if `arg` is not a function", { expect_error(example_fun()) }) -## Test 55: no error if `arg` is NULL and optional is TRUE ---- -test_that("assert_function Test 55: no error if `arg` is NULL and optional is TRUE", { +## Test 56: no error if `arg` is NULL and optional is TRUE ---- +test_that("assert_function Test 56: no error if `arg` is NULL and optional is TRUE", { example_fun <- function(arg) { assert_function(arg, optional = TRUE) } @@ -805,8 +773,8 @@ test_that("assert_function Test 55: no error if `arg` is NULL and optional is TR ) }) -## Test 56: no error if `arg` is a function with all parameters defined ---- -test_that("assert_function Test 56: no error if `arg` is a function with all parameters defined", { +## Test 57: no error if `arg` is a function with all parameters defined ---- +test_that("assert_function Test 57: no error if `arg` is a function with all parameters defined", { example_fun <- function(arg) { assert_function(arg, params = c("x")) } @@ -814,8 +782,8 @@ test_that("assert_function Test 56: no error if `arg` is a function with all par expect_invisible(example_fun(mean)) }) -## Test 57: error if `params` is missing with no default ---- -test_that("assert_function Test 57: error if `params` is missing with no default", { +## Test 58: error if `params` is missing with no default ---- +test_that("assert_function Test 58: error if `params` is missing with no default", { example_fun <- function(arg) { assert_function(arg, params = c("x")) } @@ -831,8 +799,8 @@ test_that("assert_function Test 57: error if `params` is missing with no defau # assert_function_param ---- -## Test 58: no error if `arg` is a parameter of a function ---- -test_that("assert_function_param Test 58: no error if `arg` is a parameter of a function", { +## Test 59: no error if `arg` is a parameter of a function ---- +test_that("assert_function_param Test 59: no error if `arg` is a parameter of a function", { hello <- function(name) { print(sprintf("Hello %s", name)) } @@ -840,8 +808,8 @@ test_that("assert_function_param Test 58: no error if `arg` is a parameter of a expect_invisible(assert_function_param("hello", "name")) }) -## Test 59: error if expected function parameters are missing ---- -test_that("assert_function_param Test 59: error if expected function parameters are missing", { +## Test 60: error if expected function parameters are missing ---- +test_that("assert_function_param Test 60: error if expected function parameters are missing", { hello <- function(name) { print(sprintf("Hello %s", name)) } @@ -851,8 +819,8 @@ test_that("assert_function_param Test 59: error if expected function parameters }) # assert_unit ---- -## Test 60: no error if the parameter is provided in the expected unit ---- -test_that("assert_unit Test 60: no error if the parameter is provided in the expected unit", { +## Test 61: no error if the parameter is provided in the expected unit ---- +test_that("assert_unit Test 61: no error if the parameter is provided in the expected unit", { advs <- tibble::tribble( ~USUBJID, ~VSTESTCD, ~VSTRESN, ~VSSTRESU, ~PARAMCD, ~AVAL, "P01", "WEIGHT", 80.1, "kg", "WEIGHT", 80.1, @@ -864,8 +832,8 @@ test_that("assert_unit Test 60: no error if the parameter is provided in the exp ) }) -## Test 61: error if there are multiple units in the input dataset ---- -test_that("assert_unit Test 61: error if there are multiple units in the input dataset", { +## Test 62: error if there are multiple units in the input dataset ---- +test_that("assert_unit Test 62: error if there are multiple units in the input dataset", { advs <- tibble::tribble( ~USUBJID, ~VSTESTCD, ~VSTRESN, ~VSSTRESU, ~PARAMCD, ~AVAL, "P01", "WEIGHT", 80.1, "kg", "WEIGHT", 80.1, @@ -877,8 +845,8 @@ test_that("assert_unit Test 61: error if there are multiple units in the input d ) }) -## Test 62: error if unexpected unit in the input dataset ---- -test_that("assert_unit Test 62: error if unexpected unit in the input dataset", { +## Test 63: error if unexpected unit in the input dataset ---- +test_that("assert_unit Test 63: error if unexpected unit in the input dataset", { advs <- tibble::tribble( ~USUBJID, ~VSTESTCD, ~VSTRESN, ~VSSTRESU, ~PARAMCD, ~AVAL, "P01", "WEIGHT", 80.1, "kg", "WEIGHT", 80.1, @@ -891,8 +859,8 @@ test_that("assert_unit Test 62: error if unexpected unit in the input dataset", }) # assert_param_does_not_exist ---- -## Test 63: error if parameter exists in the input dataset ---- -test_that("assert_param_does_not_exist Test 63: error if parameter exists in the input dataset", { +## Test 64: error if parameter exists in the input dataset ---- +test_that("assert_param_does_not_exist Test 64: error if parameter exists in the input dataset", { advs <- tibble::tribble( ~USUBJID, ~VSTESTCD, ~VSTRESN, ~VSSTRESU, ~PARAMCD, ~AVAL, "P01", "WEIGHT", 80.1, "kg", "WEIGHT", 80.1, @@ -904,8 +872,8 @@ test_that("assert_param_does_not_exist Test 63: error if parameter exists in the ) }) -## Test 64: no error if the parameter exists in the dataset ---- -test_that("assert_param_does_not_exist Test 64: no error if the parameter exists in the dataset", { +## Test 65: no error if the parameter exists in the dataset ---- +test_that("assert_param_does_not_exist Test 65: no error if the parameter exists in the dataset", { advs <- tibble::tribble( ~USUBJID, ~VSTESTCD, ~VSTRESN, ~VSSTRESU, ~PARAMCD, ~AVAL, "P01", "WEIGHT", 80.1, "kg", "WEIGHT", 80.1, @@ -918,8 +886,8 @@ test_that("assert_param_does_not_exist Test 64: no error if the parameter exists }) # assert_varval_list ---- -## Test 65: error if `arg` is not a list of var-value expressions ---- -test_that("assert_varval_list Test 65: error if `arg` is not a list of var-value expressions", { +## Test 66: error if `arg` is not a list of var-value expressions ---- +test_that("assert_varval_list Test 66: error if `arg` is not a list of var-value expressions", { example_fun <- function(arg) { assert_varval_list(arg, accept_var = FALSE) } @@ -929,8 +897,8 @@ test_that("assert_varval_list Test 65: error if `arg` is not a list of var-value ) }) -## Test 66: error if `arg` is not a list of var-value expressions ---- -test_that("assert_varval_list Test 66: error if `arg` is not a list of var-value expressions", { +## Test 67: error if `arg` is not a list of var-value expressions ---- +test_that("assert_varval_list Test 67: error if `arg` is not a list of var-value expressions", { example_fun <- function(arg) { assert_varval_list(arg, accept_var = TRUE) } @@ -940,8 +908,8 @@ test_that("assert_varval_list Test 66: error if `arg` is not a list of var-value ) }) -## Test 67: error if `required_elements` are missing from `arg` ---- -test_that("assert_varval_list Test 67: error if `required_elements` are missing from `arg`", { +## Test 68: error if `required_elements` are missing from `arg` ---- +test_that("assert_varval_list Test 68: error if `required_elements` are missing from `arg`", { example_fun <- function(arg) { assert_varval_list(arg, required_elements = "DTHDOM") } @@ -951,8 +919,8 @@ test_that("assert_varval_list Test 67: error if `required_elements` are missing ) }) -## Test 68: no error if `arg` is NULL and optional is TRUE ---- -test_that("assert_varval_list Test 68: no error if `arg` is NULL and optional is TRUE", { +## Test 69: no error if `arg` is NULL and optional is TRUE ---- +test_that("assert_varval_list Test 69: no error if `arg` is NULL and optional is TRUE", { example_fun <- function(arg) { assert_varval_list(arg, optional = TRUE) } @@ -962,8 +930,8 @@ test_that("assert_varval_list Test 68: no error if `arg` is NULL and optional is ) }) -## Test 69: error if `accept_expr` is TRUE and value is invalid ---- -test_that("assert_varval_list Test 69: error if `accept_expr` is TRUE and value is invalid", { +## Test 70: error if `accept_expr` is TRUE and value is invalid ---- +test_that("assert_varval_list Test 70: error if `accept_expr` is TRUE and value is invalid", { example_fun <- function(arg) { assert_varval_list(arg, accept_expr = TRUE) } @@ -973,8 +941,8 @@ test_that("assert_varval_list Test 69: error if `accept_expr` is TRUE and value ) }) -## Test 70: error if `accept_expr` is FALSE and value is invalid ---- -test_that("assert_varval_list Test 70: error if `accept_expr` is FALSE and value is invalid", { +## Test 71: error if `accept_expr` is FALSE and value is invalid ---- +test_that("assert_varval_list Test 71: error if `accept_expr` is FALSE and value is invalid", { example_fun <- function(arg) { assert_varval_list(arg, accept_expr = FALSE) } @@ -984,8 +952,8 @@ test_that("assert_varval_list Test 70: error if `accept_expr` is FALSE and value ) }) -## Test 71: no error if an argument is a variable-value list ---- -test_that("assert_varval_list Test 71: no error if an argument is a variable-value list", { +## Test 72: no error if an argument is a variable-value list ---- +test_that("assert_varval_list Test 72: no error if an argument is a variable-value list", { example_fun <- function(arg) { assert_varval_list(arg) } @@ -995,9 +963,67 @@ test_that("assert_varval_list Test 71: no error if an argument is a variable-val ) }) +# assert_expr_list ---- +## Test 73: error if `arg` is not a list of expressions ---- +test_that("assert_expr_list Test 73: error if `arg` is not a list of expressions", { + expect_error( + assert_expr_list(arg <- c("USUBJID", "PARAMCD", "VISIT")), + regexp = "`arg` must be a named list of expressions but it is a", + fixed = TRUE + ) +}) + +## Test 74: error if `arg` is not a named list of expressions ---- +test_that("assert_expr_list Test 74: error if `arg` is not a named list of expressions", { + expect_error( + assert_expr_list(arg <- exprs(USUBJID, PARAMCD, NULL), named = TRUE), + regexp = "All elements of `arg` must be named.", + fixed = TRUE + ) +}) + +## Test 75: error if `required_elements` are missing from `arg` ---- +test_that("assert_expr_list Test 75: error if `required_elements` are missing from `arg`", { + expect_error( + assert_expr_list( + arg <- exprs(DTHSEQ = AESEQ), + required_elements = "DTHDOM" + ), + regexp = "The following required elements are missing in `arg`: 'DTHDOM'", + fixed = TRUE + ) +}) + +## Test 76: no error if `arg` is NULL and optional is TRUE ---- +test_that("assert_expr_list Test 76: no error if `arg` is NULL and optional is TRUE", { + expect_invisible( + assert_expr_list(NULL, optional = TRUE) + ) +}) + +## Test 77: error if element is invalid ---- +test_that("assert_expr_list Test 77: error if element is invalid", { + expect_error( + assert_expr_list(arg <- exprs(DTHSEQ = !!mean)), + regexp = "All elements of `arg` must be an expression.", + fixed = TRUE + ) +}) + +## Test 78: no error if argument is valid ---- +test_that("assert_expr_list Test 78: no error if argument is valid", { + expect_invisible( + assert_expr_list(arg <- exprs( + DTHDOM = "AE", + DTHSEQ = AESEQ, + DTHVAR = if_else(!is.na(AEDECOD), "AEDECOD", NA) + )) + ) +}) + # assert_list_element ---- -## Test 72: no error if the elements fulfill a certain condition ---- -test_that("assert_list_element Test 72: no error if the elements fulfill a certain condition", { +## Test 79: no error if the elements fulfill a certain condition ---- +test_that("assert_list_element Test 79: no error if the elements fulfill a certain condition", { expect_invisible( assert_list_element( list( @@ -1011,8 +1037,8 @@ test_that("assert_list_element Test 72: no error if the elements fulfill a certa ) }) -## Test 73: error if the elements do not fulfill the condition ---- -test_that("assert_list_element Test 73: error if the elements do not fulfill the condition", { +## Test 80: error if the elements do not fulfill the condition ---- +test_that("assert_list_element Test 80: error if the elements do not fulfill the condition", { expect_error( assert_list_element( input <- list( @@ -1029,23 +1055,25 @@ test_that("assert_list_element Test 73: error if the elements do not fulfill the }) # assert_one_to_one ---- -## Test 74: error if there is a one to many mapping ---- -test_that("assert_one_to_one Test 74: error if there is a one to many mapping", { +## Test 81: error if there is a one to many mapping ---- +test_that("assert_one_to_one Test 81: error if there is a one to many mapping", { expect_error( assert_one_to_one(admiral.test::admiral_dm, exprs(DOMAIN), exprs(USUBJID)) ) + admiraldev_environment$one_to_many <- NULL }) -## Test 75: error if there is a many to one mapping ---- -test_that("assert_one_to_one Test 75: error if there is a many to one mapping", { +## Test 82: error if there is a many to one mapping ---- +test_that("assert_one_to_one Test 82: error if there is a many to one mapping", { expect_error( assert_one_to_one(admiral.test::admiral_dm, exprs(USUBJID), exprs(DOMAIN)) ) + admiraldev_environment$many_to_one <- NULL }) # assert_date_var ---- -## Test 76: error if variable is not a date or datetime variable ---- -test_that("assert_date_var Test 76: error if variable is not a date or datetime variable", { +## Test 83: error if variable is not a date or datetime variable ---- +test_that("assert_date_var Test 83: error if variable is not a date or datetime variable", { example_fun <- function(dataset, var) { var <- assert_symbol(enexpr(var)) assert_date_var(dataset = dataset, var = !!var) @@ -1066,18 +1094,18 @@ test_that("assert_date_var Test 76: error if variable is not a date or datetime }) # assert_date_vector ---- -## Test 77: returns error if input vector is not a date formatted ---- -test_that("assert_date_vector Test 77: returns error if input vector is not a date formatted", { +## Test 84: returns error if input vector is not a date formatted ---- +test_that("assert_date_vector Test 84: returns error if input vector is not a date formatted", { expect_error(assert_date_vector("2018-08-23")) }) -## Test 78: returns invisible if input is date formatted ---- -test_that("assert_date_vector Test 78: returns invisible if input is date formatted", { +## Test 85: returns invisible if input is date formatted ---- +test_that("assert_date_vector Test 85: returns invisible if input is date formatted", { expect_invisible(assert_date_vector(as.Date("2022-10-25"))) }) -## Test 79: no error if `arg` is NULL and optional is TRUE ---- -test_that("assert_date_vector Test 79: no error if `arg` is NULL and optional is TRUE", { +## Test 86: no error if `arg` is NULL and optional is TRUE ---- +test_that("assert_date_vector Test 86: no error if `arg` is NULL and optional is TRUE", { example_fun <- function(arg) { assert_date_vector(arg, optional = TRUE) } @@ -1087,8 +1115,8 @@ test_that("assert_date_vector Test 79: no error if `arg` is NULL and optional is ) }) -## Test 80: error if `arg` is NULL and optional is FALSE ---- -test_that("assert_date_vector Test 80: error if `arg` is NULL and optional is FALSE", { +## Test 87: error if `arg` is NULL and optional is FALSE ---- +test_that("assert_date_vector Test 87: error if `arg` is NULL and optional is FALSE", { example_fun <- function(arg) { assert_date_vector(arg, optional = FALSE) } @@ -1102,22 +1130,22 @@ test_that("assert_date_vector Test 80: error if `arg` is NULL and optional is FA # assert_atomic_vector ---- -## Test 81: error if input is not atomic vector ---- -test_that("assert_atomic_vector Test 81: error if input is not atomic vector", { +## Test 88: error if input is not atomic vector ---- +test_that("assert_atomic_vector Test 88: error if input is not atomic vector", { x <- list("a", "a", "b", "c", "d", "d", 1, 1, 4) expect_error(assert_atomic_vector(x)) }) # assert_same_type ---- -## Test 82: no error if same type ---- -test_that("assert_same_type Test 82: no error if same type", { +## Test 89: no error if same type ---- +test_that("assert_same_type Test 89: no error if same type", { true_value <- "Y" false_value <- "N" expect_invisible(assert_same_type(true_value, false_value)) }) -## Test 83: error if different type ---- -test_that("assert_same_type Test 83: error if different type", { +## Test 90: error if different type ---- +test_that("assert_same_type Test 90: error if different type", { true_value <- "Y" false_value <- "N" missing_value <- 0 @@ -1136,8 +1164,8 @@ test_that("assert_same_type Test 83: error if different type", { ) }) -## Test 84: works as intended ---- -test_that("assert_same_type Test 84: works as intended", { +## Test 91: works as intended ---- +test_that("assert_same_type Test 91: works as intended", { expect_equal( valid_time_units(), c("years", "months", "days", "hours", "minutes", "seconds") diff --git a/tests/testthat/test-dataset_vignette.R b/tests/testthat/test-dataset_vignette.R index d1b47887..8d413bdf 100644 --- a/tests/testthat/test-dataset_vignette.R +++ b/tests/testthat/test-dataset_vignette.R @@ -1,8 +1,8 @@ # dataset_vignette ---- ## Test 1: A 'knitr_kable' object is outputted when run outside pkgdown ---- test_that("dataset_vignette Test 1: A 'knitr_kable' object is outputted when run outside pkgdown", { - Sys.setenv(IN_PKGDOWN = "false") - on.exit(Sys.setenv(IN_PKGDOWN = "")) + Sys.setenv(IN_PKGDOWN = "false") # nolint: undesirable_function_linter + on.exit(Sys.setenv(IN_PKGDOWN = "")) # nolint: undesirable_function_linter dm <- tibble::tribble( ~STUDYID, ~USUBJID, ~COUNTRY, @@ -18,8 +18,8 @@ test_that("dataset_vignette Test 1: A 'knitr_kable' object is outputted when run ## Test 2: A 'datatables' object is outputted when run inside pkgdown ---- test_that("dataset_vignette Test 2: A 'shiny.tag.list' is outputted when run inside pkgdown", { - Sys.setenv(IN_PKGDOWN = "true") - on.exit(Sys.setenv(IN_PKGDOWN = "")) + Sys.setenv(IN_PKGDOWN = "true") # nolint: undesirable_function_linter + on.exit(Sys.setenv(IN_PKGDOWN = "")) # nolint: undesirable_function_linter dm <- tibble::tribble( ~STUDYID, ~USUBJID, ~COUNTRY, diff --git a/tests/testthat/test-datasets.R b/tests/testthat/test-datasets.R new file mode 100644 index 00000000..563a1b4f --- /dev/null +++ b/tests/testthat/test-datasets.R @@ -0,0 +1,13 @@ +# get_dataset ---- +## Test 1: get_dataset works ---- +test_that("get_dataset Test 1: get_dataset works", { + expect_equal(NULL, get_dataset("one_to_many")) +}) + +## Test 2: get_dataset gives error works ---- +test_that("get_dataset Test 2: get_dataset works", { + expect_error( + get_dataset("test"), + "`name` must be one of 'one_to_many' or 'many_to_one' but is 'test'" + ) +}) diff --git a/tests/testthat/test-dev_utilities.R b/tests/testthat/test-dev_utilities.R index 0481d6c2..0c83d82f 100644 --- a/tests/testthat/test-dev_utilities.R +++ b/tests/testthat/test-dev_utilities.R @@ -84,3 +84,29 @@ test_that("vars2chr Test 9: warning if quosures argument is used", { class = "lifecycle_warning_deprecated" ) }) + +# extract_vars ---- +## Test 10: works with formulas (lhs) ---- +test_that("extract_vars Test 10: works with formulas (lhs)", { + expect_equal( + object = extract_vars(AVAL ~ ARMCD + AGEGR1), + expected = unname(exprs(AVAL)) + ) +}) + +## Test 11: works with formulas (rhs) ---- +test_that("extract_vars Test 11: works with formulas (rhs)", { + expect_equal( + object = extract_vars(AVAL ~ ARMCD + AGEGR1, side = "rhs"), + expected = unname(exprs(ARMCD, AGEGR1)) + ) +}) + +## Test 12: works with calls ---- +test_that("extract_vars Test 12: works with calls", { + fun <- mean + expect_equal( + object = extract_vars(expr({{ fun }}((BASE - AVAL) / BASE * 100, LLQ / 2))), + expected = unname(exprs(BASE, AVAL, LLQ)) + ) +}) diff --git a/tests/testthat/test-get.R b/tests/testthat/test-get.R index f2a88101..165497a0 100644 --- a/tests/testthat/test-get.R +++ b/tests/testthat/test-get.R @@ -57,7 +57,7 @@ test_that("get_source_vars Test 4: x is a list of expressions", { test_that("get_source_vars Test 5: NULL returns NULL", { expect_equal( get_source_vars(NULL), - expr_c(NULL) + NULL ) }) diff --git a/tests/testthat/test-quo.R b/tests/testthat/test-quo.R index 3811feb3..579cd728 100644 --- a/tests/testthat/test-quo.R +++ b/tests/testthat/test-quo.R @@ -1,9 +1,9 @@ # quo_c ---- ## Test 1: issues deprecation warning ---- test_that("quo_c Test 1: issues deprecation warning", { - expect_warning( + expect_error( quo_c(quo(USUBJID), quo(STUDYID)), - class = "lifecycle_warning_deprecated" + class = "lifecycle_error_deprecated" ) }) @@ -12,13 +12,13 @@ test_that("quo_c Test 2: `quo_c` works in concatenating and indexing quosures", x <- quo(USUBJID) y <- quo(STUDYID) - expect_equal( - expected = quo(USUBJID), - object = quo_c(x, NULL, y)[[1]] + expect_error( + quo_c(x, NULL, y)[[1]], + class = "lifecycle_error_deprecated" ) - expect_equal( - expected = quo(STUDYID), - object = quo_c(x, NULL, y)[[2]] + expect_error( + object = quo_c(x, NULL, y)[[2]], + class = "lifecycle_error_deprecated" ) }) @@ -27,7 +27,8 @@ test_that("quo_c Test 3: `quo_c` returns error if non-quosures are input", { USUBJID <- "01-701-1015" # nolint expect_error( - object = quo_c(quo(USUBJID), USUBJID) + object = quo_c(quo(USUBJID), USUBJID), + class = "lifecycle_error_deprecated" ) }) @@ -47,28 +48,44 @@ test_that("expr_c Test 4: concatenating and indexing expressions", { ) }) -## Test 5: returns error if non-expressions are input ---- -test_that("expr_c Test 5: returns error if non-expressions are input", { +## Test 5: concatenating named list of expressions ---- +test_that("expr_c Test 5: concatenating named list of expressions", { + expect_equal( + expected = exprs(PARAMCD = "DOSE", PARAMN = 1), + object = expr_c(exprs(PARAMCD = "DOSE", PARAMN = 1, NULL)) + ) +}) + +## Test 6: concatenating list and single expression ---- +test_that("expr_c Test 6: concatenating list and single expression", { + expect_equal( + expected = exprs(PARAMCD, PARAM, AVAL), + object = expr_c(exprs(PARAMCD, PARAM), expr(AVAL)) + ) +}) + +## Test 7: returns error if non-expressions are input ---- +test_that("expr_c Test 7: returns error if non-expressions are input", { expect_error( object = expr_c(expr(USUBJID), mean) ) }) # quo_not_missing ---- -## Test 6: issues deprecation warning ---- -test_that("quo_not_missing Test 6: issues deprecation warning", { +## Test 8: issues deprecation warning ---- +test_that("quo_not_missing Test 8: issues deprecation warning", { test_fun <- function(x) { x <- enquo(x) !isTRUE(quo_not_missing(x)) } - expect_warning( + expect_error( test_fun(my_variable), - class = "lifecycle_warning_deprecated" + class = "lifecycle_error_deprecated" ) }) -## Test 7: `quo_not_missing` throws an Error if missing argument ---- -test_that("quo_not_missing Test 7: `quo_not_missing` throws an Error if missing argument", { +## Test 9: `quo_not_missing` throws an Error if missing argument ---- +test_that("quo_not_missing Test 9: `quo_not_missing` throws an Error if missing argument", { test_fun <- function(x) { x <- enquo(x) isTrue(quo_not_missing(x)) @@ -77,8 +94,8 @@ test_that("quo_not_missing Test 7: `quo_not_missing` throws an Error if missing }) # replace_values_by_names ---- -## Test 8: names of quosures replace value ---- -test_that("replace_values_by_names Test 8: names of quosures replace value", { +## Test 10: names of expressions replace value ---- +test_that("replace_values_by_names Test 10: names of expressions replace value", { z <- exprs(USUBJID, STUDYID) z_noname <- replace_values_by_names(z) @@ -105,17 +122,28 @@ test_that("replace_values_by_names Test 8: names of quosures replace value", { ) }) -## Test 9: warning if quosures argument is used ---- -test_that("replace_values_by_names Test 9: warning if quosures argument is used", { - expect_warning( +## Test 11: names of argument is NULL ---- +test_that("replace_values_by_names Test 11: names of argument is NULL", { + z <- exprs(USUBJID, STUDYID) + names(z) <- NULL + + expect_equal( + expected = z, + object = replace_values_by_names(z) + ) +}) + +## Test 12: warning if quosures argument is used ---- +test_that("replace_values_by_names Test 12: warning if quosures argument is used", { + expect_error( replace_values_by_names(quosures = rlang::quos(STUDYID, USUBJID)), - class = "lifecycle_warning_deprecated" + class = "lifecycle_error_deprecated" ) }) # replace_symbol_in_quo ---- -## Test 10: error if called ---- -test_that("replace_symbol_in_quo Test 10: error if called", { +## Test 13: error if called ---- +test_that("replace_symbol_in_quo Test 13: error if called", { expect_error( replace_symbol_in_quo(), class = "lifecycle_error_deprecated" @@ -123,8 +151,8 @@ test_that("replace_symbol_in_quo Test 10: error if called", { }) # replace_symbol_in_expr ---- -## Test 11: symbol is replaced ---- -test_that("replace_symbol_in_expr Test 11: symbol is replaced", { +## Test 14: symbol is replaced ---- +test_that("replace_symbol_in_expr Test 14: symbol is replaced", { expect_equal( expected = expr(AVAL.join), object = replace_symbol_in_expr( @@ -135,8 +163,8 @@ test_that("replace_symbol_in_expr Test 11: symbol is replaced", { ) }) -## Test 12: partial match is not replaced ---- -test_that("replace_symbol_in_expr Test 12: partial match is not replaced", { +## Test 15: partial match is not replaced ---- +test_that("replace_symbol_in_expr Test 15: partial match is not replaced", { expect_equal( expected = expr(AVALC), object = replace_symbol_in_expr( @@ -147,8 +175,8 @@ test_that("replace_symbol_in_expr Test 12: partial match is not replaced", { ) }) -## Test 13: symbol in expression is replaced ---- -test_that("replace_symbol_in_expr Test 13: symbol in expression is replaced", { +## Test 16: symbol in expression is replaced ---- +test_that("replace_symbol_in_expr Test 16: symbol in expression is replaced", { expect_equal( expected = expr(desc(AVAL.join)), object = replace_symbol_in_expr( @@ -160,8 +188,8 @@ test_that("replace_symbol_in_expr Test 13: symbol in expression is replaced", { }) # add_suffix_to_vars ---- -## Test 14: with single variable ---- -test_that("add_suffix_to_vars Test 14: with single variable", { +## Test 17: with single variable ---- +test_that("add_suffix_to_vars Test 17: with single variable", { expect_equal( expected = exprs(ADT, desc(AVAL.join), AVALC), object = add_suffix_to_vars( @@ -172,8 +200,8 @@ test_that("add_suffix_to_vars Test 14: with single variable", { ) }) -## Test 15: with more than one variable ---- -test_that("add_suffix_to_vars Test 15: with more than one variable", { +## Test 18: with more than one variable ---- +test_that("add_suffix_to_vars Test 18: with more than one variable", { expect_equal( expected = exprs(ADT, desc(AVAL.join), AVALC.join), object = add_suffix_to_vars( diff --git a/vignettes/development_process.Rmd b/vignettes/development_process.Rmd index c0617c5f..ba08fdfa 100644 --- a/vignettes/development_process.Rmd +++ b/vignettes/development_process.Rmd @@ -16,10 +16,10 @@ knitr::opts_chunk$set( ``` Once you’ve familiarized yourself with the `{admiral}` [contribution -model](https://pharmaverse.github.io/admiral/articles/contribution_model.html) and you’re ready to make your first code -contribution, this development process step-by-step guide will help tie all the -other detailed vignettes together to give you the simplest experience of helping -to grow and enhance our codebase. +model](https://pharmaverse.github.io/admiral/cran-release/articles/contribution_model.html) +and you’re ready to make your first code contribution, this development process +step-by-step guide will help tie all the other detailed vignettes together to +give you the simplest experience of helping to grow and enhance our codebase. 1. To start, you will have either created an issue or commented on an existing issue to notify that you’d like to contribute code. Then one of the `{admiral}` @@ -32,7 +32,7 @@ strategy](programming_strategy.html), and then make the required code updates. a. Did you create/add appropriate [unit tests](unit_test_guidance.html#writing-unit-tests-in-admiral)? a. If you removed/replaced any function and/or function parameters, did you fully follow the [deprecation guidance](programming_strategy.html#deprecation)? a. Did you update the [documentation](programming_strategy.html#function-header-documentation)? If so, remember to run `devtools::document()` and include the updated `NAMESPACE` and `.Rd` files in `man/` - a. Does your code update have any impact on the [ADaM template](https://pharmaverse.github.io/admiral/articles/admiral.html#starting-a-script) R scripts stored in `inst/templates`? + a. Does your code update have any impact on the [ADaM template](https://pharmaverse.github.io/admiral/cran-release/articles/admiral.html#starting-a-script) R scripts stored in `inst/templates`? a. Does your code update have any impact on the vignettes stored in vignettes? a. Did you update the Changelog `NEWS.md`? a. Did you build `{admiral}` site `pkgdown::build_site()` and check that all affected examples are displayed correctly and that all new functions occur on the "[Reference](../reference/index.html)" page? diff --git a/vignettes/pr_review_guidance.Rmd b/vignettes/pr_review_guidance.Rmd index d8ca399c..da7c8390 100644 --- a/vignettes/pr_review_guidance.Rmd +++ b/vignettes/pr_review_guidance.Rmd @@ -177,12 +177,12 @@ for (pkg in base_recommended_pkgs) { assign(".lib.loc", ".library", envir = environment(.libPaths)) r_version <- getRversion() -if (grepl("^4.0", r_version)) { - options(repos = "https://cran.microsoft.com/snapshot/2021-03-31") -} else if (grepl("^4.1", r_version)) { - options(repos = "https://cran.microsoft.com/snapshot/2022-03-10") -} else if (grepl("release", r_version)) { - options(repos = "https://cran.microsoft.com/snapshot/2022-06-23") +if (grepl("^4.1", r_version)) { + options(repos = "https://packagemanager.posit.co/cran/2021-05-03/") +} else if (grepl("^4.2", r_version)) { + options(repos = "https://packagemanager.posit.co/cran/2022-01-03/") +} else if (grepl("^4.3", r_version)) { + options(repos = "https://packagemanager.posit.co/cran/2023-04-20/") } else { options(repos = "https://cran.rstudio.com") } diff --git a/vignettes/programming_strategy.Rmd b/vignettes/programming_strategy.Rmd index 211723f7..83704cbf 100644 --- a/vignettes/programming_strategy.Rmd +++ b/vignettes/programming_strategy.Rmd @@ -82,19 +82,19 @@ For example: * The source variables or newly created variables and conditions for selecting observations should not be hard-coded. - * It is useful if a parameter triggers optional steps, e.g. if the filter parameter is specified, the input dataset + * It is useful if an argument triggers optional steps, e.g. if the `filter` argument is specified, the input dataset is restricted, otherwise this step is skipped. - * However, parameters should not trigger completely different algorithms. For example `BNRIND` could be derived based + * However, arguments should not trigger completely different algorithms. For example `BNRIND` could be derived based on `BASE` or based on `ANRIND`. It should not be implemented within one function as the algorithms are completely different. If `BASE` is used, the values are categorized while if `ANRIND` is used, the values are merged from the baseline observation. ## Input, Output, and Side-effects * The behavior of the function is only determined by its input, not by any global object, -i.e. all input like datasets, variable names, options, … must be provided to the function by parameters. +i.e. all input like datasets, variable names, options, … must be provided to the function by arguments. * It is expected that the input datasets are not grouped. If any are grouped, the function must issue an error. -* If a function requires grouping, the function must provide the `by_vars` parameter. +* If a function requires grouping, the function must provide the `by_vars` argument. * The output dataset must be ungrouped. * The functions should not sort (arrange) the output dataset at the end. * If the function needs to create temporary variables in an input dataset, names @@ -150,25 +150,27 @@ documentation of `set_admiral_options()`. -Please note that the appropriate *var*/*vars* prefix should be used for all cases in which the function creates any variable(s), regardless of the presence of a `new_var` parameter in the function call. +Please note that the appropriate *var*/*vars* prefix should be used for all cases in which the function creates any variable(s), regardless of the presence of a `new_var` argument in the function call. -## Function Parameters +## Function Arguments -The default value of optional parameters should be `NULL`. +The default value of optional arguments should be `NULL`. -There is a recommended parameter order that all contributors are asked to adhere to +There is a recommended argument order that all contributors are asked to adhere to (in order to keep consistency across functions): 1. `dataset` (and any additional datasets denoted by `dataset_*`) 1. `by_vars` 1. `order` -1. `new_var` (and any related `new_var_*` parameters) +1. `new_var` (and any related `new_var_*` arguments) 1. `filter` (and any additional filters denoted by `filter_*`) 1. all additional arguments: * Make sure to always mention `start_date` before `end_date` (or related). -Names of variables inside a dataset should be passed as symbols rather than strings, i.e. `AVAL` rather than `"AVAL"`. -If a parameter accepts one or more variables as input, the variables should be wrapped inside `exprs()`. +Names of variables inside a dataset should be passed as symbols rather than +strings, i.e. `AVAL` rather than `"AVAL"`. If an argument accepts one or more +variables or expressions as input then the variables and expressions should be +wrapped inside `exprs()`. For example: @@ -176,31 +178,9 @@ For example: * `by_vars = exprs(PARAMCD, AVISIT)` * `filter = PARAMCD == "TEMP"` * `order = exprs(AVISIT, desc(AESEV))` +* `new_vars = exprs(LDOSE = EXDOSE, LDOSEDT = convert_dtc_to_dt(EXSTDTC))` -Parameter must not accept expressions for assigning the value of the new -variable. Instead separate parameters need to be provided for defining the -value. For example, if a function derives a variable which may be imputed, the -following is **not acceptable**. - -``` - ... - new_var = exprs(mydtm = convert_dtc_to_dtm(impute_dtc(cmstdtc, - date_imputation = "last", - time_imputation = "last"))), - ... -``` - -Separate parameters for the imputation must be provided, e.g.: -``` - ... - new_var = mydtm, - source_var = cmstdtc, - date_imputation = "last", - time_imputation = "last", - ... -``` - -Each function parameter needs to be tested with `assert_` type of function. +Each function argument needs to be tested with `assert_` type of function. Each expression needs to be tested for the following (there are many utility functions in `{admiral}` available to the contributor): @@ -208,33 +188,31 @@ Each expression needs to be tested for the following * whether it is an expression (or a list of expressions, depending on the function) * whether it is a valid expression (i.e. whether it evaluates without error) -The only exception to this is `derive_var_basetype()` where we allowed the use of `rlang::exprs()`. -The reason is that in this case the user needs to have the flexibility to provide not just symbols but -usually more complicated filtering conditions (that may be based on multiple input parameters). - +## Common Function Arguments Naming Convention -## Common Function Parameters Naming Convention +The first argument of `derive_` functions should be the input dataset and it +should be named `dataset`. If more than one input dataset is required, the other +input dataset should start with `dataset_`, e.g., `dataset_ex.` -The first parameter of `derive_` functions should be the input dataset and it should be named `dataset`. -If more than one input dataset is required, the other input dataset should start with `dataset_`, e.g., `dataset_ex.` +Arguments for specifying items to add should start with `new_`. If a variable is +added, the second part of the argument name should be var, if a parameter is +added, it should be `param.` For example: `new_var`, `new_var_unit`, +`new_param`. -Parameters for specifying items to add should start with `new_`. -If a variable is added, the second part of the parameter name should be var, if a parameter is added, it should be `param.` -For example: `new_var`, `new_var_unit`, `new_param`. +Arguments which expect a boolean or boolean vector must start with a verb, e.g., +`is_imputed` or `impute_date`. -Parameters which expect a boolean or boolean vector must start with a verb, e.g., `is_imputed` or `impute_date`. +## List of Common Arguments -## List of Common Parameters - -| Parameter Name | Description | +| Argument Name | Description | |------------------|--------------------------------------------------------------------------------------------------------------------| | `dataset` | The input dataset. Expects a data.frame or a tibble. | | `by_vars` | Variables to group by. | | `order` | List of expressions for sorting a dataset, e.g., `exprs(PARAMCD, AVISITN, desc(AVAL))`. | | `new_var` | Name of a single variable to be added to the dataset. | | `new_vars` | List of variables to be added to the dataset. | -| `new_var_unit` | Name of the unit variable to be added. It should be the unit of the variable specified for the new_var parameter. | +| `new_var_unit` | Name of the unit variable to be added. It should be the unit of the variable specified for the `new_var` argument. | | `filter` | Expression to filter a dataset, e.g., `PARAMCD == "TEMP"`. | | `start_date` | The start date of an event/interval. Expects a date object. | | `end_date` | The end date of an event/interval. Expects a date object. | @@ -321,16 +299,16 @@ here only a warning should be displayed and the function should continue executi Inputs should be checked using custom assertion functions defined in [`R/assertions.R`](https://github.com/pharmaverse/admiraldev/blob/main/R/assertions.R). These custom assertion functions should either return an error in case of an invalid input or return nothing. -For the most common types of input parameters like a single variable, a list of +For the most common types of input arguments like a single variable, a list of variables, a dataset, ... functions for checking are available (see [assertions](../reference/index.html#section-assertions)). -Parameters which expect keywords should handle them in a case-insensitive manner, e.g., both -`date_imputation = "FIRST"` and `date_imputation = "first"` should be accepted. -The `assert_character_scalar()` function helps with handling parameters in a -case-insensitive manner. +Arguments which expect keywords should handle them in a case-insensitive manner, +e.g., both `date_imputation = "FIRST"` and `date_imputation = "first"` should be +accepted. The `assert_character_scalar()` function helps with handling arguments +in a case-insensitive manner. -A parameter should not be checked in an outer function if the parameter name is the same as in the inner function. +A argument should not be checked in an outer function if the argument name is the same as in the inner function. This rule is applicable only if both functions are part of `{admiral}`. @@ -339,7 +317,7 @@ This rule is applicable only if both functions are part of `{admiral}`. Every function that is exported from the package must have an accompanying header that should be formatted according to the [roxygen2](https://roxygen2.r-lib.org/) convention. -In addition to the roxygen2 parameters, `@keywords` is also used. +In addition to the roxygen2 tags, `@keywords` is also used. The keywords are used to categorize the function. Please see section "Categorization of functions". @@ -354,7 +332,7 @@ An example is given below: #' @param dataset Input dataset #' #' The columns specified by the `reference_date` and the `source_vars` -#' parameter are expected. +#' argument are expected. #' #' @param reference_date The start date column, e.g., date of first treatment #' @@ -391,14 +369,14 @@ An example is given below: #' library(tibble) #' #' datain <- tribble( -#' ~TRTSDTM, ~ASTDTM, ~AENDT, -#' "2014-01-17T23:59:59", "2014-01-18T13:09:O9", "2014-01-20" +#' ~TRTSDTM, ~ASTDTM, ~AENDT, +#' "2014-01-17T23:59:59", "2014-01-18T13:09:O9", "2014-01-20" #' ) %>% -#' mutate( -#' TRTSDTM = as_datetime(TRTSDTM), -#' ASTDTM = as_datetime(ASTDTM), -#' AENDT = ymd(AENDT) -#' ) +#' mutate( +#' TRTSDTM = as_datetime(TRTSDTM), +#' ASTDTM = as_datetime(ASTDTM), +#' AENDT = ymd(AENDT) +#' ) #' #' derive_vars_dy( #' datain, @@ -410,9 +388,13 @@ An example is given below: The following fields are mandatory: -* `@param`: One entry per function parameter. -The following attributes should be described: expected data type (e.g. `data.frame`, `logical`, `numeric` etc.), default value (if any), permitted values (if applicable), optionality (i.e. is this a required parameter). -If the expected input is a dataset then the required variables should be clearly stated. +* `@param`: One entry per function argument. +The following attributes should be described: expected data type (e.g. `data.frame`, `logical`, `numeric` etc.), permitted values (if applicable), optionality (i.e. is this a required argument). If the expected input is a dataset then the required variables should be clearly stated. Describing the default value becomes difficult to maintain and subject to manual error when it is already declared in the function arguments. The description for permitted values should be written as a separate line italicizing the phrase "Permitted Values", example below: + +``` +#' *Permitted Values*: example description of permitted values here +``` + * `@details`: A natural-language description of the derivation used inside the function. * `@keyword`: One applicable tag to the function - identical to family. * `@family`: One applicable tag to the function - identical to keyword. @@ -426,22 +408,22 @@ If other functions are called in the example, please specify `library(pkg_name)` Make sure to align columns as this ensures quick code readability. Copying descriptions should be avoided as it makes the documentation hard to -maintain. For example if the same parameter with the same description is used by -more than one function, the parameter should be described for one function and +maintain. For example if the same argument with the same description is used by +more than one function, the argument should be described for one function and the other functions should use `@inheritParams `. +argument is described>`. Please note that if `@inheritParams func_first` is used in the header of the -`func_second()` function, those parameter descriptions of `func_first()` are +`func_second()` function, those argument descriptions of `func_first()` are included in the documentation of `func_second()` for which -- the parameter is offered by `func_second()` and -- no `@param` tag for the parameter is included in the header of +- the argument is offered by `func_second()` and +- no `@param` tag for the argument is included in the header of `func_second()`. The order of the `@param` tags should be the same as in the function definition. The `@inheritParams` tags should be after the `@param`. This does not affect the -order of the parameter description in the rendered documentation but makes it +order of the argument description in the rendered documentation but makes it easier to maintain the headers. Variable names, expressions, functions, and any other code must be enclosed @@ -496,6 +478,7 @@ add an issue in GitHub for discussion. | `utils_ds_chk` | Utilities for Dataset Checking | | `utils_fil` | Utilities for Filtering Observations | | `utils_fmt` | Utilities for Formatting Observations | +| `utils_print` | Utilities for Printing Objects in the Console | | `utils_help` | Utilities used within Derivation functions | | `utils_examples` | Utilities used for examples and template scripts | | `source_specifications` | Source Objects | @@ -545,6 +528,7 @@ If a package is used only in examples and/or unit tests then it should be listed Functions from other packages have to be explicitly imported by using the `@importFrom` tag in the `R/admiral-package.R` file. To import the `if_else()` and `mutate()` function from `dplyr` the following line would have to be included in that file: `#' @importFrom dplyr if_else mutate`. +By using the `@importFrom` tag, it is easier to track all of our dependencies in one place and improves code readability. Some of these functions become critically important while using admiral and should be included as an export. This applies to functions which are frequently @@ -569,30 +553,37 @@ See [Writing Unit Tests in {admiral}](unit_test_guidance.html#writing-unit-tests # Deprecation -As `{admiral}` is still evolving, functions or parameters may need to be removed or replaced with more -efficient options from one release to another. In such cases, the relevant function or parameter -must be marked as deprecated. This deprecation is done in three phases over our release cycles. +As `{admiral}` is still evolving, functions or arguments may need to be removed +or replaced with more efficient options from one release to another. In such +cases, the relevant function or argument must be marked as deprecated. This +deprecation is done in three phases over our release cycles. -- **Phase 1:** In the release where the identified function or parameter is to be deprecated there will be a warning issued when using the function or parameter using `deprecate_warn()` +- **Phase 1:** In the release where the identified function or argument is to +be deprecated there will be a warning issued when using the function or argument +using `deprecate_warn()`. -- **Phase 2:** In the next release an error will be thrown using `deprecate_stop()` +- **Phase 2:** In the next release an error will be thrown using +`deprecate_stop()`. -- **Phase 3:** Finally in the 3rd release thereafter the function will be removed from the package altogether +- **Phase 3:** Finally in the 3rd release thereafter the function will be +removed from the package altogether. Information about deprecation timelines must be added to the warning/error message. -Note that the deprecation cycle time for a function or parameter based on our current release schedule is 6 months. +Note that the deprecation cycle time for a function or argument based on our +current release schedule is 6 months. ## Documentation -If a function or parameter is removed, the documentation must be updated to indicate the function -or the parameter is now deprecated and which new function/parameter should be used instead. +If a function or argument is removed, the documentation must be updated to +indicate the function or the argument is now deprecated and which new +function/argument should be used instead. The documentation will be updated at: + the description level for a function, + the keywords will be replaced with `deprecated` -+ the @family roxygen tag will become `deprecated` ++ the `@family` roxygen tag will become `deprecated` ```{r, eval=FALSE} #' Title of the function @@ -610,25 +601,27 @@ The documentation will be updated at: + the `@examples` section should be removed. -+ the `@param` level for a parameter. ++ the `@param` level for a argument. ``` @param old_param *Deprecated*, please use `new_param` instead. ``` -## Handling of warning and error +## Handling of Warning and Error -When a function or parameter is deprecated, the function must be updated to issue a -warning or error using `deprecate_warn()` and `deprecate_stop()`, respectively, as -described above. +When a function or argument is deprecated, the function must be updated to issue +a warning or error using `deprecate_warn()` and `deprecate_stop()`, +respectively, as described above. -There should be a test case added in `tests/testthat/test-deprecation.R` that checks whether this warning/error is issued as appropriate when using the deprecated function or parameter. +There should be a test case added in the test file of the function that checks +whether this warning/error is issued as appropriate when using the deprecated +function or argument. ### Function -In the initial release in which a function is deprecated the original function body -must be replaced with a call to `deprecate_warn()` and subsequently all arguments -should be passed on to the new function. +In the initial release in which a function is deprecated the original function +body must be replaced with a call to `deprecate_warn()` and subsequently all +arguments should be passed on to the new function. ```r fun_xxx <- function(dataset, some_param, other_param) { @@ -652,9 +645,9 @@ fun_xxx <- function(dataset, some_param, other_param) { Finally, in the next release the function should be removed from the package. -### Parameter +### Argument -If a parameter is removed and is not replaced, an **error** must be generated: +If an argument is removed and is not replaced, an **error** must be generated: ``` ### BEGIN DEPRECATION @@ -664,9 +657,9 @@ If a parameter is removed and is not replaced, an **error** must be generated: ### END DEPRECATION ``` -If the parameter is renamed or replaced, a **warning** must be issued and the -new parameter takes the value of the old parameter until the next release. Note: -parameters which are not passed as `exprs()` argument (e.g. `new_var = VAR1` or +If the argument is renamed or replaced, a **warning** must be issued and the +new argument takes the value of the old argument until the next release. Note: +arguments which are not passed as `exprs()` argument (e.g. `new_var = VAR1` or `filter = AVAL >10`) will need to be quoted. ``` @@ -683,50 +676,64 @@ parameters which are not passed as `exprs()` argument (e.g. `new_var = VAR1` or ## Unit Testing -Unit tests for deprecated functions and parameters must be added to -`tests/testthat/test-deprecation.R` to ensure that a warning or error is issued. +Unit tests for deprecated functions and arguments must be added to the test file [^1] of the function to ensure that a warning or error is issued. -When writing the unit test, check that the error or warning has the right class, i.e. "lifecycle_error_deprecated" or "lifecycle_warning_deprecated", respectively. The unit-test should follow the corresponding format, per the [unit test guidance](unit_test_guidance.html#writing-unit-tests-in-admiral-): +[^1]: For example, if `derive_var_example()` is going to be deprecated and +it is defined in `examples.R`, the unit tests are in +`tests/testthat/test-examples.R`. -``` -# For deprecated functions that issues error +When writing the unit test, check that the error or warning has the right class, +i.e., `"lifecycle_error_deprecated"` or `"lifecycle_warning_deprecated"`, +respectively. The unit-test should follow the corresponding format, per the +[unit test guidance](unit_test_guidance.html#writing-unit-tests-in-admiral). -## Test #: An error is thrown if `derive_var_example()` is called ---- -test_that("deprecation Test #: derive_var_example() An error is thrown if - `derive_var_example()` is called", { - expect_error( +### For Deprecated Functions that Issues a Warning (Phase 1) + +A unit test like the following must be added. +``` +## Test #: deprecation warning if function is called ---- +test_that("derive_var_example() Test #: deprecation warning if function is called", { + expect_warning( derive_var_example(), - class = "lifecycle_error_deprecated" + class = "lifecycle_warning_deprecated" ) }) ``` +In the existing unit tests the call of the deprecated function need to be enclosed by `suppress_warning()`. For example, ``` -# For deprecated functions that issues warning - -## Test #: A warning is thrown if `derive_var_example()` is called ---- -test_that("deprecation Test #: derive_var_example() A warning is thrown if - `derive_var_example()` is called", { - expect_warning( + actual <- suppress_warning( derive_var_example(), - class = "lifecycle_warning_deprecated" + regexpr = "was deprecated" ) -}) ``` +The `regexpr` argument must be specified to ensure that only the deprecation +warning is suppressed. +### For Deprecated Functions that Issues an Error (Phase 2) -Other unit tests of deprecated functions must be removed. +A unit test like the following must be added. +``` +## Test #: error if function is called ---- +test_that("derive_var_example() Test #: deprecation error if function is called", { + expect_error( + derive_var_example(), + class = "lifecycle_error_deprecated" + ) +}) +``` +Other unit tests of the deprecated function must be removed. # Best Practices and Hints Please take the following list as recommendation and try to adhere to its rules if possible. -* Parameters in function calls should be named except for the first parameter +* Arguments in function calls should be named except for the first parameter (e.g. `assert_data_frame(dataset, required_vars = exprs(var1, var2), optional = TRUE)`). * `dplyr::if_else()` should be used when there are only two conditions. -Try to always set the `missing` parameter whenever appropriate. +Try to always set the `missing` argument whenever appropriate. -# R and package versions for development +# R and Package Versions for Development * The choice of R Version is not set in stone. However, a common development environment is important to establish when working across multiple companies and multiple developers. We currently work in the earliest of the three latest R Versions. This need for a common development environment also carries over for our choice of package versions. * GitHub allows us through the Actions/Workflows to test `{admiral}` under several versions of R as well as several versions of dependent R packages needed for `{admiral}`. Currently we test `{admiral}` against the three latest R Versions and the closest snapshots of packages to those R versions. You can view this workflow and others on our [admiralci GitHub Repository](https://github.com/pharmaverse/admiralci). diff --git a/vignettes/release_strategy.Rmd b/vignettes/release_strategy.Rmd index 5e042f51..347515e2 100644 --- a/vignettes/release_strategy.Rmd +++ b/vignettes/release_strategy.Rmd @@ -43,19 +43,21 @@ updates via the community meetings, especially any anticipated breaking changes. A package release is done in five parts: -1) Create a Pull Request from `devel` into the `pre-release` branch. Issues identified in this Pull Request should have work done in separate branches and merged into the `pre-release` branch and **NOT** `devel`. -1) Verify that all CI/CD checks are passing for the `devel` into the `pre-release` Pull Request, merge and then bundle up and send off to CRAN. -1) Once the package is available on CRAN, another Pull Request is created for merging the `pre-release` branch into the `main` branch. This will trigger the GitHub action to rebuild the `{admiral}` website with all the updates for this release. -1) Use the release button on GitHub to "release" the package onto GitHub. This release onto Github archives the version of code within the `main` branch, attaches the News/Changelog file, bundles the code into a `tar.gz` file and makes a validation report via the GitHub action `validation` from [insightsengineering/validatoR](https://github.com/insightsengineering/thevalidatoR). Please see past [admiral releases](https://github.com/pharmaverse/admiral/releases) for reference. -1) Any issues fixed in the `pre-release/main` branches should be merged back into `devel`. +1) Create a Pull Request from `devel` into the `main` branch. Issues identified in this Pull Request should have work done in separate branches and merged once again into `devel`. +1) Verify that all CI/CD checks are passing for the `devel` into the `main` Pull Request, merge and then bundle up and send off to CRAN. See the [chapter](https://r-pkgs.org/release.html#decide-the-release-type) in R Packages for more details. +1) If CRAN asks for modifications, repeat steps 1-2 as necessary. +1) Once the package is accepted and available on CRAN, a [GitHub action](https://github.com/pharmaverse/admiral/actions/workflows/pages/pages-build-deployment) is set up to rebuild the `{admiral}` website with all the updates for this release. +1) Use the release button on GitHub to "release" the package onto GitHub. This release onto Github archives the version of code within the `main` branch, attaches the News/Changelog file, bundles the code into a `tar.gz` file and makes a validation report via the GitHub action `validation` from [insightsengineering/validatoR](https://github.com/insightsengineering/thevalidatoR). Please see past [admiral releases](https://github.com/pharmaverse/admiral/releases) for reference and the [Releasing to Github](release_strategy.html#releasing-to-github) section for more details. +1) Any issues fixed in the `main` branches should be merged back into `devel`. 1) Once a release is completed the `main` branch should be merged into `patch` to be ready for hotfixes. **Quarterly Release:** -* `devel >> pre-release >> main` -* `pre-release >> main >> devel` (Fixes done after a CRAN rejection) +* `devel >> main` * `main >> patch` (To be prepared in case of a needed hotfix) +Be on the look out for an automated check PR whenever `devel` goes into `main` as a future upcoming feature. + ## Hot Fix Release Occasionally we will need to release a hot fix to address a package breaking bug. A hot fix release is done in 6 parts: @@ -63,12 +65,24 @@ Occasionally we will need to release a hot fix to address a package breaking bug 1) Identify all the bugs that need to be fixed for this hot fix release and label with hot fix label. 1) Branches addressing the bugs should have Pull Requests merged into the `patch` branch **NOT** the `devel` branch. 1) When naming the branch follow the [naming conventions](git_usage.html#implementing-an-issue) guide but use the `@main` suffix -1) Create a Pull Request from `patch` into the `pre-release` branch. Verify that all CI/CD checks are passing, merge and bundle up and send off to CRAN. -1) Once package is approved and available on CRAN, another Pull Request is created for merging the `pre-release` branch into the `main` branch. This will trigger the action to rebuild the `{admiral}` website with all the updates for this hot fix release. -1) Use the release button on GitHub to "release" the package onto GitHub. This release onto Github archives the version of code within the `main` branch, attaches the News/Changelog file, bundles the code into a `tar.gz` file and makes a validation report via the GitHub action `validation` from [insightsengineering/validatoR](https://github.com/insightsengineering/thevalidatoR). Please see past [admiral releases](https://github.com/pharmaverse/admiral/releases) for reference. +1) Create a Pull Request from `patch` into the `main` branch. Verify that all CI/CD checks are passing, merge and them bundle up and send off to CRAN. See the [chapter](https://r-pkgs.org/release.html#decide-the-release-type) in R Packages for more details. +1) If CRAN asks for modifications, repeat steps 1-4 as necessary. +1) Once the package is accepted and available on CRAN, a [GitHub action](https://github.com/pharmaverse/admiral/actions/workflows/pages/pages-build-deployment) is set up to rebuild the `{admiral}` website with all the updates for this release. +1) Use the release button on GitHub to "release" the package onto GitHub. This release onto Github archives the version of code within the `main` branch, attaches the News/Changelog file, bundles the code into a `tar.gz` file and makes a validation report via the GitHub action `validation` from [insightsengineering/validatoR](https://github.com/insightsengineering/thevalidatoR). Please see past [admiral releases](https://github.com/pharmaverse/admiral/releases) for reference and the [Releasing to Github](release_strategy.html#releasing-to-github) section for more details. 1) These hot fixes should then be merged into the `devel` branch through an additional Pull Request. -**Hot Fix Release**: `patch >> pre-release >> main >> devel` +**Hot Fix Release**: `patch >> main >> devel` + +# Releasing to Github +Under the [Releases](https://github.com/pharmaverse/admiral/releases) section in the main repo, select `Draft a New Release`. Proceed by creating the appropriate release tag and header, denoted as `vX.X.X` and `admiral X.X.X` respectively, for the release: + +![](https://user-images.githubusercontent.com/43018762/228875673-5b6daa64-1909-47c9-bd61-69b810c2f742.png) + +Copy the contents of the `NEWS.md` section for the release, paste it into the release notes section: + +![](https://user-images.githubusercontent.com/43018762/228875743-d17729fe-9b38-432a-9bb0-5fdc157ec231.png) + +Then in the upload box where it says, "Attach binaries by dropping them here or selecting them" upload the appropriate `admiral_X.X.X.tar.gz` file available for download at the [CRAN website](https://cran.r-project.org/web/packages/admiral/index.html). Click `Publish Release` and you're all done! # Communications