diff --git a/.Rbuildignore b/.Rbuildignore index d3d4b3e3..4ef2242b 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -1,5 +1,3 @@ -^renv$ -^renv\.lock$ ..Rcheck ^.*\.Rproj$ ^\.Rproj\.user$ @@ -14,9 +12,7 @@ LICENSE docs/ vignettes/figs/ ^vignettes/.*cache -^CRAN-RELEASE$ ^cran-comments\.md$ ^CRAN-SUBMISSION$ ^sticker$ -^development_packages\.R$ -^fit_models\.R$ +^doc$ diff --git a/DESCRIPTION b/DESCRIPTION index 07674b84..5ef26fe5 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: fHMM Type: Package Title: Fitting Hidden Markov Models to Financial Data -Version: 1.4.2 +Version: 1.4.3 Authors@R: c( person(given = "Lennart", family = "Oelschl\U00E4ger", @@ -11,12 +11,12 @@ Authors@R: c( person(given = "Timo", family = "Adam", role = "aut", - email = "ta59@st-andrews.ac.uk", + email = "timo.adam@uni-bielefeld.de", comment = c(ORCID = "0000-0001-9079-3259")), person(given = "Rouven", family = "Michels", role = "aut", - email = "r.michels@uni-bielefeld.de", + email = "rouven.michels@tu-dortmund.de", comment = c(ORCID = "0000-0002-5433-6197"))) Description: Fitting (hierarchical) hidden Markov models to financial data via maximum likelihood estimation. See Oelschläger, L. and Adam, T. @@ -43,7 +43,7 @@ Imports: httr, jsonlite, MASS, - oeli (>= 0.3.0), + oeli (>= 0.7.6), padr, pracma, progress, @@ -63,7 +63,7 @@ Suggests: testthat (>= 3.0.0), tseries Roxygen: list(markdown = TRUE) -RoxygenNote: 7.3.2 +RoxygenNote: 7.3.3 VignetteBuilder: knitr Config/testthat/edition: 3 LazyData: true diff --git a/NEWS.md b/NEWS.md index 158e5305..95e0b8a4 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,11 @@ +# fHMM 1.4.3 + +* Improved documentation of input types and input checks. + +* Small documentation fixes. + +* Removed renv. + # fHMM 1.4.2 * Let `download_data()` fail gracefully with an informative message if the Yahoo Finance resource is not available or has changed. @@ -10,7 +18,7 @@ * Removed stale import of `oeli::check_date()`. -* Updated `download_data()` to confirm with new Yahoo Finance API. +* Updated `download_data()` to work with the new Yahoo Finance API. # fHMM 1.4.0 diff --git a/R/compare_models.R b/R/compare_models.R index cf032491..8c83d83a 100644 --- a/R/compare_models.R +++ b/R/compare_models.R @@ -33,12 +33,14 @@ compare_models <- function(...) { ### check if models are of class "fHMM_model" for (i in seq_len(length(models))) { - if (!inherits(models[[i]],"fHMM_model")) { - stop( - paste0("Input '", model_names[i], "' is not of class 'fHMM_model'."), - call. = FALSE - ) - } + oeli::input_check_response( + check = if (inherits(models[[i]], "fHMM_model")) { + TRUE + } else { + paste0("Input '", model_names[i], "' is not of class 'fHMM_model'.") + }, + var_name = model_names[i] + ) } ### check if data is the same for each model diff --git a/R/compute_T_star.R b/R/compute_T_star.R index 871e239f..a9c2a00c 100644 --- a/R/compute_T_star.R +++ b/R/compute_T_star.R @@ -4,16 +4,16 @@ #' This helper function computes lengths of fine-scale chunks in the #' hierarchical case. #' -#' @param horizon +#' @param horizon \[`integer(2)`\]\cr #' The element \code{controls$horizon}, i.e., an integer vector of length 2, #' where the second entry can be \code{NA_integer_}. -#' @param period +#' @param period \[`character(1)`\]\cr #' The element \code{controls$period}, i.e. one of \code{"w"}, #' \code{"m"}, \code{"q"}, or \code{"y"}. -#' @param dates +#' @param dates \[`NULL` | `character()`\]\cr #' A \code{character} vector of dates of empirical fine-scale data (if any). #' By default, \code{dates = NULL}. -#' @param seed +#' @param seed \[`NULL` | `integer(1)`\]\cr #' Set a seed for the simulation of flexible chunk lengths. #' By default, \code{seed = NULL} (i.e., no seed). #' diff --git a/R/compute_ci.R b/R/compute_ci.R index 99094c89..6703af9e 100644 --- a/R/compute_ci.R +++ b/R/compute_ci.R @@ -4,12 +4,13 @@ #' This helper function computes confidence intervals for the estimates of an #' \code{\link{fHMM_model}} object using the inverse Fisher information. #' -#' @param x +#' @param x \[`fHMM_model`\]\cr #' An object of class \code{\link{fHMM_model}}. #' -#' @param alpha -#' A \code{numeric} between 0 and 1, the alpha level for the confidence interval. -#' By default, \code{alpha = 0.05}, which computes a 95% confidence interval. +#' @param alpha \[`numeric(1)`\]\cr +#' The alpha level for the confidence interval. Must be between 0 and 1. +#' By default, \code{alpha = 0.05}, which computes a 95 percent confidence +#' interval. #' #' @return #' A \code{list} containing the following elements: @@ -24,12 +25,25 @@ compute_ci <- function(x, alpha = 0.05) { ### check inputs - if (!inherits(x,"fHMM_model")) { - stop("Input 'x' must be an 'fHMM_model' object.", call. = FALSE) - } - if (!is.numeric(alpha) || length(alpha) != 1 || alpha <= 0 || alpha >= 1) { - stop("Input 'alpha' must be a numeric between 0 and 1.", call. = FALSE) - } + oeli::input_check_response( + check = if (inherits(x, "fHMM_model")) { + TRUE + } else { + "Input 'x' must be an 'fHMM_model' object." + }, + var_name = "x" + ) + oeli::input_check_response( + check = if ( + checkmate::test_number(alpha, lower = 0, upper = 1) && + alpha > 0 && alpha < 1 + ) { + TRUE + } else { + "Input 'alpha' must be a numeric between 0 and 1." + }, + var_name = "alpha" + ) ### compute confidence intervals using the inverse Hessian approach inverse_fisher <- x$inverse_fisher @@ -41,7 +55,7 @@ compute_ci <- function(x, alpha = 0.05) { ### if negative variance, replace by NA_real_ bad_inverse_fisher <- which( !vapply( - inverse_fisher, checkmate::test_number, logical(1), na.ok = FALSE, + inverse_fisher, checkmate::test_number, logical(1), na.ok = FALSE, finite = TRUE, lower = 0 ) ) diff --git a/R/compute_residuals.R b/R/compute_residuals.R index 1314c0e0..c15b673e 100644 --- a/R/compute_residuals.R +++ b/R/compute_residuals.R @@ -4,9 +4,9 @@ #' This function computes (pseudo-) residuals of an \code{\link{fHMM_model}} #' object. #' -#' @param x +#' @param x \[`fHMM_model`\]\cr #' An object of class \code{\link{fHMM_model}}. -#' @param verbose +#' @param verbose \[`logical(1)`\]\cr #' Set to \code{TRUE} (default) to print progress messages. #' #' @return @@ -20,13 +20,23 @@ compute_residuals <- function(x, verbose = TRUE) { - ### check input - if (!inherits(x,"fHMM_model")) { - stop("'x' must be of class 'fHMM_model'.", call. = FALSE) - } - if (!isTRUE(verbose) && !isFALSE(verbose)) { - stop("'verbose' must be either TRUE or FALSE.", call. = FALSE) - } + ### check inputs + oeli::input_check_response( + check = if (inherits(x, "fHMM_model")) { + TRUE + } else { + "'x' must be of class 'fHMM_model'." + }, + var_name = "x" + ) + oeli::input_check_response( + check = if (checkmate::test_flag(verbose)) { + TRUE + } else { + "'verbose' must be either TRUE or FALSE." + }, + var_name = "verbose" + ) if (is.null(x$decoding)) { warning( paste( diff --git a/R/data_and_models.R b/R/data_and_models.R index 9e763b7c..34632c30 100644 --- a/R/data_and_models.R +++ b/R/data_and_models.R @@ -113,7 +113,7 @@ #' @description #' A pre-computed HMM on closing prices of the DAX from 2000 to 2022 #' with two hidden states and normal state-dependent distributions for -#' demonstration purpose. +#' demonstration purposes. #' #' @usage data("dax_model_2n") #' @@ -150,7 +150,7 @@ #' @description #' A pre-computed HMM on closing prices of the DAX from 2000 to 2022 #' with three hidden states and state-dependent t-distributions for -#' demonstration purpose. +#' demonstration purposes. #' #' @usage data("dax_model_3t") #' @@ -193,7 +193,7 @@ #' A pre-computed HHMM with monthly averaged closing prices of the #' DAX from 2010 to 2022 on the coarse scale, Volkswagen AG stock data on the #' fine scale, two hidden fine-scale and coarse-scale states, respectively, and -#' state-dependent t-distributions for demonstration purpose. +#' state-dependent t-distributions for demonstration purposes. #' #' @usage data("dax_vw_model") #' @@ -235,7 +235,7 @@ #' @description #' A pre-computed HHMM with monthly unemployment rate in the US on the coarse #' scale using 3 states and S&P 500 index data on the fine scale using 2 states -#' from 1970 to 2020 for demonstration purpose. +#' from 1970 to 2020 for demonstration purposes. #' #' @usage data("unemp_spx_model_3_2") #' diff --git a/R/decode_states.R b/R/decode_states.R index eb157f8b..3706b562 100644 --- a/R/decode_states.R +++ b/R/decode_states.R @@ -7,9 +7,9 @@ #' @references #' #' -#' @param x +#' @param x \[`fHMM_model`\]\cr #' An object of class \code{\link{fHMM_model}}. -#' @param verbose +#' @param verbose \[`logical(1)`\]\cr #' Set to \code{TRUE} to print progress messages. #' #' @return @@ -24,13 +24,23 @@ decode_states <- function(x, verbose = TRUE) { - ### check input - if (!inherits(x,"fHMM_model")) { - stop("'x' must be of class 'fHMM_model'.", call. = FALSE) - } - if (!isTRUE(verbose) && !isFALSE(verbose)) { - stop("'verbose' must be either TRUE or FALSE.", call. = FALSE) - } + ### check inputs + oeli::input_check_response( + check = if (inherits(x, "fHMM_model")) { + TRUE + } else { + "'x' must be of class 'fHMM_model'." + }, + var_name = "x" + ) + oeli::input_check_response( + check = if (checkmate::test_flag(verbose)) { + TRUE + } else { + "'verbose' must be either TRUE or FALSE." + }, + var_name = "verbose" + ) ### apply Viterbi algorithm par <- parUncon2par(x$estimate, x$data$controls) @@ -76,11 +86,11 @@ decode_states <- function(x, verbose = TRUE) { } #' @rdname decode_states -#' @param observations +#' @param observations \[`numeric()`\]\cr #' A \code{numeric} \code{vector} of state-dependent observations. -#' @param nstates +#' @param nstates \[`integer(1)`\]\cr #' The number of states. -#' @param sdd +#' @param sdd \[`character(1)`\]\cr #' A \code{character}, specifying the state-dependent distribution. One of #' \itemize{ #' \item \code{"normal"} (the normal distribution), @@ -89,23 +99,25 @@ decode_states <- function(x, verbose = TRUE) { #' \item \code{"gamma"} (the gamma distribution), #' \item \code{"poisson"} (the Poisson distribution). #' } -#' @param Gamma +#' @param Gamma \[`matrix()`\]\cr #' A transition probability \code{matrix} of dimension \code{nstates}. -#' @param mu +#' @param mu \[`numeric(nstates)`\]\cr #' A \code{numeric} vector of expected values for the state-dependent #' distribution in the different states of length \code{nstates}. #' #' For the gamma- or Poisson-distribution, \code{mu} must be positive. #' -#' @param sigma +#' @param sigma \[`NULL` | `numeric(nstates)`\]\cr #' A positive \code{numeric} vector of standard deviations for the -#' state-dependent distribution in the different states of length \code{nstates}. +#' state-dependent distribution in the different states of length +#' \code{nstates}. #' #' Not relevant in case of a state-dependent Poisson distribution. #' -#' @param df +#' @param df \[`NULL` | `numeric(nstates)`\]\cr #' A positive \code{numeric} vector of degrees of freedom for the -#' state-dependent distribution in the different states of length \code{nstates}. +#' state-dependent distribution in the different states of length +#' \code{nstates}. #' #' Only relevant in case of a state-dependent t-distribution. #' @@ -123,6 +135,43 @@ decode_states <- function(x, verbose = TRUE) { viterbi <- function( observations, nstates, sdd, Gamma, mu, sigma = NULL, df = NULL ) { + ### check inputs + oeli::input_check_response( + check = checkmate::check_numeric(observations, any.missing = FALSE), + var_name = "observations" + ) + oeli::input_check_response( + check = checkmate::check_count(nstates, positive = TRUE), + var_name = "nstates" + ) + oeli::input_check_response( + check = checkmate::check_choice( + sdd, c("normal", "lognormal", "t", "gamma", "poisson") + ), + var_name = "sdd" + ) + oeli::input_check_response( + check = checkmate::check_matrix( + Gamma, mode = "numeric", nrows = nstates, ncols = nstates + ), + var_name = "Gamma" + ) + oeli::input_check_response( + check = checkmate::check_numeric(mu, len = nstates), + var_name = "mu" + ) + if (sdd != "poisson") { + oeli::input_check_response( + check = checkmate::check_numeric(sigma, len = nstates, lower = 0), + var_name = "sigma" + ) + } + if (sdd == "t") { + oeli::input_check_response( + check = checkmate::check_numeric(df, len = nstates, lower = 0), + var_name = "df" + ) + } T <- length(observations) delta <- oeli::stationary_distribution(Gamma, soft_fail = TRUE) allprobs <- matrix(0, nstates, T) @@ -140,14 +189,17 @@ viterbi <- function( ) } if (sdd == "normal") { - allprobs[n, ] <- stats::dnorm(observations, mean = mu[n], sd = sigma[n]) + allprobs[n, ] <- stats::dnorm( + observations, mean = mu[n], sd = sigma[n] + ) } if (sdd == "lognormal") { - allprobs[n, ] <- stats::dlnorm(observations, meanlog = mu[n], - sdlog = sigma[n]) + allprobs[n, ] <- stats::dlnorm( + observations, meanlog = mu[n], sdlog = sigma[n] + ) } if (sdd == "poisson") { - allprobs[n, ] <- stats::dpois(observations, lambda = mu[n]) + allprobs[n, ] <- stats::dpois(observations, lambda = mu[n]) } } xi <- matrix(0, nstates, T) diff --git a/R/download_data.R b/R/download_data.R index a3351d08..95716dfb 100644 --- a/R/download_data.R +++ b/R/download_data.R @@ -17,26 +17,26 @@ #' \item \code{Volume}: Trade volume. #' } #' -#' @param symbol +#' @param symbol \[`character(1)`\]\cr #' A \code{character}, the stock's symbol. #' #' It must match the identifier on . -#' @param from +#' @param from \[`character(1)`\]\cr #' A \code{character} in the format \code{"YYYY-MM-DD"}, setting the lower #' data bound. #' #' Must not be earlier than \code{"1902-01-01"} (default). -#' @param to +#' @param to \[`character(1)`\]\cr #' A \code{character} in the format \code{"YYYY-MM-DD"}, setting the upper #' data bound. #' #' Default is the current date \code{Sys.date()}. -#' @param fill_dates +#' @param fill_dates \[`logical(1)`\]\cr #' Set to \code{TRUE} to fill missing dates (e.g., days at which the stock #' market is closed) with \code{NA}'s. #' #' By default, \code{fill_dates = FALSE}. -#' @param columns +#' @param columns \[`character()`\]\cr #' A \code{character} of requested data columns, see the details. #' #' By default, all columns are returned. @@ -62,15 +62,33 @@ download_data <- function( if (!curl::has_internet()) { stop("This function requires an internet connection.", call. = FALSE) } - if (missing(symbol) || !is.character(symbol) || length(symbol) != 1) { - stop("'symbol' must be a single character.", call. = FALSE) - } - if (!isTRUE(fill_dates) && !isFALSE(fill_dates)) { - stop("'fill_dates' must be TRUE or FALSE.", call. = FALSE) - } - if (!is.character(columns)) { - stop("'columns' must be a character vector.", call. = FALSE) - } + oeli::input_check_response( + check = if ( + !missing(symbol) && + checkmate::test_string(symbol, na.ok = FALSE) + ) { + TRUE + } else { + "'symbol' must be a single character." + }, + var_name = "symbol" + ) + oeli::input_check_response( + check = if (checkmate::test_flag(fill_dates)) { + TRUE + } else { + "'fill_dates' must be TRUE or FALSE." + }, + var_name = "fill_dates" + ) + oeli::input_check_response( + check = if (is.character(columns)) { + TRUE + } else { + "'columns' must be a character vector." + }, + var_name = "columns" + ) columns <- match.arg(columns, several.ok = TRUE) ### check range @@ -81,12 +99,22 @@ download_data <- function( from <- min_date } to <- check_date(to) - if (to < from) { - stop("'to' must not be earlier than 'from'.", call. = FALSE) - } - if (to > Sys.Date()) { - stop("'to' cannot be in the future.", call. = FALSE) - } + oeli::input_check_response( + check = if (to >= from) { + TRUE + } else { + "'to' must not be earlier than 'from'." + }, + var_name = "to" + ) + oeli::input_check_response( + check = if (to <= Sys.Date()) { + TRUE + } else { + "'to' cannot be in the future." + }, + var_name = "to" + ) ### API request url <- paste0("https://query2.finance.yahoo.com/v8/finance/chart/", symbol) diff --git a/R/fHMM-package.R b/R/fHMM-package.R index 922c8b67..6916d71a 100644 --- a/R/fHMM-package.R +++ b/R/fHMM-package.R @@ -1,13 +1,23 @@ #' @useDynLib fHMM, .registration=TRUE #' @keywords internal +#' @inherit fit_model examples "_PACKAGE" #' @noRd .onAttach <- function(lib, pkg) { msg <- c( - paste0("Thanks for using {fHMM} version ", utils::packageVersion("fHMM")), "!\n", - "See ", cli::style_hyperlink("https://loelschlaeger.de/fHMM", "https://loelschlaeger.de/fHMM") ," for help." + paste0( + "Thanks for using {fHMM} version ", + utils::packageVersion("fHMM") + ), + "!\n", + "See ", + cli::style_hyperlink( + "https://loelschlaeger.de/fHMM", + "https://loelschlaeger.de/fHMM" + ), + " for help." ) packageStartupMessage(msg) invisible() diff --git a/R/fHMM_colors.R b/R/fHMM_colors.R index f5d2cb1f..71f74bd1 100644 --- a/R/fHMM_colors.R +++ b/R/fHMM_colors.R @@ -4,10 +4,10 @@ #' This helper function defines a color scheme for visualizations in the #' \{fHMM\} package. #' -#' @param controls +#' @param controls \[`fHMM_controls`\]\cr #' An object of class \code{fHMM_controls}. #' It can be created with \code{\link{set_controls}}. -#' @param colors +#' @param colors \[`NULL` | `character()`\]\cr #' Either \code{NULL} (default) or a \code{character} vector of color names or #' hexadecimal RGB triplets. #' @@ -18,8 +18,10 @@ #' length \code{controls$states} of color codes, #' \item for \code{controls$hierarchy == TRUE} a \code{list} of #' \itemize{ -#' \item a \code{character} vector of length \code{controls$states[1]} and -#' \item a \code{character} matrix of dimensions \code{controls$states} +#' \item a \code{character} vector of length +#' \code{controls$states[1]} and +#' \item a \code{character} matrix of dimensions +#' \code{controls$states} #' } #' with color codes. #' } @@ -35,25 +37,46 @@ fHMM_colors <- function(controls, colors = NULL) { ### check inputs - if (!inherits(controls,"fHMM_controls")) { - stop("'controls' must be of class 'fHMM_controls'.", call. = FALSE) - } + oeli::input_check_response( + check = if (inherits(controls, "fHMM_controls")) { + TRUE + } else { + "'controls' must be of class 'fHMM_controls'." + }, + var_name = "controls" + ) if (is.null(colors)) { colors <- c("darkred", "red", "orange", "yellow", "green", "darkgreen") } - if (!is.character(colors)) { - stop("'colors' must be a character vector.", call. = FALSE) - } + oeli::input_check_response( + check = if (is.character(colors)) { + TRUE + } else { + "'colors' must be a character vector." + }, + var_name = "colors" + ) for (col in colors) { - out <- tryCatch(is.matrix(grDevices::col2rgb(col)), error = function(e) FALSE) - if (out == FALSE) { - stop("'", col, "' in 'colors' is not a valid color representation.", - call. = FALSE) - } + out <- tryCatch( + is.matrix(grDevices::col2rgb(col)), + error = function(e) FALSE + ) + oeli::input_check_response( + check = if (out) { + TRUE + } else { + paste0( + "'", col, "' in 'colors' is not a valid color representation." + ) + }, + var_name = "colors" + ) } ### helper functions - var_col <- function(col, n) grDevices::colorRampPalette(c("white", col, "black"))(n + 2)[2:(n + 1)] + var_col <- function(col, n) { + grDevices::colorRampPalette(c("white", col, "black"))(n + 2)[2:(n + 1)] + } base_col <- function(n) grDevices::colorRampPalette(colors)(n) col_alpha <- function(col, alpha = 0.6) grDevices::adjustcolor(col, alpha) diff --git a/R/fHMM_controls.R b/R/fHMM_controls.R index ba9277a8..d59adfa8 100644 --- a/R/fHMM_controls.R +++ b/R/fHMM_controls.R @@ -7,13 +7,13 @@ #' See the [vignette on controls](https://loelschlaeger.de/fHMM/articles/) #' for more details. #' -#' @param controls +#' @param controls \[`list()` | `fHMM_controls`\]\cr #' Either a \code{list} or an object of class \code{fHMM_controls}. #' #' The \code{list} can contain the following elements, which are described #' in more detail below: #' \itemize{ -#' \item \code{hierarchy}, defines an hierarchical HMM, +#' \item \code{hierarchy}, defines a hierarchical HMM, #' \item \code{states}, defines the number of states, #' \item \code{sdds}, defines the state-dependent distributions, #' \item \code{horizon}, defines the time horizon, @@ -28,15 +28,15 @@ #' Important: Specifications in \code{controls} always override individual #' specifications. #' -#' @param hierarchy -#' A \code{logical}, set to \code{TRUE} for an hierarchical HMM. +#' @param hierarchy \[`logical(1)`\]\cr +#' A \code{logical}, set to \code{TRUE} for a hierarchical HMM. #' #' If \code{hierarchy = TRUE}, some of the other controls must be specified for #' the coarse-scale and the fine-scale layer. #' #' By default, \code{hierarchy = FALSE}. #' -#' @param states +#' @param states \[`integer(1)` | `integer(2)`\]\cr #' An \code{integer}, the number of states of the underlying Markov chain. #' #' If \code{hierarchy = TRUE}, \code{states} must be a \code{vector} of length @@ -46,7 +46,7 @@ #' By default, \code{states = 2} if \code{hierarchy = FALSE} and #' \code{states = c(2, 2)} if \code{hierarchy = TRUE}. #' -#' @param sdds +#' @param sdds \[`character(1)` | `character(2)`\]\cr #' A \code{character}, specifying the state-dependent distribution. One of #' \itemize{ #' \item \code{"normal"} (the normal distribution), @@ -74,7 +74,7 @@ #' By default, \code{sdds = "normal"} if \code{hierarchy = FALSE} and #' \code{sdds = c("normal", "normal")} if \code{hierarchy = TRUE}. #' -#' @param horizon +#' @param horizon \[`integer(1)` | `integer(2)`\]\cr #' A \code{numeric}, specifying the length of the time horizon. #' #' If \code{hierarchy = TRUE}, \code{horizon} must be a \code{vector} of length @@ -88,7 +88,7 @@ #' \code{horizon} is ignored and the (coarse-scale) time horizon is defined by #' available data. #' -#' @param period +#' @param period \[`NA` | `character(1)`\]\cr #' Only relevant if \code{hierarchy = TRUE}. #' #' In this case, a \code{character} which specifies a flexible, periodic @@ -103,7 +103,7 @@ #' By default, \code{period = NA}. If \code{period} is not \code{NA}, it #' overrules \code{horizon[2]}. #' -#' @param data +#' @param data \[`NA` | `list()`\]\cr #' Either \code{NA}, in which case data is simulated (the default), or a #' \code{list} of controls specifying the empirical data set. #' @@ -124,7 +124,7 @@ #' #' Specifications in \code{data} override individual specifications. #' -#' @param file +#' @param file \[`data.frame` | `character()` | `list()`\]\cr #' A \code{data.frame} with data and dates for modeling. #' #' If \code{hierarchy = TRUE}, \code{file} can be a \code{list} of @@ -136,7 +136,7 @@ #' Alternatively, it can be a \code{character} (of length two), the path to a #' .csv-file with financial data. #' -#' @param date_column +#' @param date_column \[`character(1)` | `character(2)`\]\cr #' A \code{character}, the name of the column in \code{file} with dates. #' #' If \code{hierarchy = TRUE} and \code{file} is a \code{list} of two @@ -146,7 +146,7 @@ #' #' By default, \code{date_column = "Date"}. #' -#' @param data_column +#' @param data_column \[`character(1)` | `character(2)`\]\cr #' A \code{character}, the name of the column in \code{file} with observations. #' #' If \code{hierarchy = TRUE}, \code{data_column} must be a \code{vector} of @@ -156,15 +156,15 @@ #' By default, \code{data_column = "Close"} if \code{hierarchy = FALSE} and #' \code{data_column = c("Close", "Close")} if \code{hierarchy = TRUE}. #' -#' @param from +#' @param from \[`NA` | `character(1)`\]\cr #' A \code{character} of the format \code{"YYYY-MM-DD"}, setting a lower #' date limit. No lower limit if \code{from = NA} (default). #' -#' @param to +#' @param to \[`NA` | `character(1)`\]\cr #' A \code{character} of the format \code{"YYYY-MM-DD"}, setting an upper #' date limit. No lower limit if \code{to = NA} (default). #' -#' @param logreturns +#' @param logreturns \[`logical(1)` | `logical(2)`\]\cr #' A \code{logical}, if \code{TRUE} the data is transformed to log-returns. #' #' If \code{hierarchy = TRUE}, \code{logreturns} must be a \code{vector} of @@ -174,7 +174,7 @@ #' By default, \code{logreturns = FALSE} if \code{hierarchy = FALSE} and #' \code{logreturns = c(FALSE, FALSE)} if \code{hierarchy = TRUE}. #' -#' @param merge +#' @param merge \[`function`\]\cr #' Only relevant if \code{hierarchy = TRUE}. #' #' In this case, a \code{function} @@ -191,7 +191,7 @@ #' the relative change of the first to the last fine-scale observation. #' } #' -#' @param fit +#' @param fit \[`list()`\]\cr #' A \code{list} of controls specifying the model fitting. #' #' The \code{list} can contain the following elements, which are described @@ -211,14 +211,14 @@ #' #' Specifications in \code{fit} override individual specifications. #' -#' @param runs +#' @param runs \[`integer(1)`\]\cr #' An \code{integer}, setting the number of randomly initialized #' optimization runs of the model likelihood from which the best one is selected #' as the final model. #' #' By default, \code{runs = 10}. #' -#' @param origin +#' @param origin \[`logical(1)`\]\cr #' Only relevant for simulated data, i.e., if the \code{data} control is #' \code{NA}. #' @@ -228,37 +228,37 @@ #' #' By default, \code{origin = FALSE}. #' -#' @param accept +#' @param accept \[`integer()` | `"all"`\]\cr #' An \code{integer} (vector), specifying which optimization runs are #' accepted based on the output code of \code{\link[stats]{nlm}}. #' #' By default, \code{accept = 1:3}. #' -#' @param gradtol -#' A positive \code{numeric} value, specifying the gradient tolerance, passed on -#' to \code{\link[stats]{nlm}}. +#' @param gradtol \[`numeric(1)`\]\cr +#' A positive \code{numeric} value, specifying the gradient tolerance, passed +#' on to \code{\link[stats]{nlm}}. #' #' By default, \code{gradtol = 0.01}. #' -#' @param iterlim +#' @param iterlim \[`integer(1)`\]\cr #' A positive \code{integer} value, specifying the iteration limit, passed on #' to \code{\link[stats]{nlm}}. #' #' By default, \code{iterlim = 100}. #' -#' @param print.level +#' @param print.level \[`0` | `1` | `2`\]\cr #' One of \code{0}, \code{1}, and \code{2} to control the verbosity of the #' numerical likelihood optimization, passed on to \code{\link[stats]{nlm}}. #' #' By default, \code{print.level = 0}. #' -#' @param steptol -#' A positive \code{numeric} value, specifying the step tolerance, passed on +#' @param steptol \[`numeric(1)`\]\cr +#' A positive \code{numeric} value, specifying the step tolerance, passed on #' to \code{\link[stats]{nlm}}. #' -#' By default, \code{gradtol = 0.01}. +#' By default, \code{steptol = 0.01}. #' -#' @param x,object +#' @param x,object \[`fHMM_controls`\]\cr #' An object of class \code{fHMM_controls}. #' #' @param ... @@ -290,7 +290,7 @@ #' hierarchy = TRUE, # defines a hierarchy #' states = c(3, 2), # coarse scale and fine scale states #' sdds = c("gamma", "poisson"), # distributions for both layers -#' horizon = c(100, NA), # 100 simulated coarse-scale data points +#' horizon = c(100, NA), # 100 coarse-scale data points #' period = "m" # monthly simulated fine-scale data #' ) #' @@ -336,12 +336,17 @@ set_controls <- function( ) { ### check that input 'controls' is a 'list' - if (!is.list(controls)) { - stop( - "Input 'controls' must be a list or an object of class 'fHMM_controls'.", - call. = FALSE - ) - } + oeli::input_check_response( + check = if (is.list(controls)) { + TRUE + } else { + paste( + "Input 'controls' must be a list or an object of class", + "'fHMM_controls'." + ) + }, + var_name = "controls" + ) ### define names of all possible elements in 'controls' all_controls <- c( @@ -358,7 +363,8 @@ set_controls <- function( redundant_controls <- setdiff(names(controls), c(all_controls, "simulated")) if (length(redundant_controls) > 0) { warning( - "The following element(s) in 'controls' are ignored, did you misspll?\n", + "The following element(s) in 'controls' are ignored, ", + "did you misspell?\n", paste(redundant_controls, collapse = ", "), call. = FALSE ) @@ -366,18 +372,21 @@ set_controls <- function( } if (!is.null(controls[["data"]]) && !checkmate::test_scalar_na(controls[["data"]])) { - if (!is.list(controls[["data"]])) { - stop( - "Element 'data' in input 'controls' must be a list.", - call. = FALSE - ) - } + oeli::input_check_response( + check = if (is.list(controls[["data"]])) { + TRUE + } else { + "Element 'data' in input 'controls' must be a list." + }, + var_name = "controls$data" + ) redundant_data_controls <- setdiff( names(controls[["data"]]), c(data_controls, "data_inside") ) if (length(redundant_data_controls) > 0) { warning( - "The following element(s) in 'controls$data' are ignored, did you misspll?\n", + "The following element(s) in 'controls$data' are ignored, ", + "did you misspell?\n", paste(redundant_data_controls, collapse = ", "), call. = FALSE ) @@ -390,29 +399,35 @@ set_controls <- function( ) if (length(redundant_data_controls) > 0) { warning( - "The following element(s) in 'data' are ignored, did you misspll?\n", + "The following element(s) in 'data' are ignored, ", + "did you misspell?\n", paste(redundant_data_controls, collapse = ", "), call. = FALSE ) data[redundant_data_controls] <- NULL } - } else if (!is.na(data)) { - stop( - "Control 'data' must be a list or NA.", - call. = FALSE + } else if ( + !(length(data) == 1 && is.atomic(data) && is.na(data)) + ) { + oeli::input_check_response( + check = "Control 'data' must be a list or NA.", + var_name = "data" ) } if (!is.null(controls[["fit"]])) { - if (!is.list(controls[["fit"]])) { - stop( - "Element 'fit' in input 'controls' must be a list.", - call. = FALSE - ) - } + oeli::input_check_response( + check = if (is.list(controls[["fit"]])) { + TRUE + } else { + "Element 'fit' in input 'controls' must be a list." + }, + var_name = "controls$fit" + ) redundant_fit_controls <- setdiff(names(controls[["fit"]]), fit_controls) if (length(redundant_fit_controls) > 0) { warning( - "The following element(s) in 'controls$fit' are ignored, did you misspll?\n", + "The following element(s) in 'controls$fit' are ignored, ", + "did you misspell?\n", paste(redundant_fit_controls, collapse = ", "), call. = FALSE ) @@ -423,16 +438,17 @@ set_controls <- function( redundant_fit_controls <- setdiff(names(fit), fit_controls) if (length(redundant_fit_controls) > 0) { warning( - "The following element(s) in 'fit' are ignored, did you misspll?\n", + "The following element(s) in 'fit' are ignored, ", + "did you misspell?\n", paste(redundant_fit_controls, collapse = ", "), call. = FALSE ) fit[redundant_fit_controls] <- NULL } } else { - stop( - "Control 'fit' must be a list.", - call. = FALSE + oeli::input_check_response( + check = "Control 'fit' must be a list.", + var_name = "fit" ) } @@ -442,9 +458,14 @@ set_controls <- function( } else { controls[["hierarchy"]] <- hierarchy } - if (!checkmate::test_flag(hierarchy)) { - stop("The control 'hierarchy' must be TRUE or FALSE.", call. = FALSE) - } + oeli::input_check_response( + check = if (checkmate::test_flag(hierarchy)) { + TRUE + } else { + "The control 'hierarchy' must be TRUE or FALSE." + }, + var_name = "hierarchy" + ) ### set missing general controls if (!"states" %in% names(controls)) { @@ -474,9 +495,14 @@ set_controls <- function( } if (!"file" %in% names(controls[["data"]])) { if (!"file" %in% names(data)) { - if (identical(file, NA)) { - stop("Please specify 'file'.", call. = FALSE) - } + oeli::input_check_response( + check = if (!identical(file, NA)) { + TRUE + } else { + "Please specify 'file'." + }, + var_name = "file" + ) controls[["data"]][["file"]] <- file } else { controls[["data"]][["file"]] <- data[["file"]] @@ -589,29 +615,47 @@ set_controls <- function( validate_controls <- function(controls) { ### check that 'controls' is a list - if (!is.list(controls)) { - stop("Input 'controls' must be a list.", call. = FALSE) - } + oeli::input_check_response( + check = if (is.list(controls)) { + TRUE + } else { + "Input 'controls' must be a list." + }, + var_name = "controls" + ) ### check general controls hierarchy <- controls[["hierarchy"]] - if (!checkmate::test_flag(hierarchy)) { - stop("The control 'hierarchy' must be TRUE or FALSE.", call. = FALSE) - } + oeli::input_check_response( + check = if (checkmate::test_flag(hierarchy)) { + TRUE + } else { + "The control 'hierarchy' must be TRUE or FALSE." + }, + var_name = "hierarchy" + ) if (hierarchy) { - if (!checkmate::test_integerish(controls[["states"]], lower = 2, len = 2)) { - stop( - "The control 'states' must be a vector of integers greater or equal 2.", - call. = FALSE - ) - } + oeli::input_check_response( + check = if ( + checkmate::test_integerish(controls[["states"]], lower = 2, len = 2) + ) { + TRUE + } else { + "The control 'states' must be a vector of integers greater or equal 2." + }, + var_name = "states" + ) } else { - if (!checkmate::test_integerish(controls[["states"]], lower = 2, len = 1)) { - stop( - "The control 'states' must be an integer greater or equal 2.", - call. = FALSE - ) - } + oeli::input_check_response( + check = if ( + checkmate::test_integerish(controls[["states"]], lower = 2, len = 1) + ) { + TRUE + } else { + "The control 'states' must be an integer greater or equal 2." + }, + var_name = "states" + ) } controls[["sdds"]] <- fHMM_sdds( sdds = controls[["sdds"]], @@ -633,34 +677,51 @@ validate_controls <- function(controls) { if (is.na(controls[["horizon"]][2])) { controls[["horizon"]][2] <- NA_integer_ } - if (length(controls[["horizon"]]) != 2) { - stop("The control 'horizon' must be a vector of length 2.", call. = FALSE) - } + oeli::input_check_response( + check = if (length(controls[["horizon"]]) == 2) { + TRUE + } else { + "The control 'horizon' must be a vector of length 2." + }, + var_name = "horizon" + ) if (!all(is.na(controls[["horizon"]]))) { - if (!checkmate::test_integerish(controls[["horizon"]], lower = 1, len = 2)) { - stop( - "The control 'horizon' must be an integer vector of length 2.", - call. = FALSE - ) - } + oeli::input_check_response( + check = if ( + checkmate::test_integerish( + controls[["horizon"]], lower = 1, len = 2 + ) + ) { + TRUE + } else { + "The control 'horizon' must be an integer vector of length 2." + }, + var_name = "horizon" + ) } if (!is.na(controls[["period"]])) { - if (!controls[["period"]] %in% c("w", "m", "q", "y")) { - stop( - "The control 'period' must be one of 'w', 'm', 'q', 'y'.", - call. = FALSE - ) - } + oeli::input_check_response( + check = if (controls[["period"]] %in% c("w", "m", "q", "y")) { + TRUE + } else { + "The control 'period' must be one of 'w', 'm', 'q', 'y'." + }, + var_name = "period" + ) controls[["horizon"]][2] <- NA_integer_ } } else { if (!simulated) { controls[["horizon"]] <- NA_integer_ } else { - if (!checkmate::test_int(controls[["horizon"]], lower = 1)) { - stop("The control 'horizon' must be a positive integer.", - call. = FALSE) - } + oeli::input_check_response( + check = if (checkmate::test_int(controls[["horizon"]], lower = 1)) { + TRUE + } else { + "The control 'horizon' must be a positive integer." + }, + var_name = "horizon" + ) } controls[["period"]] <- NA_character_ } @@ -683,62 +744,98 @@ validate_controls <- function(controls) { ) controls[["data"]][["data_inside"]] <- TRUE } else if (checkmate::test_list(controls[["data"]][["file"]])) { - if (!checkmate::test_list( - controls[["data"]][["file"]], types = "data.frame", len = 2 - )) { - stop( - "The control 'file' in 'data' must be a data.frame.\n", - "It can also be a list with 2 'data.frame's.", - call. = FALSE - ) - } + oeli::input_check_response( + check = if ( + checkmate::test_list( + controls[["data"]][["file"]], types = "data.frame", len = 2 + ) + ) { + TRUE + } else { + paste( + "The control 'file' in 'data' must be a data.frame.\n", + "It can also be a list with 2 'data.frame's." + ) + }, + var_name = "data$file" + ) controls[["data"]][["data_inside"]] <- TRUE } else { controls[["data"]][["data_inside"]] <- FALSE - if (!checkmate::test_character( - controls[["data"]][["file"]], len = 2, any.missing = FALSE - )) { - stop( - "The control 'file' in 'data' must be a character vector of length two.", - call. = FALSE - ) - } - } - if (!checkmate::test_character( - controls[["data"]][["date_column"]], len = 2, any.missing = TRUE - )) { - stop( - "'date_column' in 'data' must be a character vector of length two.", - call. = FALSE - ) - } - if (!checkmate::test_character( - controls[["data"]][["data_column"]], len = 2 - )) { - stop( - "'data_column' in 'data' must be a character vector of length two.", - call. = FALSE - ) - } - if (!checkmate::test_logical(controls[["data"]][["logreturns"]], len = 2)) { - stop( - "'logreturns' in 'data' must be a boolean vector of length two.", - call. = FALSE - ) - } - if (!is.function(controls[["data"]][["merge"]])) { - stop( - "The control 'merge' in 'data' must be a function.", - call. = FALSE + oeli::input_check_response( + check = if ( + checkmate::test_character( + controls[["data"]][["file"]], len = 2, any.missing = FALSE + ) + ) { + TRUE + } else { + paste( + "The control 'file' in 'data' must be a character vector", + "of length two." + ) + }, + var_name = "data$file" ) } + oeli::input_check_response( + check = if ( + checkmate::test_character( + controls[["data"]][["date_column"]], + len = 2, + any.missing = TRUE + ) + ) { + TRUE + } else { + "'date_column' in 'data' must be a character vector of length two." + }, + var_name = "data$date_column" + ) + oeli::input_check_response( + check = if ( + checkmate::test_character( + controls[["data"]][["data_column"]], len = 2 + ) + ) { + TRUE + } else { + "'data_column' in 'data' must be a character vector of length two." + }, + var_name = "data$data_column" + ) + oeli::input_check_response( + check = if ( + checkmate::test_logical( + controls[["data"]][["logreturns"]], len = 2 + ) + ) { + TRUE + } else { + "'logreturns' in 'data' must be a boolean vector of length two." + }, + var_name = "data$logreturns" + ) + oeli::input_check_response( + check = if (is.function(controls[["data"]][["merge"]])) { + TRUE + } else { + "The control 'merge' in 'data' must be a function." + }, + var_name = "data$merge" + ) try_merge <- try(controls[["data"]][["merge"]](-10:10), silent = TRUE) - if (inherits(try_merge,"try-error") || !checkmate::test_number(try_merge)) { - stop( - "'merge' in 'data' should merge a vector into a single number.", - call. = FALSE - ) - } + oeli::input_check_response( + check = if ( + !inherits(try_merge, "try-error") && + checkmate::test_number(try_merge) + ) { + TRUE + } else { + "'merge' in 'data' should merge a vector into a single number." + }, + var_name = "data$merge" + ) } else { if (is.data.frame(controls[["data"]][["file"]])) { controls[["data"]][["file"]] <- list(controls[["data"]][["file"]]) @@ -750,31 +847,44 @@ validate_controls <- function(controls) { )) { controls[["data"]][["data_inside"]] <- TRUE } else { - stop( - "The control 'file' in 'data' must be a 'data.frame' or a character.", - call. = FALSE - ) - } - if (!checkmate::test_string( - controls[["data"]][["date_column"]], na.ok = TRUE) - ) { - stop( - "'date_column' in 'data' must be a single character.", - call. = FALSE - ) - } - if (!checkmate::test_string(controls[["data"]][["data_column"]])) { - stop( - "'data_column' in 'data' must be a single character.", - call. = FALSE - ) - } - if (!checkmate::test_flag(controls[["data"]][["logreturns"]])) { - stop( - "The control 'logreturns' in 'data' must be a boolean.", - call. = FALSE + oeli::input_check_response( + check = paste( + "The control 'file' in 'data' must be a 'data.frame' or a", + "character." + ), + var_name = "data$file" ) } + oeli::input_check_response( + check = if ( + checkmate::test_string( + controls[["data"]][["date_column"]], na.ok = TRUE + ) + ) { + TRUE + } else { + "'date_column' in 'data' must be a single character." + }, + var_name = "data$date_column" + ) + oeli::input_check_response( + check = if ( + checkmate::test_string(controls[["data"]][["data_column"]]) + ) { + TRUE + } else { + "'data_column' in 'data' must be a single character." + }, + var_name = "data$data_column" + ) + oeli::input_check_response( + check = if (checkmate::test_flag(controls[["data"]][["logreturns"]])) { + TRUE + } else { + "The control 'logreturns' in 'data' must be a boolean." + }, + var_name = "data$logreturns" + ) controls[["data"]][["merge"]] <- NA } for (i in if (hierarchy) 1:2 else 1) { @@ -782,56 +892,68 @@ validate_controls <- function(controls) { data <- controls[["data"]][["file"]][[i]] if (!is.na(controls[["data"]][["date_column"]][i])) { if (!controls[["data"]][["date_column"]][i] %in% colnames(data)) { - stop( - "Date column '", controls[["data"]][["date_column"]][i], - "' not found in supplied data.frame.", - call. = FALSE + oeli::input_check_response( + check = paste0( + "Date column '", controls[["data"]][["date_column"]][i], + "' not found in supplied data.frame." + ), + var_name = "data$date_column" ) } } if (!controls[["data"]][["data_column"]][i] %in% colnames(data)) { - stop( - "Data column '", controls[["data"]][["data_column"]][i], - "' not found in supplied data.frame.", - call. = FALSE + oeli::input_check_response( + check = paste0( + "Data column '", controls[["data"]][["data_column"]][i], + "' not found in supplied data.frame." + ), + var_name = "data$data_column" ) } } else { controls[["data"]][["file"]][i] <- suppressWarnings( normalizePath(controls[["data"]][["file"]][i]) ) - if (!file.exists(controls[["data"]][["file"]][i])) { - stop( - "File '", controls[["data"]][["file"]][i], "' not found.", - call. = FALSE - ) - } + oeli::input_check_response( + check = if (file.exists(controls[["data"]][["file"]][i])) { + TRUE + } else { + paste0("File '", controls[["data"]][["file"]][i], "' not found.") + }, + var_name = "data$file" + ) read_try <- suppressWarnings( try( utils::read.csv(file = controls[["data"]][["file"]][i]), silent = TRUE ) ) - if (inherits(read_try,"try-error")) { - stop( - "Unable to read '", controls[["data"]][["file"]][i], "'.", - call. = FALSE - ) - } + oeli::input_check_response( + check = if (!inherits(read_try, "try-error")) { + TRUE + } else { + paste0("Unable to read '", controls[["data"]][["file"]][i], "'.") + }, + var_name = "data$file" + ) if (!is.na(controls[["data"]][["date_column"]][i])) { if (!controls[["data"]][["date_column"]][i] %in% colnames(read_try)) { - stop( - "Date column '", controls[["data"]][["date_column"]][i], - "' not found in '", controls[["data"]][["file"]][i], "'.", - call. = FALSE + oeli::input_check_response( + check = paste0( + "Date column '", controls[["data"]][["date_column"]][i], + "' not found in '", controls[["data"]][["file"]][i], "'." + ), + var_name = "data$date_column" ) } } if (!controls[["data"]][["data_column"]][i] %in% colnames(read_try)) { - stop( - "Data column '", controls[["data"]][["data_column"]][i], - "' not found in '", controls[["data"]][["file"]][i], "'.", - call. = FALSE + oeli::input_check_response( + check = paste0( + "Data column '", controls[["data"]][["data_column"]][i], + "' not found in '", controls[["data"]][["file"]][i], "'." + ), + var_name = "data$data_column" ) } } @@ -839,18 +961,22 @@ validate_controls <- function(controls) { } ### check 'fit' controls - if (!checkmate::test_int(controls[["fit"]][["runs"]], lower = 1)) { - stop( - "The control 'runs' in 'fit' must be an integer.", - call. = FALSE - ) - } - if (!checkmate::test_flag(controls[["fit"]][["origin"]])) { - stop( - "The control 'origin' in 'fit' must be a boolean.", - call. = FALSE - ) - } + oeli::input_check_response( + check = if (checkmate::test_int(controls[["fit"]][["runs"]], lower = 1)) { + TRUE + } else { + "The control 'runs' in 'fit' must be an integer." + }, + var_name = "fit$runs" + ) + oeli::input_check_response( + check = if (checkmate::test_flag(controls[["fit"]][["origin"]])) { + TRUE + } else { + "The control 'origin' in 'fit' must be a boolean." + }, + var_name = "fit$origin" + ) if (controls[["fit"]][["origin"]]) { controls[["fit"]][["runs"]] <- 1 controls[["fit"]][["accept"]] <- 1:5 @@ -858,36 +984,59 @@ validate_controls <- function(controls) { if (any(controls[["fit"]][["accept"]] == "all")) { controls[["fit"]][["accept"]] <- 1:5 } - if (!all(controls[["fit"]][["accept"]] %in% 1:5)) { - stop( - "The control 'accept' in 'fit' must be a vector of integers from 1 to 5.", - call. = FALSE - ) - } - if (!checkmate::test_number(controls[["fit"]][["gradtol"]], lower = 0)) { - stop( - "The control 'gradtol' in 'fit' must be a positive number.", - call. = FALSE - ) - } - if (!checkmate::test_int(controls[["fit"]][["iterlim"]], lower = 1)) { - stop("The control 'iterlim' in 'fit' must be a positive integer.", - call. = FALSE) - } - if (!checkmate::test_int( - controls[["fit"]][["print.level"]], lower = 0, upper = 2 - )) { - stop( - "The control 'print.level' in 'fit' must be one of 0, 1, and 2.", - call. = FALSE - ) - } - if (!checkmate::test_number(controls[["fit"]][["steptol"]], lower = 0)) { - stop( - "The control 'steptol' in 'fit' must be a positive number.", - call. = FALSE - ) - } + oeli::input_check_response( + check = if (all(controls[["fit"]][["accept"]] %in% 1:5)) { + TRUE + } else { + paste( + "The control 'accept' in 'fit' must be a vector of integers", + "from 1 to 5." + ) + }, + var_name = "fit$accept" + ) + oeli::input_check_response( + check = if ( + checkmate::test_number(controls[["fit"]][["gradtol"]], lower = 0) + ) { + TRUE + } else { + "The control 'gradtol' in 'fit' must be a positive number." + }, + var_name = "fit$gradtol" + ) + oeli::input_check_response( + check = if ( + checkmate::test_int(controls[["fit"]][["iterlim"]], lower = 1) + ) { + TRUE + } else { + "The control 'iterlim' in 'fit' must be a positive integer." + }, + var_name = "fit$iterlim" + ) + oeli::input_check_response( + check = if ( + checkmate::test_int( + controls[["fit"]][["print.level"]], lower = 0, upper = 2 + ) + ) { + TRUE + } else { + "The control 'print.level' in 'fit' must be one of 0, 1, and 2." + }, + var_name = "fit$print.level" + ) + oeli::input_check_response( + check = if ( + checkmate::test_number(controls[["fit"]][["steptol"]], lower = 0) + ) { + TRUE + } else { + "The control 'steptol' in 'fit' must be a positive number." + }, + var_name = "fit$steptol" + ) ### return validated controls structure(controls, class = c("fHMM_controls", "list")) @@ -906,7 +1055,7 @@ print.fHMM_controls <- function(x, ...) { cat("\n") cat( "* number of runs:", x[["fit"]][["runs"]], - ifelse(x[["fit"]][["at_true"]], "(initialised at true values)", ""), "\n" + ifelse(x[["fit"]][["at_true"]], "(initialized at true values)", ""), "\n" ) invisible(x) } @@ -915,9 +1064,14 @@ print.fHMM_controls <- function(x, ...) { #' @exportS3Method summary.fHMM_controls <- function(object, ...) { - if (!inherits(object, "fHMM_controls")) { - stop("Not an object of class 'fHMM_controls'.", call. = FALSE) - } + oeli::input_check_response( + check = if (inherits(object, "fHMM_controls")) { + TRUE + } else { + "Not an object of class 'fHMM_controls'." + }, + var_name = "object" + ) utils::str(object, give.attr = FALSE, give.length = FALSE, no.list = TRUE) invisible(object) } diff --git a/R/fHMM_data.R b/R/fHMM_data.R index 30385d95..1afc9bf5 100644 --- a/R/fHMM_data.R +++ b/R/fHMM_data.R @@ -4,21 +4,21 @@ #' This function constructs an object of class \code{fHMM_data}, which contains #' the financial data for modeling. #' -#' @param dates +#' @param dates \[`any`\]\cr #' The dates in the empirical case. -#' @param time_points +#' @param time_points \[`any`\]\cr #' The time points in the simulated case. -#' @param markov_chain +#' @param markov_chain \[`any`\]\cr #' The states in the simulated case. -#' @param data +#' @param data \[`any`\]\cr #' The data for modeling. -#' @param time_series +#' @param time_series \[`any`\]\cr #' The data before transformation. -#' @param T_star +#' @param T_star \[`NULL` | `integer()`\]\cr #' The fine-scale chunk sizes. -#' @param controls +#' @param controls \[`fHMM_controls`\]\cr #' The \code{fHMM_controls} object. -#' @param true_parameters +#' @param true_parameters \[`NULL` | `fHMM_parameters`\]\cr #' The \code{fHMM_parameters} object in the simulated case. #' #' @return @@ -27,7 +27,8 @@ #' \itemize{ #' \item The \code{matrix} of the \code{dates} if \code{simulated = FALSE} and #' \code{controls$data$data_column} is specified, -#' \item the \code{matrix} of the \code{time_points} if \code{simulated = TRUE} +#' \item the \code{matrix} of the \code{time_points} if +#' \code{simulated = TRUE} #' or \code{controls$data$data_column} is not specified, #' \item the \code{matrix} of the simulated \code{markov_chain} if #' \code{simulated = TRUE}, @@ -42,7 +43,7 @@ #' } fHMM_data <- function( - dates, time_points, markov_chain, data, time_series, T_star, controls, + dates, time_points, markov_chain, data, time_series, T_star, controls, true_parameters ) { structure( @@ -65,14 +66,14 @@ fHMM_data <- function( #' @description #' This function simulates or reads financial data for the \{fHMM\} package. #' -#' @param controls +#' @param controls \[`fHMM_controls`\]\cr #' An object of class \code{fHMM_controls}. -#' @param true_parameters +#' @param true_parameters \[`NULL` | `fHMM_parameters`\]\cr #' An object of class \code{fHMM_parameters}, used as simulation parameters. #' By default, \code{true_parameters = NULL}, i.e., sampled true parameters. -#' @param seed +#' @param seed \[`NULL` | `integer(1)`\]\cr #' Set a seed for the data simulation. -#' No seed per default. +#' No seed by default. #' #' @return #' An object of class \code{\link{fHMM_data}}. @@ -88,19 +89,28 @@ fHMM_data <- function( prepare_data <- function(controls, true_parameters = NULL, seed = NULL) { ### check inputs - if (!inherits(controls,"fHMM_controls")) { - stop("'controls' is not of class 'fHMM_controls'.", call. = FALSE) - } + oeli::input_check_response( + check = if (inherits(controls, "fHMM_controls")) { + TRUE + } else { + "'controls' is not of class 'fHMM_controls'." + }, + var_name = "controls" + ) ### process data if (controls[["simulated"]]) { if (is.null(true_parameters)) { true_parameters <- fHMM_parameters(controls, seed = seed) } - if (!inherits(true_parameters,"fHMM_parameters")) { - stop("'true_parameters' is not of class 'fHMM_parameters'.", - call. = FALSE) - } + oeli::input_check_response( + check = if (inherits(true_parameters, "fHMM_parameters")) { + TRUE + } else { + "'true_parameters' is not of class 'fHMM_parameters'." + }, + var_name = "true_parameters" + ) data <- simulate_hmm( controls = controls, true_parameters = true_parameters, seed = seed ) @@ -122,7 +132,7 @@ prepare_data <- function(controls, true_parameters = NULL, seed = NULL) { } #' @rdname fHMM_data -#' @param x +#' @param x \[`fHMM_data`\]\cr #' An object of class \code{fHMM_data}. #' @param ... #' Currently not used. @@ -134,7 +144,7 @@ print.fHMM_data <- function(x, ...) { } #' @rdname fHMM_data -#' @param object +#' @param object \[`fHMM_data`\]\cr #' An object of class \code{fHMM_data}. #' @param ... #' Currently not used. diff --git a/R/fHMM_events.R b/R/fHMM_events.R index bdfdf6e8..6f27a525 100644 --- a/R/fHMM_events.R +++ b/R/fHMM_events.R @@ -3,7 +3,7 @@ #' @description #' This function checks the input \code{events}. #' -#' @param events +#' @param events \[`list()`\]\cr #' A \code{list} of two elements. #' * The first element is named \code{"dates"} and contains a \code{character} #' vector in format \code{"YYYY-MM-DD"}. @@ -29,23 +29,40 @@ fHMM_events <- function(events) { if (inherits(events, "fHMM_events")) { warning("This element already is of class 'fHMM_events'.", call. = FALSE) } else { - if (!inherits(events,"list")) { - stop("'events' must be a list.", call. = FALSE) - } - if (length(events) != 2) { - stop("'events' must be a list of two elements.", call. = FALSE) - } - if (!identical(names(events), c("dates", "labels"))) { - stop("'events' must be a list containing the elements 'dates' and 'labels'.", - call. = FALSE) - } + oeli::input_check_response( + check = if (inherits(events, "list")) { + TRUE + } else { + "'events' must be a list." + }, + var_name = "events" + ) + oeli::input_check_response( + check = if (length(events) == 2) { + TRUE + } else { + "'events' must be a list of two elements." + }, + var_name = "events" + ) + oeli::input_check_response( + check = if (identical(names(events), c("dates", "labels"))) { + TRUE + } else { + paste( + "'events' must be a list containing the elements", + "'dates' and 'labels'." + ) + }, + var_name = "events" + ) events$dates <- check_date(events$dates) class(events) <- "fHMM_events" } return(events) } -#' @param x +#' @param x \[`fHMM_events`\]\cr #' An object of class \code{fHMM_events}. #' @param ... #' Currently not used. diff --git a/R/fHMM_likelihood.R b/R/fHMM_likelihood.R index 4c209a55..66455d96 100644 --- a/R/fHMM_likelihood.R +++ b/R/fHMM_likelihood.R @@ -6,14 +6,14 @@ #' #' @inheritParams fHMM_parameters #' @inheritParams parameter_transformations -#' @param observations +#' @param observations \[`numeric()` | `matrix()`\]\cr #' A \code{numeric} \code{vector} of time-series data. #' #' In the hierarchical case (\code{hierarchy = TRUE}), a \code{matrix} with #' coarse-scale data in the first column and corresponding fine-scale data in #' the rows. #' @inheritParams set_controls -#' @param negative +#' @param negative \[`logical(1)`\]\cr #' Either \code{TRUE} to return the negative log-likelihood value (useful for #' optimization) or \code{FALSE} (default), else. #' @@ -79,11 +79,11 @@ ll_hmm <- function( #' @description #' This function computes the negative log-likelihood of an HMM. #' -#' @param parUncon +#' @param parUncon \[`parUncon`\]\cr #' An object of class \code{parUncon}. -#' @param observations +#' @param observations \[`numeric()`\]\cr #' The vector of the simulated or empirical data used for estimation. -#' @param controls +#' @param controls \[`fHMM_controls`\]\cr #' An object of class \code{fHMM_controls}. #' #' @return @@ -150,11 +150,11 @@ nLL_hmm <- function(parUncon, observations, controls) { #' @description #' This function computes the negative log-likelihood of an HHMM. #' -#' @param parUncon +#' @param parUncon \[`parUncon`\]\cr #' An object of class \code{parUncon}. -#' @param observations +#' @param observations \[`matrix()`\]\cr #' The matrix of the simulated or empirical data used for estimation. -#' @param controls +#' @param controls \[`fHMM_controls`\]\cr #' An object of class \code{fHMM_controls}. #' #' @return @@ -237,4 +237,4 @@ nLL_hhmm <- function(parUncon, observations, controls) { log_likelihoods = log_likelihoods, allprobs = allprobs, Gamma = Gamma, delta = delta, M = M, T = T ) -} \ No newline at end of file +} diff --git a/R/fHMM_model.R b/R/fHMM_model.R index 21630c25..184cdb7d 100644 --- a/R/fHMM_model.R +++ b/R/fHMM_model.R @@ -4,35 +4,35 @@ #' This function constructs an object of class \code{\link{fHMM_model}}, which #' contains details about the fitted (hierarchical) Hidden Markov model. #' -#' @param x,object +#' @param x,object \[`fHMM_model`\]\cr #' An object of class \code{\link{fHMM_model}}. #' @param ... #' Currently not used. -#' @param data +#' @param data \[`fHMM_data`\]\cr #' An object of class \code{\link{fHMM_data}}. -#' @param estimate +#' @param estimate \[`numeric()`\]\cr #' A \code{numeric} vector of unconstrained model estimates. -#' @param nlm_output +#' @param nlm_output \[`list()`\]\cr #' The output of \code{\link[stats]{nlm}} for the selected optimization run. -#' @param estimation_time +#' @param estimation_time \[`difftime`\]\cr #' A \code{diff.time} object, the total estimation time. -#' @param ll +#' @param ll \[`numeric(1)`\]\cr #' A \code{numeric}, the model log-likelihood. -#' @param lls +#' @param lls \[`numeric()`\]\cr #' A \code{numeric} vector, the model log-likelihoods in all optimization runs. -#' @param gradient +#' @param gradient \[`numeric()`\]\cr #' A \code{numeric} vector, the gradient at the optimum. -#' @param inverse_fisher +#' @param inverse_fisher \[`numeric()`\]\cr #' A \code{numeric} vector, the inverse Fisher information for each parameter. -#' @param decoding +#' @param decoding \[`NULL` | `numeric()` | `matrix()`\]\cr #' A \code{numeric} vector, the decoded time series. -#' @param alpha +#' @param alpha \[`numeric(1)`\]\cr #' A \code{numeric} between 0 and 1, the confidence level. -#' @param digits +#' @param digits \[`integer(1)`\]\cr #' The number of decimal places. -#' @param k +#' @param k \[`numeric(1)`\]\cr #' Passed on to \code{\link[stats]{AIC}}. -#' @param ahead +#' @param ahead \[`integer(1)`\]\cr #' The number of time points to predict ahead. #' #' @return @@ -64,7 +64,10 @@ fHMM_model <- function( print.fHMM_model <- function(x, ...) { cat("fHMM fitted model:\n") - cat("* total estimation time:", x$estimation_time, units(x$estimation_time), "\n") + cat( + "* total estimation time:", x$estimation_time, + units(x$estimation_time), "\n" + ) cat("* accepted runs:", sum(!is.na(x$lls)), "of", length(x$lls), "\n") cat("* log-likelihood:", x$ll, "\n") invisible(x) @@ -76,9 +79,14 @@ print.fHMM_model <- function(x, ...) { residuals.fHMM_model <- function(object, ...) { ### check input - if (!inherits(object,"fHMM_model")) { - stop("'object' must be of class 'fHMM_model'.", call. = FALSE) - } + oeli::input_check_response( + check = if (inherits(object, "fHMM_model")) { + TRUE + } else { + "'object' must be of class 'fHMM_model'." + }, + var_name = "object" + ) if (is.null(object[["residuals"]])) { stop("No residuals contained in 'object'.", "Please call 'compute_residuals()' first. ", call. = FALSE) @@ -224,7 +232,7 @@ coef.fHMM_model <- function(object, alpha = 0.05, digits = 2, ...) { AIC.fHMM_model <- function(object, ..., k = 2) { models <- list(...) - if(length(models) == 0){ + if (length(models) == 0) { models <- list(object) } else { models <- c(list(object), models) @@ -240,7 +248,7 @@ AIC.fHMM_model <- function(object, ..., k = 2) { BIC.fHMM_model <- function(object, ...) { models <- list(...) - if(length(models) == 0){ + if (length(models) == 0) { models <- list(object) } else { models <- c(list(object), models) @@ -279,7 +287,7 @@ npar <- function(object, ...) { npar.fHMM_model <- function(object, ...) { models <- list(...) - if(length(models) == 0){ + if (length(models) == 0) { models <- list(object) } else { models <- c(list(object), models) @@ -293,16 +301,31 @@ npar.fHMM_model <- function(object, ...) { predict.fHMM_model <- function(object, ahead = 5, alpha = 0.05, ...) { - ### check input - if (!inherits(object,"fHMM_model")) { - stop("'object' must be of class 'fHMM_model'.", call. = FALSE) - } - if (!checkmate::test_count(ahead, positive = TRUE)) { - stop("'ahead' must be a positive integer.", call. = FALSE) - } - if (!checkmate::test_number(alpha, lower = 0, upper = 1)) { - stop("'alpha' must be a numeric between 0 and 1.", call. = FALSE) - } + ### check inputs + oeli::input_check_response( + check = if (inherits(object, "fHMM_model")) { + TRUE + } else { + "'object' must be of class 'fHMM_model'." + }, + var_name = "object" + ) + oeli::input_check_response( + check = if (checkmate::test_count(ahead, positive = TRUE)) { + TRUE + } else { + "'ahead' must be a positive integer." + }, + var_name = "ahead" + ) + oeli::input_check_response( + check = if (checkmate::test_number(alpha, lower = 0, upper = 1)) { + TRUE + } else { + "'alpha' must be a numeric between 0 and 1." + }, + var_name = "alpha" + ) if (is.null(object$decoding)) { stop( "Prediction not available, please call 'decode_states()' first.", @@ -318,7 +341,14 @@ predict.fHMM_model <- function(object, ahead = 5, alpha = 0.05, ...) { ### predict states state_prediction <- matrix(NA_real_, nrow = ahead, ncol = M) - last_state <- tail(if (object$data$controls$hierarchy) object$decoding[, 1] else object$decoding, n = 1) + last_state <- tail( + if (object$data$controls$hierarchy) { + object$decoding[, 1] + } else { + object$decoding + }, + n = 1 + ) state_prob <- replace(numeric(M), last_state, 1) for (i in 1:ahead) { state_prob <- state_prob %*% par$Gamma diff --git a/R/fHMM_parameters.R b/R/fHMM_parameters.R index dd617339..396e44a9 100644 --- a/R/fHMM_parameters.R +++ b/R/fHMM_parameters.R @@ -5,12 +5,12 @@ #' Unspecified parameters are sampled. #' #' @details -#' See the [vignette on the model definition](https://loelschlaeger.de/fHMM/articles/) -#' for more details. +#' See the package vignettes at +#' for details. #' #' @inheritParams set_controls #' -#' @param Gamma,Gamma_star +#' @param Gamma,Gamma_star \[`NULL` | `matrix()` | `list()`\]\cr #' A transition probability \code{matrix}. #' #' It should have dimension \code{states[1]}. @@ -19,7 +19,7 @@ #' matrices. The \code{list} must be of length \code{states[1]}. #' Each transition probability matrix must be of dimension \code{states[2]}. #' -#' @param mu,mu_star +#' @param mu,mu_star \[`NULL` | `numeric()` | `list()`\]\cr #' A \code{numeric} vector of expected values for the state-dependent #' distribution in the different states. #' @@ -31,7 +31,7 @@ #' expectations. The \code{list} must be of length \code{states[1]}. #' Each \code{vector} must be of length \code{states[2]}. #' -#' @param sigma,sigma_star +#' @param sigma,sigma_star \[`NULL` | `numeric()` | `list()`\]\cr #' A positive \code{numeric} vector of standard deviations for the #' state-dependent distribution in the different states. #' @@ -41,7 +41,7 @@ #' standard deviations. The \code{list} must be of length \code{states[1]}. #' Each vector must be of length \code{states[2]}. #' -#' @param df,df_star +#' @param df,df_star \[`NULL` | `numeric()` | `list()`\]\cr #' A positive \code{numeric} vector of degrees of freedom for the #' state-dependent distribution in the different states. #' @@ -54,7 +54,7 @@ #' Each vector must be of length \code{states[2]}. #' Only relevant in case of a fine-scale state-dependent t-distribution. #' -#' @param scale_par +#' @param scale_par \[`numeric(2)`\]\cr #' A positive \code{numeric} vector of length two, containing scales for sampled #' expectations and standard deviations. #' @@ -62,10 +62,10 @@ #' \code{mu} and \code{sigma}, the second entry is the scale for #' \code{mu_star} and \code{sigma_star} (if any). #' -#' @param seed +#' @param seed \[`NULL` | `integer(1)`\]\cr #' Sets a seed for the sampling of parameters. #' -#' @param check_controls +#' @param check_controls \[`logical(1)`\]\cr #' Either \code{TRUE} to check the defined controls or \code{FALSE} to not check #' them (which saves computation time), else. #' @@ -104,12 +104,14 @@ fHMM_parameters <- function( class = "fHMM_controls" ) } - if (!checkmate::test_numeric(scale_par, len = 2, lower = 0)) { - stop( - "'scale_par' must be a positive numeric vector of length 2.", - call. = FALSE - ) - } + oeli::input_check_response( + check = if (checkmate::test_numeric(scale_par, len = 2, lower = 0)) { + TRUE + } else { + "'scale_par' must be a positive numeric vector of length 2." + }, + var_name = "scale_par" + ) ### extract specifications M <- controls[["states"]][1] # number of (coarse-scale) states @@ -170,12 +172,14 @@ fHMM_parameters <- function( for (i in 1:M) { if (sdds[[2]]$name %in% c("normal", "t", "lognormal")) { ### expectation is unrestricted - mu_star[[i]] <- stats::qunif((0:(N - 1) / N + stats::runif(1, 0, 1 / N)), -1, 1) * + probs <- 0:(N - 1) / N + stats::runif(1, 0, 1 / N) + mu_star[[i]] <- stats::qunif(probs, -1, 1) * scale_par[2] } if (sdds[[2]]$name %in% c("poisson", "gamma")) { ### expectation is positive - mu_star[[i]] <- stats::qunif((0:(N - 1) / N + stats::runif(1, 0, 1 / N)), 0, 1) * + probs <- 0:(N - 1) / N + stats::runif(1, 0, 1 / N) + mu_star[[i]] <- stats::qunif(probs, 0, 1) * scale_par[2] } } @@ -184,7 +188,8 @@ fHMM_parameters <- function( sigma_star <- list() for (i in 1:M) { ### standard deviation is positive - sigma_star[[i]] <- stats::qunif((0:(N - 1) / N + stats::runif(1, 0, 1 / N)), 0, 1) * + probs <- 0:(N - 1) / N + stats::runif(1, 0, 1 / N) + sigma_star[[i]] <- stats::qunif(probs, 0, 1) * scale_par[2] } } @@ -196,7 +201,8 @@ fHMM_parameters <- function( df_star <- list() for (i in 1:M) { ### degrees of freedom are positive - df_star[[i]] <- stats::qunif((0:(N - 1) / N + stats::runif(1, 0, 1 / N)), 1, 30) + probs <- 0:(N - 1) / N + stats::runif(1, 0, 1 / N) + df_star[[i]] <- stats::qunif(probs, 1, 30) } } } else { @@ -258,103 +264,146 @@ fHMM_parameters <- function( ### check parameters oeli::assert_transition_probability_matrix(Gamma, dim = M) if (sdds[[1]]$name %in% c("t", "normal", "lognormal")) { - if (!checkmate::test_numeric(mu, len = M)) { - stop( - paste("'mu' must be a numeric vector of length", M), - call. = FALSE - ) - } + oeli::input_check_response( + check = if (checkmate::test_numeric(mu, len = M)) { + TRUE + } else { + paste("'mu' must be a numeric vector of length", M) + }, + var_name = "mu" + ) } if (sdds[[1]]$name %in% c("gamma", "poisson")) { - if (!checkmate::test_numeric(mu, len = M) || any(mu <= 0)) { - stop( - paste("'mu' must be a positive numeric vector of length", M), - call. = FALSE - ) - } + oeli::input_check_response( + check = if (checkmate::test_numeric(mu, len = M) && all(mu > 0)) { + TRUE + } else { + paste("'mu' must be a positive numeric vector of length", M) + }, + var_name = "mu" + ) } if (sdds[[1]]$name != "poisson") { - if (!checkmate::test_numeric(sigma, len = M, lower = 0)) { - stop( - paste("'sigma' must be a positive numeric vector of length", M), - call. = FALSE - ) - } + oeli::input_check_response( + check = if (checkmate::test_numeric(sigma, len = M, lower = 0)) { + TRUE + } else { + paste("'sigma' must be a positive numeric vector of length", M) + }, + var_name = "sigma" + ) } if (sdds[[1]]$name == "t") { - if (!checkmate::test_numeric(df, len = M, lower = 0)) { - stop( - paste("'df' must be a positive numeric vector of length", M), - call. = FALSE - ) - } + oeli::input_check_response( + check = if (checkmate::test_numeric(df, len = M, lower = 0)) { + TRUE + } else { + paste("'df' must be a positive numeric vector of length", M) + }, + var_name = "df" + ) } if (controls[["hierarchy"]]) { - if (!is.list(Gamma_star) || length(Gamma_star) != M) { - stop( - paste("'Gamma_star' must be a list of length", M), - call. = FALSE - ) - } + oeli::input_check_response( + check = if (is.list(Gamma_star) && length(Gamma_star) == M) { + TRUE + } else { + paste("'Gamma_star' must be a list of length", M) + }, + var_name = "Gamma_star" + ) for (i in 1:M) { oeli::assert_transition_probability_matrix( Gamma_star[[i]], dim = N, .var.name = paste0("Gamma_star[[", i, "]]") ) } - if (!is.list(mu_star) || length(mu_star) != M) { - stop( - paste("'mu_star' must be a list of length", M), - call. = FALSE - ) - } + oeli::input_check_response( + check = if (is.list(mu_star) && length(mu_star) == M) { + TRUE + } else { + paste("'mu_star' must be a list of length", M) + }, + var_name = "mu_star" + ) for (i in 1:M) { if (sdds[[2]]$name %in% c("t", "normal", "lognormal")) { - if (!checkmate::test_numeric(mu_star[[i]], len = N)) { - stop( - paste("Element", i, "in 'mu_star' must be a numeric vector of length", N), - call. = FALSE - ) - } + oeli::input_check_response( + check = if (checkmate::test_numeric(mu_star[[i]], len = N)) { + TRUE + } else { + paste( + "Element", i, "in 'mu_star' must be a numeric vector of", + "length", N + ) + }, + var_name = paste0("mu_star[[", i, "]]") + ) } if (sdds[[2]]$name %in% c("gamma", "poisson")) { - if (!checkmate::test_numeric(mu_star[[i]], len = N) || any(mu_star[[i]] <= 0)) { - stop( - paste("Element", i, "in 'mu_star' must be a positive numeric vector of length", N), - call. = FALSE - ) - } + oeli::input_check_response( + check = if ( + checkmate::test_numeric(mu_star[[i]], len = N) && + all(mu_star[[i]] > 0) + ) { + TRUE + } else { + paste( + "Element", i, "in 'mu_star' must be a positive numeric", + "vector of length", N + ) + }, + var_name = paste0("mu_star[[", i, "]]") + ) } } if (sdds[[2]]$name != "poisson") { - if (!is.list(sigma_star) || length(sigma_star) != M) { - stop( - paste("'sigma_star' must be a list of length", M), - call. = FALSE - ) - } + oeli::input_check_response( + check = if (is.list(sigma_star) && length(sigma_star) == M) { + TRUE + } else { + paste("'sigma_star' must be a list of length", M) + }, + var_name = "sigma_star" + ) for (i in 1:M) { - if (!checkmate::test_numeric(sigma_star[[i]], len = N, lower = 0)) { - stop( - paste("Element", i, "in 'sigma_star' must be a positive numeric vector of length", N), - call. = FALSE - ) - } + oeli::input_check_response( + check = if ( + checkmate::test_numeric(sigma_star[[i]], len = N, lower = 0) + ) { + TRUE + } else { + paste( + "Element", i, "in 'sigma_star' must be a positive numeric", + "vector of length", N + ) + }, + var_name = paste0("sigma_star[[", i, "]]") + ) } } if (sdds[[2]]$name == "t") { - if (!is.list(df_star) || length(df_star) != M) { - stop( - paste("'df_star' must be a list of length", M), - call. = FALSE - ) - } + oeli::input_check_response( + check = if (is.list(df_star) && length(df_star) == M) { + TRUE + } else { + paste("'df_star' must be a list of length", M) + }, + var_name = "df_star" + ) for (i in 1:M) { - if (!checkmate::test_numeric(df_star[[i]], len = N, lower = 0)) { - stop( - paste("Element", i, "in 'df_star' must be a positive numeric vector of length", N), - call. = FALSE - ) - } + oeli::input_check_response( + check = if ( + checkmate::test_numeric(df_star[[i]], len = N, lower = 0) + ) { + TRUE + } else { + paste( + "Element", i, "in 'df_star' must be a positive numeric", + "vector of length", N + ) + }, + var_name = paste0("df_star[[", i, "]]") + ) } } } @@ -427,7 +476,7 @@ fHMM_parameters <- function( } #' @rdname fHMM_parameters -#' @param x +#' @param x \[`fHMM_parameters`\]\cr #' An object of class \code{fHMM_parameters}. #' @param ... #' Currently not used. @@ -454,11 +503,11 @@ print.fHMM_parameters <- function(x, ...) { #' #' @inheritParams set_controls #' -#' @param par +#' @param par \[`fHMM_parameters`\]\cr #' An object of class \code{\link{fHMM_parameters}}, which is a \code{list} #' of model parameters. #' -#' @param parCon +#' @param parCon \[`parCon`\]\cr #' An object of class \code{parCon}, which is a \code{numeric} \code{vector} #' with identified (and constrained) model parameters in the following order: #' \enumerate{ @@ -466,10 +515,11 @@ print.fHMM_parameters <- function(x, ...) { #' \item expectations \code{muCon} #' \item standard deviations \code{sigmaCon} (if any) #' \item degrees of freedom \code{dfCon} (if any) -#' \item fine-scale parameters for each coarse-scale state, in the same order (if any) +#' \item fine-scale parameters for each coarse-scale state, in the same order +#' (if any) #' } #' -#' @param parUncon +#' @param parUncon \[`parUncon`\]\cr #' An object of class \code{parUncon}, which is a \code{numeric} \code{vector} #' with identified and unconstrained model parameters in the following order: #' \enumerate{ @@ -477,14 +527,15 @@ print.fHMM_parameters <- function(x, ...) { #' \item expectations \code{muUncon} #' \item standard deviations \code{sigmaUncon} (if any) #' \item degrees of freedom \code{dfUncon} (if any) -#' \item fine-scale parameters for each coarse-scale state, in the same order (if any) +#' \item fine-scale parameters for each coarse-scale state, in the same order +#' (if any) #' } #' -#' @param link +#' @param link \[`logical(1)`\]\cr #' Either \code{TRUE} or \code{FALSE}, determining whether to apply the link #' function. #' -#' @param numerical_safeguard +#' @param numerical_safeguard \[`logical(1)`\]\cr #' Either \code{TRUE} or \code{FALSE}, determining whether to apply the #' following small corrections to boundary parameters to improve numerical #' performance when calculating and optimizing the likelihood function: @@ -492,21 +543,21 @@ print.fHMM_parameters <- function(x, ...) { #' by \code{1e-3} #' - standard deviations and degrees of freedom are bounded above by \code{100} #' -#' @param dim +#' @param dim \[`integer(1)`\]\cr #' An \code{integer}, the dimension of the transition probability matrix. #' -#' @param gammasCon,gammasUncon +#' @param gammasCon,gammasUncon \[`numeric()`\]\cr #' A vector of (un-) constrained non-diagonal transition probabilities. -#' @param muCon,muUncon +#' @param muCon,muUncon \[`numeric()`\]\cr #' A vector of (un-) constrained expected values. -#' @param sigmaCon,sigmaUncon +#' @param sigmaCon,sigmaUncon \[`numeric()`\]\cr #' A vector of (un-) constrained standard deviations. -#' @param dfCon,dfUncon +#' @param dfCon,dfUncon \[`numeric()`\]\cr #' A vector of (un-) constrained degrees of freedom. #' -#' @param prefix +#' @param prefix \[`character(1)`\]\cr #' A \code{character} prefix for labeling the parameters. -#' @param use_parameter_labels +#' @param use_parameter_labels \[`logical(1)`\]\cr #' Either \code{TRUE} to label the parameters or \code{FALSE}, if not (this can #' save computation time). #' @@ -520,8 +571,14 @@ NULL #' @export par2parUncon <- function(par, controls, use_parameter_labels = TRUE) { - stopifnot(inherits(par, "fHMM_parameters")) - stopifnot(inherits(controls, "fHMM_controls")) + oeli::input_check_response( + check = checkmate::check_class(par, "fHMM_parameters"), + var_name = "par" + ) + oeli::input_check_response( + check = checkmate::check_class(controls, "fHMM_controls"), + var_name = "controls" + ) sdds <- controls[["sdds"]] states <- controls[["states"]] parUncon <- Gamma2gammasUncon( @@ -621,8 +678,14 @@ par2parUncon <- function(par, controls, use_parameter_labels = TRUE) { parUncon2parCon <- function( parUncon, controls, use_parameter_labels = TRUE, numerical_safeguard = FALSE ) { - stopifnot(inherits(parUncon, "parUncon")) - stopifnot(inherits(controls, "fHMM_controls")) + oeli::input_check_response( + check = checkmate::check_class(parUncon, "parUncon"), + var_name = "parUncon" + ) + oeli::input_check_response( + check = checkmate::check_class(controls, "fHMM_controls"), + var_name = "controls" + ) sdds <- controls[["sdds"]] M <- controls[["states"]][1] parCon <- gammasUncon2gammasCon( @@ -741,8 +804,14 @@ parCon2par <- function(parCon, controls, use_parameter_labels = TRUE) { parCon_tmp <- parCon - stopifnot(inherits(parCon, "parCon")) - stopifnot(inherits(controls, "fHMM_controls")) + oeli::input_check_response( + check = checkmate::check_class(parCon, "parCon"), + var_name = "parCon" + ) + oeli::input_check_response( + check = checkmate::check_class(controls, "fHMM_controls"), + var_name = "controls" + ) sdds <- controls[["sdds"]] M <- controls[["states"]][1] Gamma <- gammasCon2Gamma( @@ -836,8 +905,14 @@ parCon2par <- function(parCon, controls, use_parameter_labels = TRUE) { #' @export par2parCon <- function(par, controls, use_parameter_labels = TRUE) { - stopifnot(inherits(par, "fHMM_parameters")) - stopifnot(inherits(controls, "fHMM_controls")) + oeli::input_check_response( + check = checkmate::check_class(par, "fHMM_parameters"), + var_name = "par" + ) + oeli::input_check_response( + check = checkmate::check_class(controls, "fHMM_controls"), + var_name = "controls" + ) parUncon2parCon( par2parUncon(par, controls, use_parameter_labels = use_parameter_labels), controls, @@ -851,8 +926,14 @@ par2parCon <- function(par, controls, use_parameter_labels = TRUE) { #' @export parCon2parUncon <- function(parCon, controls, use_parameter_labels = TRUE) { - stopifnot(inherits(parCon, "parCon")) - stopifnot(inherits(controls, "fHMM_controls")) + oeli::input_check_response( + check = checkmate::check_class(parCon, "parCon"), + var_name = "parCon" + ) + oeli::input_check_response( + check = checkmate::check_class(controls, "fHMM_controls"), + var_name = "controls" + ) par2parUncon( parCon2par(parCon, controls, use_parameter_labels = use_parameter_labels), controls, @@ -868,8 +949,14 @@ parCon2parUncon <- function(parCon, controls, use_parameter_labels = TRUE) { parUncon2par <- function( parUncon, controls, use_parameter_labels = TRUE, numerical_safeguard = FALSE ) { - stopifnot(inherits(parUncon, "parUncon")) - stopifnot(inherits(controls, "fHMM_controls")) + oeli::input_check_response( + check = checkmate::check_class(parUncon, "parUncon"), + var_name = "parUncon" + ) + oeli::input_check_response( + check = checkmate::check_class(controls, "fHMM_controls"), + var_name = "controls" + ) parCon2par( parUncon2parCon( parUncon, controls, use_parameter_labels = use_parameter_labels, @@ -1050,7 +1137,9 @@ gammasCon2gammasUncon <- function( gammasCon, dim, prefix = "gammasUncon_", use_parameter_labels = TRUE ) { Gamma2gammasUncon( - gammasCon2Gamma(gammasCon, dim, use_parameter_labels = use_parameter_labels), + gammasCon2Gamma( + gammasCon, dim, use_parameter_labels = use_parameter_labels + ), prefix = prefix, use_parameter_labels = use_parameter_labels ) @@ -1094,4 +1183,4 @@ gammasUncon2gammasCon <- function( use_parameter_labels = use_parameter_labels, numerical_safeguard = numerical_safeguard ) -} \ No newline at end of file +} diff --git a/R/fHMM_sdds.R b/R/fHMM_sdds.R index 0160549c..c069b408 100644 --- a/R/fHMM_sdds.R +++ b/R/fHMM_sdds.R @@ -20,65 +20,85 @@ fHMM_sdds <- function(sdds, states) { if (inherits(sdds, "fHMM_sdds")) { return(sdds) } - if (!checkmate::test_atomic_vector(states)) { - stop( - "The control 'states' must be a vector.", - call. = FALSE - ) - } + oeli::input_check_response( + check = if (checkmate::test_atomic_vector(states)) { + TRUE + } else { + "The control 'states' must be a vector." + }, + var_name = "states" + ) if (length(states) == 1) { hierarchy <- FALSE - if (!checkmate::test_integerish(states, lower = 2, len = 1)) { - stop( - "The control 'states' must be an integer greater or equal 2.", - call. = FALSE - ) - } + oeli::input_check_response( + check = if (checkmate::test_integerish(states, lower = 2, len = 1)) { + TRUE + } else { + "The control 'states' must be an integer greater or equal 2." + }, + var_name = "states" + ) } else if (length(states) == 2) { hierarchy <- TRUE - if (!checkmate::test_integerish(states, lower = 2, len = 2)) { - stop( - "The control 'states' must be a vector of integers greater or equal 2.", - call. = FALSE - ) - } - } else { - stop( - "The control 'states' must be a vector of length 1 or 2.", - call. = FALSE + oeli::input_check_response( + check = if (checkmate::test_integerish(states, lower = 2, len = 2)) { + TRUE + } else { + "The control 'states' must be a vector of integers greater or equal 2." + }, + var_name = "states" ) - } - if (!checkmate::test_character( - sdds, any.missing = FALSE, len = ifelse(hierarchy, 2, 1)) - ) { - stop( - "The control 'sdds' must be a character ", - if (hierarchy) "vector ", "of length ", ifelse(hierarchy, 2, 1), ".", - call. = FALSE + } else { + oeli::input_check_response( + check = "The control 'states' must be a vector of length 1 or 2.", + var_name = "states" ) } + oeli::input_check_response( + check = if ( + checkmate::test_character( + sdds, any.missing = FALSE, len = ifelse(hierarchy, 2, 1) + ) + ) { + TRUE + } else { + paste0( + "The control 'sdds' must be a character ", + if (hierarchy) "vector of length " else "of length ", + ifelse(hierarchy, 2, 1), "." + ) + }, + var_name = "sdds" + ) ### decode state-dependent distribution specification out <- list() for (i in if (hierarchy) 1:2 else 1) { sdd <- sdds[i] - checkmate::assert_string(sdd) + oeli::input_check_response( + check = checkmate::check_string(sdd), + var_name = "sdds" + ) sdd_tws <- gsub(" ", "", sdd) sdd_tws_split <- unlist(strsplit(sdd_tws, split = "[()]")) distr <- sdd_tws_split[1] - if (!distr %in% c("normal", "lognormal", "t", "gamma", "poisson")) { - stop( + oeli::input_check_response( + check = if ( + distr %in% c("normal", "lognormal", "t", "gamma", "poisson") + ) { + TRUE + } else { paste0( "Currently, only the following distributions are implemented:\n", - "- normal distribution ('normal')\n", - "- log-normal distribution ('lognormal')\n", + "- normal distribution ('normal')\n", + "- log-normal distribution ('lognormal')\n", "- t-distribution ('t')\n", - "- Gamma distribution ('gamma')\n", + "- Gamma distribution ('gamma')\n", "- Poisson distribution ('poisson')" - ), - call. = FALSE - ) - } + ) + }, + var_name = "sdds" + ) if (is.na(sdd_tws_split[2])) { pars <- list() } else { @@ -96,13 +116,17 @@ fHMM_sdds <- function(sdds, states) { ) names(pars) <- names for (par in names(pars)) { - if (!length(pars[[par]]) %in% c(1, states[i])) { - stop( - "Fixed values for the parameter '", par, - "' must be of length 1 or ", states[i], ".", - call. = FALSE - ) - } + oeli::input_check_response( + check = if (length(pars[[par]]) %in% c(1, states[i])) { + TRUE + } else { + paste0( + "Fixed values for the parameter '", par, + "' must be of length 1 or ", states[i], "." + ) + }, + var_name = par + ) } if (distr %in% c("t")) { pars[!names(pars) %in% c("mu", "sigma", "df")] <- NULL @@ -115,24 +139,41 @@ fHMM_sdds <- function(sdds, states) { } if (!is.null(pars$mu)) { if (distr %in% c("gamma", "poisson")) { - if (!checkmate::test_numeric(pars$mu) || any(pars$mu <= 0)) { - stop("'mu' must be a positive numeric.", call. = FALSE) - } + oeli::input_check_response( + check = if (checkmate::test_numeric(pars$mu) && all(pars$mu > 0)) { + TRUE + } else { + "'mu' must be a positive numeric." + }, + var_name = "mu" + ) } } else { pars$mu <- NULL } if (!is.null(pars$sigma)) { - if (!checkmate::test_numeric(pars$sigma) || any(pars$sigma <= 0)) { - stop("'sigma' must be a positive numeric.", call. = FALSE) - } + oeli::input_check_response( + check = if ( + checkmate::test_numeric(pars$sigma) && all(pars$sigma > 0) + ) { + TRUE + } else { + "'sigma' must be a positive numeric." + }, + var_name = "sigma" + ) } else { pars$sigma <- NULL } if (!is.null(pars$df)) { - if (!checkmate::test_numeric(pars$df) || any(pars$df <= 0)) { - stop("'df' must be a positive numeric.", call. = FALSE) - } + oeli::input_check_response( + check = if (checkmate::test_numeric(pars$df) && all(pars$df > 0)) { + TRUE + } else { + "'df' must be a positive numeric." + }, + var_name = "df" + ) } else if (distr == "t") { pars$df <- NULL } diff --git a/R/fit_model.R b/R/fit_model.R index bf9b5f7c..583e9b1e 100644 --- a/R/fit_model.R +++ b/R/fit_model.R @@ -8,15 +8,15 @@ #' Multiple optimization runs starting from different initial values are #' computed in parallel if \code{ncluster > 1}. #' -#' @param data +#' @param data \[`fHMM_data`\]\cr #' An object of class \code{\link{fHMM_data}}. #' -#' @param ncluster +#' @param ncluster \[`integer(1)`\]\cr #' Set the number of clusters for parallel optimization runs to reduce #' optimization time. #' By default, \code{ncluster = 1} (no clustering). #' -#' @param verbose +#' @param verbose \[`logical(1)`\]\cr #' Set to \code{TRUE} to print progress messages. #' #' @inheritParams set_controls @@ -64,15 +64,30 @@ fit_model <- function( ) { ### check inputs - if (!inherits(data, "fHMM_data")) { - stop("'data' is not of class 'fHMM_data'.", call. = FALSE) - } - if (!checkmate::test_count(ncluster, positive = TRUE)) { - stop("'ncluster' must be a positive integer.", call. = FALSE) - } - if (!checkmate::test_flag(verbose)) { - stop("'verbose' must be either TRUE or FALSE.", call. = FALSE) - } + oeli::input_check_response( + check = if (inherits(data, "fHMM_data")) { + TRUE + } else { + "'data' is not of class 'fHMM_data'." + }, + var_name = "data" + ) + oeli::input_check_response( + check = if (checkmate::test_count(ncluster, positive = TRUE)) { + TRUE + } else { + "'ncluster' must be a positive integer." + }, + var_name = "ncluster" + ) + oeli::input_check_response( + check = if (checkmate::test_flag(verbose)) { + TRUE + } else { + "'verbose' must be either TRUE or FALSE." + }, + var_name = "verbose" + ) data[["controls"]] <- set_controls( controls = controls, hierarchy = data[["controls"]][["hierarchy"]], @@ -248,4 +263,4 @@ fit_model <- function( ### return 'fHMM_model' object return(out) -} \ No newline at end of file +} diff --git a/R/get_initial_values.R b/R/get_initial_values.R index 02abeef0..c55fc6cb 100644 --- a/R/get_initial_values.R +++ b/R/get_initial_values.R @@ -4,7 +4,7 @@ #' This helper function generates a set of initial values for the numerical #' optimization of the model likelihood function. #' -#' @param initial_estimate +#' @param initial_estimate \[`NULL` | `parUncon`\]\cr #' Optionally defines an initial estimate for the numerical likelihood #' optimization. Good initial estimates can improve the optimization process. #' Can be: @@ -16,7 +16,7 @@ #' unconstrained model parameters), for example the estimate of a #' previously fitted model (i.e. the element \code{model$estimate}). #' -#' @param seed +#' @param seed \[`NULL` | `integer(1)`\]\cr #' Set a seed for the generation of initial values. #' No seed by default. #' @@ -28,15 +28,28 @@ #' @keywords internal get_initial_values <- function( - data, ncluster = 1, seed = NULL, verbose = TRUE, initial_estimate = NULL + data, ncluster = 1, seed = NULL, verbose = TRUE, + initial_estimate = NULL ) { ### input checks - checkmate::assert_class(data, "fHMM_data") - checkmate::assert_number(ncluster) - checkmate::assert_flag(verbose) + oeli::input_check_response( + check = checkmate::check_class(data, "fHMM_data"), + var_name = "data" + ) + oeli::input_check_response( + check = checkmate::check_number(ncluster), + var_name = "ncluster" + ) + oeli::input_check_response( + check = checkmate::check_flag(verbose), + var_name = "verbose" + ) controls <- data[["controls"]] - checkmate::assert_class(controls, "fHMM_controls") + oeli::input_check_response( + check = checkmate::check_class(controls, "fHMM_controls"), + var_name = "controls" + ) runs <- controls[["fit"]][["runs"]] ### set seed @@ -62,23 +75,31 @@ get_initial_values <- function( ### check correct format expected_length <- length(par2parUncon(fHMM_parameters(controls), controls)) test_initial_estimate <- oeli::test_numeric_vector( - initial_estimate, finite = TRUE, any.missing = FALSE, len = expected_length + initial_estimate, finite = TRUE, any.missing = FALSE, + len = expected_length ) if (!test_initial_estimate) { ll <- NA_real_ if (verbose) { error_msg <- oeli::check_numeric_vector( - initial_estimate, finite = TRUE, any.missing = FALSE, len = expected_length + initial_estimate, finite = TRUE, any.missing = FALSE, + len = expected_length ) message("'initial_estimate' is bad: ", error_msg) } } else { ### check implied log-likelihood value - ll <- try(compute_ll_at_initial_estimate(initial_estimate), silent = TRUE) + ll <- try( + compute_ll_at_initial_estimate(initial_estimate), + silent = TRUE + ) } ### return value - if (!(inherits(ll, "try-error") || is.na(ll) || is.nan(ll) || abs(ll) > 1e100)) { + ll_failed <- ( + inherits(ll, "try-error") || is.na(ll) || is.nan(ll) || abs(ll) > 1e100 + ) + if (!ll_failed) { if (return_value) { return(ll) } else { @@ -101,10 +122,13 @@ get_initial_values <- function( if (verbose) { message("Initializing using given value 'initial_estimate'") } - if (!check_initial_estimate(initial_estimate, verbose = verbose, return_value = FALSE)) { + if (!check_initial_estimate( + initial_estimate, verbose = verbose, return_value = FALSE + )) { if (verbose) { message( - "Initializing at 'initial_estimate' failed, applying heuristic instead" + "Initializing at 'initial_estimate' failed, ", + "applying heuristic instead" ) } initial_estimate <- NULL @@ -112,13 +136,17 @@ get_initial_values <- function( class(initial_estimate) <- c("parUncon", "numeric") initial_estimate <- try( par2parUncon( - parUncon2par(initial_estimate, controls), controls, use_parameter_labels = TRUE - ), silent = TRUE + parUncon2par(initial_estimate, controls), + controls, + use_parameter_labels = TRUE + ), + silent = TRUE ) if (inherits(initial_estimate, "try-error")) { if (verbose) { message( - "Initializing at 'initial_estimate' failed, applying heuristic instead" + "Initializing at 'initial_estimate' failed, ", + "applying heuristic instead" ) } initial_estimate <- NULL @@ -132,7 +160,9 @@ get_initial_values <- function( message("Initializing at true values") } initial_estimate <- par2parUncon(data[["true_parameters"]], controls) - if (check_initial_estimate(initial_estimate, verbose = verbose, return_value = FALSE)) { + if (check_initial_estimate( + initial_estimate, verbose = verbose, return_value = FALSE + )) { ### only one initial value in this case return(list(initial_estimate)) @@ -191,7 +221,8 @@ get_initial_values <- function( ### heuristic for coarse-scale heuristic_cs <- initial_heuristic( data = data[["data"]][, 1], states = controls[["states"]][1], - positive_mu = controls[["sdds"]][[1]][["name"]] %in% c("gamma", "poisson") + positive_mu = controls[["sdds"]][[1]][["name"]] %in% + c("gamma", "poisson") ) cluster_cs <- heuristic_cs[["cluster"]] initial_estimate_list_cs <- heuristic_cs[["pars"]] @@ -204,14 +235,17 @@ get_initial_values <- function( cluster_fs_data <- as.vector(data[["data"]][s == cluster_cs, -1]) heuristic_fs <- initial_heuristic( cluster_fs_data, states = controls[["states"]][2], - positive_mu = controls[["sdds"]][[2]][["name"]] %in% c("gamma", "poisson") + positive_mu = controls[["sdds"]][[2]][["name"]] %in% + c("gamma", "poisson") ) Gamma_star[[s]] <- heuristic_fs[["pars"]][["Gamma"]] mu_star[[s]] <- heuristic_fs[["pars"]][["mu"]] sigma_star[[s]] <- heuristic_fs[["pars"]][["sigma"]] } initial_estimate_list_fs <- list( - "Gamma_star" = Gamma_star, "mu_star" = mu_star, "sigma_star" = sigma_star + "Gamma_star" = Gamma_star, + "mu_star" = mu_star, + "sigma_star" = sigma_star ) ### combine coarse-scale and fine-scale @@ -227,7 +261,8 @@ get_initial_values <- function( } else { initial_estimate_list <- initial_heuristic( data = data[["data"]], states = controls[["states"]], - positive_mu = controls[["sdds"]][[1]][["name"]] %in% c("gamma", "poisson") + positive_mu = controls[["sdds"]][[1]][["name"]] %in% + c("gamma", "poisson") )[["pars"]] initial_estimate <- par2parUncon( do.call( @@ -251,7 +286,10 @@ get_initial_values <- function( jittered[, id] <- jitter(jittered[, id], factor = 10) } lapply(seq_len(N), function(i) { - structure(jittered[i, ], names = par_names, class = c("parUncon", "numeric")) + structure( + jittered[i, ], names = par_names, + class = c("parUncon", "numeric") + ) }) } @@ -270,7 +308,7 @@ get_initial_values <- function( ind <- which(is.na(ll_at_initial_values)) N <- length(initial_values) - ### stopping criterium + ### stopping criterion if (length(ind) == 0 && N == runs) { break } @@ -311,7 +349,9 @@ get_initial_values <- function( ### replace initial values that lead to NA ind <- which(is.na(ll_at_initial_values)) if (length(ind) > 0) { - initial_values[ind] <- jitter_initial_estimate(initial_estimate, length(ind)) + initial_values[ind] <- jitter_initial_estimate( + initial_estimate, length(ind) + ) } ### drop largest negative log-likelihood value @@ -324,4 +364,4 @@ get_initial_values <- function( ### return list of initial values return(initial_values) -} \ No newline at end of file +} diff --git a/R/helpers.R b/R/helpers.R index 255bd795..5cbc7257 100644 --- a/R/helpers.R +++ b/R/helpers.R @@ -15,9 +15,14 @@ check_date <- function(date) { date <- try(as.Date(date, format = "%Y-%m-%d"), silent = TRUE) - if (inherits(date, "try-error") || anyNA(date)) { - stop("Date is not in required format 'YYYY-MM-DD'.", call. = FALSE) - } + oeli::input_check_response( + check = if (!inherits(date, "try-error") && !anyNA(date)) { + TRUE + } else { + "Date is not in required format 'YYYY-MM-DD'." + }, + var_name = "date" + ) return(date) } @@ -58,6 +63,9 @@ find_closest_year <- function(date) { #' @keywords internal list_to_vector <- function(x) { - stopifnot(is.list(x)) + oeli::input_check_response( + check = checkmate::check_list(x), + var_name = "x" + ) unlist(lapply(x, function(m) ifelse(is.null(m), NA, m))) -} \ No newline at end of file +} diff --git a/R/parameter_labels.R b/R/parameter_labels.R index c6120777..f946c257 100644 --- a/R/parameter_labels.R +++ b/R/parameter_labels.R @@ -3,10 +3,10 @@ #' @description #' This helper function creates labels for the estimated HMM parameters. #' -#' @param controls +#' @param controls \[`fHMM_controls`\]\cr #' An object of class \code{fHMM_controls}. #' -#' @param expected_length +#' @param expected_length \[`NULL` | `integer(1)`\]\cr #' The expected output length. If \code{NULL} (default), this is not checked. #' #' @return @@ -16,13 +16,27 @@ parameter_labels <- function(controls, expected_length = NULL) { - ### check input - if (!inherits(controls,"fHMM_controls")) { - stop("'controls' is not of class 'fHMM_controls'.", call. = FALSE) - } - if (!checkmate::test_count(expected_length, positive = TRUE, null.ok = TRUE)) { - stop("'expected_length' must be a positive integer.", call. = FALSE) - } + ### check inputs + oeli::input_check_response( + check = if (inherits(controls, "fHMM_controls")) { + TRUE + } else { + "'controls' is not of class 'fHMM_controls'." + }, + var_name = "controls" + ) + oeli::input_check_response( + check = if ( + checkmate::test_count( + expected_length, positive = TRUE, null.ok = TRUE + ) + ) { + TRUE + } else { + "'expected_length' must be a positive integer." + }, + var_name = "expected_length" + ) ### helper function for tpm labels tpm_labels <- function(dim) { @@ -49,7 +63,10 @@ parameter_labels <- function(controls, expected_length = NULL) { } if (controls[["hierarchy"]]) { for (i in 1:controls$states[1]) { - labels <- c(labels, paste0("Gamma*", i, "_", tpm_labels(controls$states[2]))) + labels <- c( + labels, + paste0("Gamma*", i, "_", tpm_labels(controls$states[2])) + ) for (par in par_types(2)) { if (is.null(controls[["sdds"]][[2]]$pars[[par]])) { labels <- c(labels, paste0(par, "*", i, "_", 1:controls$states[2])) @@ -60,7 +77,14 @@ parameter_labels <- function(controls, expected_length = NULL) { ### check and return parameter labels if (!is.null(expected_length)) { - stopifnot(length(labels) == expected_length) + oeli::input_check_response( + check = if (length(labels) == expected_length) { + TRUE + } else { + "'expected_length' does not match the number of labels." + }, + var_name = "expected_length" + ) } return(labels) } diff --git a/R/plot.R b/R/plot.R index 029fc38a..1cbe1c86 100644 --- a/R/plot.R +++ b/R/plot.R @@ -3,7 +3,7 @@ #' @description #' This function is the plot method for an object of class \code{fHMM_data}. #' -#' @param x +#' @param x \[`fHMM_data`\]\cr #' An object of class \code{fHMM_data}. #' @inheritParams plot.fHMM_model #' @@ -19,23 +19,38 @@ plot.fHMM_data <- function( x, events = NULL, title = NULL, from = NULL, to = NULL, ... ) { - ### check input - if (!inherits(x, "fHMM_data")) { - stop("'x' is not of class 'fHMM_data'.", call. = FALSE) - } + ### check inputs + oeli::input_check_response( + check = if (inherits(x, "fHMM_data")) { + TRUE + } else { + "'x' is not of class 'fHMM_data'." + }, + var_name = "x" + ) if (!is.null(events)) { - if (!inherits(events, "fHMM_events")) { - stop("'events' is not of class 'fHMM_events'.", call. = FALSE) - } + oeli::input_check_response( + check = if (inherits(events, "fHMM_events")) { + TRUE + } else { + "'events' is not of class 'fHMM_events'." + }, + var_name = "events" + ) if (x$controls$simulated) { events <- NULL warning("Can't have 'events' for simulated data.", call. = FALSE) } } if (!is.null(title)) { - if (!(is.character(title) && length(title) == 1)) { - stop("'title' must be a single 'character' (or 'NULL').", call. = FALSE) - } + oeli::input_check_response( + check = if (checkmate::test_string(title)) { + TRUE + } else { + "'title' must be a single 'character' (or 'NULL')." + }, + var_name = "title" + ) } ### visualization @@ -52,9 +67,9 @@ plot.fHMM_data <- function( #' This function is the plot method for an object of class #' \code{\link{fHMM_model}}. #' -#' @param x +#' @param x \[`fHMM_model`\]\cr #' An object of class \code{\link{fHMM_model}}. -#' @param plot_type +#' @param plot_type \[`character()`\]\cr #' A character (vector), specifying the type of plot and can be one (or more) of #' \itemize{ #' \item \code{"ll"} for a visualization of the likelihood values in the @@ -64,17 +79,17 @@ plot.fHMM_data <- function( #' \item \code{"pr"} for a visualization of the model's (pseudo-) residuals, #' \item \code{"ts"} for a visualization of the financial time series. #' } -#' @param events +#' @param events \[`NULL` | `fHMM_events`\]\cr #' An object of class \code{\link{fHMM_events}}. -#' @param title +#' @param title \[`NULL` | `character(1)`\]\cr #' Optionally a \code{character} for a custom title. #' @inheritParams fHMM_colors #' @inheritParams plot_ll -#' @param from +#' @param from \[`NULL` | `character(1)`\]\cr #' Optionally a \code{character}, a date in format \code{"YYYY-MM-DD"}, #' setting the lower date bound for plotting. #' By default, \code{from = NULL}, i.e. no lower bound. -#' @param to +#' @param to \[`NULL` | `character(1)`\]\cr #' Optionally a \code{character}, a date in format \code{"YYYY-MM-DD"}, #' setting the upper date bound for plotting. #' By default, \code{to = NULL}, i.e. no upper bound. @@ -91,28 +106,47 @@ plot.fHMM_model <- function( title = NULL, from = NULL, to = NULL, ... ) { - ### check input - if (!inherits(x, "fHMM_model")) { - stop("'x' is not of class 'fHMM_model'.", call. = FALSE) - } + ### check inputs + oeli::input_check_response( + check = if (inherits(x, "fHMM_model")) { + TRUE + } else { + "'x' is not of class 'fHMM_model'." + }, + var_name = "x" + ) plot_type <- intersect(plot_type, c("ll", "sdds", "pr", "ts")) - if (length(plot_type) == 0) { - stop("'plot_type' is misspecified, please see the documentation.", - call. = FALSE) - } + oeli::input_check_response( + check = if (length(plot_type) > 0) { + TRUE + } else { + "'plot_type' is misspecified, please see the documentation." + }, + var_name = "plot_type" + ) if (!is.null(events)) { - if (!inherits(events, "fHMM_events")) { - stop("'events' is not of class 'fHMM_events'.", call. = FALSE) - } + oeli::input_check_response( + check = if (inherits(events, "fHMM_events")) { + TRUE + } else { + "'events' is not of class 'fHMM_events'." + }, + var_name = "events" + ) if (x$data$controls$simulated) { events <- NULL warning("Can't have 'events' for simulated data.", call. = FALSE) } } if (!is.null(title)) { - if (!(is.character(title) && length(title) == 1)) { - stop("'title' must be a single 'character' (or 'NULL').", call. = FALSE) - } + oeli::input_check_response( + check = if (checkmate::test_string(title)) { + TRUE + } else { + "'title' must be a single 'character' (or 'NULL')." + }, + var_name = "title" + ) } ### create and check colors @@ -132,7 +166,8 @@ plot.fHMM_model <- function( if ("pr" %in% plot_type) { if (is.null(x$residuals)) { warning( - "Residuals are not available, please call 'compute_residuals()' first.", + "Residuals are not available, ", + "please call 'compute_residuals()' first.", call. = FALSE ) } else { @@ -155,9 +190,9 @@ plot.fHMM_model <- function( #' This function plots the log-likelihood values of the different optimization #' runs. #' -#' @param lls +#' @param lls \[`numeric()`\]\cr #' A \code{numeric} vector of log-likelihood values. -#' @param ll_relative +#' @param ll_relative \[`logical(1)`\]\cr #' A \code{logical}, set to \code{TRUE} (default) to plot the differences from #' the best log-likelihood value. Set to \code{FALSE} to plot the absolute #' values. @@ -168,23 +203,35 @@ plot.fHMM_model <- function( #' @keywords internal plot_ll <- function(lls, ll_relative = TRUE) { - if (!isTRUE(ll_relative) && !isFALSE(ll_relative)) { - stop("'ll_relative' must be 'TRUE' or 'FALSE'.", call. = FALSE) - } + oeli::input_check_response( + check = if (checkmate::test_flag(ll_relative)) { + TRUE + } else { + "'ll_relative' must be 'TRUE' or 'FALSE'." + }, + var_name = "ll_relative" + ) max_ll_absolute <- max(lls, na.rm = TRUE) if (ll_relative) { lls <- lls - max_ll_absolute } max_ll <- max(lls, na.rm = TRUE) min_ll <- min(lls, na.rm = TRUE) - main <- ifelse(ll_relative, "Relative log-likelihoods", "Log-likelihood values") + main <- ifelse( + ll_relative, + "Relative log-likelihoods", + "Log-likelihood values" + ) if (length(lls) <= 5) { plot(lls, xaxt = "n", yaxt = "n", xlab = "Estimation run", ylab = "", main = main, pch = 16, ylim = c(floor(min_ll), ceiling(max_ll)) ) - graphics::axis(1, las = 1, at = seq_len(length(lls)), labels = seq_len(length(lls))) + graphics::axis( + 1, las = 1, at = seq_len(length(lls)), + labels = seq_len(length(lls)) + ) } else { plot(lls, yaxt = "n", xlab = "Estimation run", ylab = "", @@ -211,9 +258,9 @@ plot_ll <- function(lls, ll_relative = TRUE) { #' @description #' This function visualizes the pseudo residuals. #' -#' @param residuals +#' @param residuals \[`fHMM_residuals`\]\cr #' An object of class \code{fHMM_residuals}. -#' @param hierarchy +#' @param hierarchy \[`logical(1)`\]\cr #' The element \code{controls$hierarchy}. #' #' @return @@ -223,8 +270,11 @@ plot_ll <- function(lls, ll_relative = TRUE) { plot_pr <- function(residuals, hierarchy) { - ### check input - stopifnot(inherits(residuals, "fHMM_residuals")) + ### check inputs + oeli::input_check_response( + check = checkmate::check_class(residuals, "fHMM_residuals"), + var_name = "residuals" + ) ### reset of 'par' settings oldpar <- par(no.readonly = TRUE) @@ -293,7 +343,10 @@ plot_pr <- function(residuals, hierarchy) { par(oma = oma, bty = "n") graphics::layout(matrix(1:8, 2, 4, byrow = TRUE)) helper_pr(residuals = residuals[, 1]) - main <- "Coarse-scale (top row) and fine-scale pseudo-residuals (bottom row)" + main <- paste( + "Coarse-scale (top row) and fine-scale pseudo-residuals", + "(bottom row)" + ) graphics::title(main, line = 0, outer = TRUE) helper_pr(residuals = as.vector(residuals[, -1])) } @@ -304,12 +357,12 @@ plot_pr <- function(residuals, hierarchy) { #' @description #' This function plots the estimated state-dependent distributions. #' -#' @param est +#' @param est \[`fHMM_parameters`\]\cr #' An object of class \code{fHMM_parameters} with estimated parameters. -#' @param true +#' @param true \[`NULL` | `fHMM_parameters`\]\cr #' Either \code{NULL} or an object of class \code{fHMM_parameters} with true #' parameters. -#' @param controls +#' @param controls \[`fHMM_controls`\]\cr #' An object of class \code{fHMM_controls}. #' @inheritParams plot.fHMM_model #' @@ -320,11 +373,27 @@ plot_pr <- function(residuals, hierarchy) { plot_sdds <- function(est, true = NULL, controls, colors) { - ### check input - stopifnot(inherits(est, "fHMM_parameters")) - stopifnot(is.null(true) || inherits(true, "fHMM_parameters")) - stopifnot(inherits(controls, "fHMM_controls")) - stopifnot(inherits(colors, "fHMM_colors")) + ### check inputs + oeli::input_check_response( + check = checkmate::check_class(est, "fHMM_parameters"), + var_name = "est" + ) + oeli::input_check_response( + check = if (is.null(true) || inherits(true, "fHMM_parameters")) { + TRUE + } else { + "'true' must be NULL or of class 'fHMM_parameters'." + }, + var_name = "true" + ) + oeli::input_check_response( + check = checkmate::check_class(controls, "fHMM_controls"), + var_name = "controls" + ) + oeli::input_check_response( + check = checkmate::check_class(colors, "fHMM_colors"), + var_name = "colors" + ) ### reset of 'par' settings oldpar <- graphics::par(no.readonly = TRUE) @@ -361,8 +430,14 @@ plot_sdds <- function(est, true = NULL, controls, colors) { xmin <- min(est$mu - 3 * est$sigma, na.rm = TRUE) xmax <- max(est$mu + 3 * est$sigma, na.rm = TRUE) if (!is.null(true)) { - xmin <- min(xmin, min(true$mu - 3 * true$sigma, na.rm = TRUE), na.rm = TRUE) - xmax <- max(xmax, max(true$mu + 3 * true$sigma, na.rm = TRUE), na.rm = TRUE) + xmin <- min( + xmin, min(true$mu - 3 * true$sigma, na.rm = TRUE), + na.rm = TRUE + ) + xmax <- max( + xmax, max(true$mu + 3 * true$sigma, na.rm = TRUE), + na.rm = TRUE + ) } if (name == "gamma") { xmin <- 0.01 @@ -468,8 +543,14 @@ plot_sdds <- function(est, true = NULL, controls, colors) { NULL }, xlim_fix = c( - min(mapply(function(x,y) x - 3*y, est$mu_star, est$sigma_star), na.rm = TRUE), - max(mapply(function(x,y) x + 3*y, est$mu_star, est$sigma_star), na.rm = TRUE) + min( + mapply(function(x, y) x - 3 * y, est$mu_star, est$sigma_star), + na.rm = TRUE + ), + max( + mapply(function(x, y) x + 3 * y, est$mu_star, est$sigma_star), + na.rm = TRUE + ) ) ) legend( @@ -486,9 +567,9 @@ plot_sdds <- function(est, true = NULL, controls, colors) { #' @description #' This function visualizes the data time series. #' -#' @param data +#' @param data \[`fHMM_data`\]\cr #' An object of class \code{fHMM_data}. -#' @param decoding +#' @param decoding \[`NULL` | `numeric()` | `matrix()`\]\cr #' Either \code{NULL} or an object of class \code{fHMM_decoding}. #' @inheritParams plot.fHMM_model #' @@ -572,7 +653,10 @@ plot_ts <- function( markdates <- seq(xmin, xmax, by = "year") markdates <- markdates[1:length(markdates) %% 2 == 1] axis(1, markdates, format(markdates, "%Y")) - y_ticks <- signif(seq(floor(min(ydata, na.rm = TRUE)), ymax, length.out = 3), digits = 3) + y_ticks <- signif( + seq(floor(min(ydata, na.rm = TRUE)), ymax, length.out = 3), + digits = 3 + ) axis(4, y_ticks) mtext(data_lab, side = 4, line = 3.5, at = mean(y_ticks), @@ -581,7 +665,10 @@ plot_ts <- function( if (!controls[["hierarchy"]]) { if (!is.null(decoding)) { for (s in seq_len(controls[["states"]][1])) { - points(xdata[decoding == s], ydata[decoding == s], col = colors[s], pch = 20) + points( + xdata[decoding == s], ydata[decoding == s], + col = colors[s], pch = 20 + ) } } } @@ -644,11 +731,16 @@ plot_ts <- function( } if (!controls[["simulated"]]) { if (!controls[["hierarchy"]]) { - text <- ifelse(controls$data$logreturns, "Log-returns", "Time series data") + text <- ifelse( + controls$data$logreturns, "Log-returns", "Time series data" + ) mtext(text, side = 2, line = 3.5, at = 0, cex = 1.25, las = 3) } if (controls[["hierarchy"]]) { - mtext("Fine-scale data", side = 2, line = 3.5, at = 0, cex = 1.25, las = 3) + mtext( + "Fine-scale data", + side = 2, line = 3.5, at = 0, cex = 1.25, las = 3 + ) } } if (controls[["simulated"]]) { @@ -675,29 +767,44 @@ plot_ts <- function( } if (!controls[["hierarchy"]] & !is.null(decoding)) { for (s in seq_len(controls[["states"]][1])) { - points(x_values[decoding == s], data[["data"]][decoding == s], col = colors[s], pch = 20) + points( + x_values[decoding == s], data[["data"]][decoding == s], + col = colors[s], pch = 20 + ) } } if (controls[["hierarchy"]] & !is.null(decoding)) { for (cs in seq_len(controls[["states"]][1])) { for (fs in seq_len(controls[["states"]][2])) { - points(x_values[decoding_cs == cs & decoding_fs == fs], fs_data[decoding_cs == cs & decoding_fs == fs], col = colors[["fs"]][cs, fs], pch = 20) + decoded_state <- decoding_cs == cs & decoding_fs == fs + points( + x_values[decoded_state], fs_data[decoded_state], + col = colors[["fs"]][cs, fs], pch = 20 + ) } } } if (!controls[["simulated"]] & !is.null(events)) { - events[["labels"]] <- events[["labels"]][events[["dates"]] > xmin & events[["dates"]] < xmax] - events[["dates"]] <- events[["dates"]][events[["dates"]] > xmin & events[["dates"]] < xmax] + events_in_range <- events[["dates"]] > xmin & events[["dates"]] < xmax + events[["labels"]] <- events[["labels"]][events_in_range] + events[["dates"]] <- events[["dates"]][events_in_range] if (length(events[["dates"]]) == 0) { warning("No events fall in the considered time period.", call. = FALSE) } else { for (l in seq_len(length(events[["dates"]]))) { if (events[["dates"]][l] > xmin & events[["dates"]][l] < xmax) { abline(v = as.Date(events[["dates"]][l])) - graphics::text(x = as.Date(events[["dates"]][l]), y = ymin, labels = l, pos = 2, cex = 1.25) + graphics::text( + x = as.Date(events[["dates"]][l]), y = ymin, + labels = l, pos = 2, cex = 1.25 + ) } } - mtext(paste0(seq_len(length(events[["labels"]])), ": ", events[["labels"]], collapse = " "), + event_labels <- paste0( + seq_len(length(events[["labels"]])), ": ", + events[["labels"]], collapse = " " + ) + mtext(event_labels, side = 1, line = 4, cex = 1.25 ) } @@ -717,7 +824,10 @@ plot_ts <- function( legend( legend = c( paste("Coarse-scale state", seq_len(controls[["states"]][1])), - paste0("Fine-scale state ", rep(1:controls[["states"]][2], each = controls[["states"]][1])) + paste0( + "Fine-scale state ", + rep(1:controls[["states"]][2], each = controls[["states"]][1]) + ) ), col = c(colors[["cs"]], as.vector(colors[["fs"]])), pt.lwd = c(rep(3, controls[["states"]][1]), rep(1, dim(eg)[1])), @@ -754,15 +864,25 @@ plot_ts <- function( axis(4, c(ymin, ymax), labels = signif(c(ymin, ymax), 2)) } if (controls[["simulated"]]) { - mtext("Simulated coarse-scale data", side = 4, line = 3.5, at = mean(c(ymin, ymax)), cex = 1.25, las = 3) + mtext( + "Simulated coarse-scale data", + side = 4, line = 3.5, at = mean(c(ymin, ymax)), + cex = 1.25, las = 3 + ) } if (!controls[["simulated"]]) { - mtext("Coarse-scale data", side = 4, line = 3.5, at = mean(c(ymin, ymax)), cex = 1.25, las = 3) + mtext( + "Coarse-scale data", + side = 4, line = 3.5, at = mean(c(ymin, ymax)), + cex = 1.25, las = 3 + ) } } if (!is.null(title)) { title(main = title) } else { - title(main = ifelse(is.null(decoding), "Time series", "Decoded time series")) + title( + main = ifelse(is.null(decoding), "Time series", "Decoded time series") + ) } } diff --git a/R/read_data.R b/R/read_data.R index d7cb7f29..e15c25a7 100644 --- a/R/read_data.R +++ b/R/read_data.R @@ -8,9 +8,11 @@ #' @return #' A \code{list} containing the following elements: #' \itemize{ -#' \item the \code{matrix} of the \code{dates} if \code{controls$simulated = FALSE} +#' \item the \code{matrix} of the \code{dates} if +#' \code{controls$simulated = FALSE} #' and \code{controls$data$data_column} is specified, -#' \item the \code{matrix} of the \code{time_points} if \code{controls$simulated = TRUE} +#' \item the \code{matrix} of the \code{time_points} if +#' \code{controls$simulated = TRUE} #' or \code{controls$data$data_column} is not specified, #' \item the \code{matrix} of the empirical \code{data} used for estimation, #' \item the \code{matrix} named \code{time_series} of empirical data before @@ -24,12 +26,22 @@ read_data <- function(controls) { ### check inputs - if (!inherits(controls, "fHMM_controls")) { - stop("'controls' is not of class 'fHMM_controls'.", call. = FALSE) - } - if (controls$simulated) { - stop("'controls$simulated' is not 'FALSE'.", call. = FALSE) - } + oeli::input_check_response( + check = if (inherits(controls, "fHMM_controls")) { + TRUE + } else { + "'controls' is not of class 'fHMM_controls'." + }, + var_name = "controls" + ) + oeli::input_check_response( + check = if (!controls$simulated) { + TRUE + } else { + "'controls$simulated' is not 'FALSE'." + }, + var_name = "controls$simulated" + ) ### read data data_raw <- list() @@ -71,7 +83,11 @@ read_data <- function(controls) { for (na_value in which(is.na(data_raw[[i]][[data_column[i]]]))) { incr <- 1 while (TRUE) { - range <- unique(abs(c((na_value - incr):(na_value - 1), (na_value + 1):(na_value + incr)))) + candidates <- c( + (na_value - incr):(na_value - 1), + (na_value + 1):(na_value + incr) + ) + range <- unique(abs(candidates)) replace <- mean(data_raw[[i]][[data_column[i]]][range], na.rm = TRUE) if (!is.nan(replace)) { data_raw[[i]][[data_column[i]]][na_value] <- replace @@ -88,7 +104,10 @@ read_data <- function(controls) { data_length <- length(data_raw[[i]][[data_column[i]]]) data_raw[[i]][["logreturns"]] <- numeric(data_length) for (t in seq_len(data_length)[-1]) { - data_raw[[i]][["logreturns"]][t] <- log(data_raw[[i]][[data_column[i]]][t] / data_raw[[i]][[data_column[i]]][t - 1]) + data_raw[[i]][["logreturns"]][t] <- log( + data_raw[[i]][[data_column[i]]][t] / + data_raw[[i]][[data_column[i]]][t - 1] + ) } ### remove 0 log-returns in case of gamma sdd to avoid numerical conflicts @@ -98,7 +117,10 @@ read_data <- function(controls) { step <- 1 cand <- 0 while (cand == 0) { - cand <- mean(data_raw[[i]][["logreturns"]][abs((t - step):(t + step))], na.rm = TRUE) + cand <- mean( + data_raw[[i]][["logreturns"]][abs((t - step):(t + step))], + na.rm = TRUE + ) step <- step + 1 } data_raw[[i]][["logreturns"]][t] <- cand @@ -112,8 +134,16 @@ read_data <- function(controls) { ### remove data points that do not occur in both files based on dates if (controls[["hierarchy"]]) { - data_raw[[1]] <- data_raw[[1]][data_raw[[1]][[date_column[1]]] %in% intersect(data_raw[[1]][[date_column[1]]], data_raw[[2]][[date_column[2]]]), ] - data_raw[[2]] <- data_raw[[2]][data_raw[[2]][[date_column[2]]] %in% intersect(data_raw[[2]][[date_column[2]]], data_raw[[1]][[date_column[1]]]), ] + common_dates <- intersect( + data_raw[[1]][[date_column[1]]], + data_raw[[2]][[date_column[2]]] + ) + data_raw[[1]] <- data_raw[[1]][ + data_raw[[1]][[date_column[1]]] %in% common_dates, + ] + data_raw[[2]] <- data_raw[[2]][ + data_raw[[2]][[date_column[2]]] %in% common_dates, + ] } ### function to find exact or nearest position of 'date' in 'data' @@ -136,7 +166,9 @@ read_data <- function(controls) { for (i in 1:ifelse(controls[["hierarchy"]], 2, 1)) { t_max <- controls[["data"]][["to"]] if (!is.na(t_max)) { - data_raw[[i]] <- data_raw[[i]][seq_len(find_date(t_max, data_raw[[i]])), ] + data_raw[[i]] <- data_raw[[i]][ + seq_len(find_date(t_max, data_raw[[i]])), + ] } t_min <- controls[["data"]][["from"]] if (!is.na(t_min)) { @@ -165,26 +197,41 @@ read_data <- function(controls) { if (controls[["hierarchy"]]) { data <- matrix(NA_real_, nrow = T, ncol = max(T_star) + 1) time_series <- matrix(NA_real_, nrow = T, ncol = max(T_star) + 1) - col_name <- if (controls[["data"]][["logreturns"]][2]) "logreturns" else data_column[2] + col_name <- if (controls[["data"]][["logreturns"]][2]) { + "logreturns" + } else { + data_column[2] + } for (t in seq_len(T)) { + chunk <- (sum(T_star[seq_len(t - 1)]) + 1):sum(T_star[seq_len(t)]) data[t, -1] <- c( - data_raw[[2]][[col_name]][(sum(T_star[seq_len(t - 1)]) + 1):sum(T_star[seq_len(t)])], + data_raw[[2]][[col_name]][chunk], rep(NA_real_, max(T_star) - T_star[t]) ) time_series[t, -1] <- c( - data_raw[[2]][[data_column[2]]][(sum(T_star[seq_len(t - 1)]) + 1):sum(T_star[seq_len(t)])], + data_raw[[2]][[data_column[2]]][chunk], rep(NA_real_, max(T_star) - T_star[t]) ) } - col_name <- if (controls[["data"]][["logreturns"]][1]) "logreturns" else data_column[1] + col_name <- if (controls[["data"]][["logreturns"]][1]) { + "logreturns" + } else { + data_column[1] + } for (t in seq_len(T)) { - cs_data_raw_t <- data_raw[[1]][[col_name]][(sum(T_star[seq_len(t - 1)]) + 1):sum(T_star[seq_len(t)])] + chunk <- (sum(T_star[seq_len(t - 1)]) + 1):sum(T_star[seq_len(t)]) + cs_data_raw_t <- data_raw[[1]][[col_name]][chunk] data[t, 1] <- controls[["data"]][["merge"]](cs_data_raw_t) - cs_data_raw_t <- data_raw[[1]][[data_column[1]]][(sum(T_star[seq_len(t - 1)]) + 1):sum(T_star[seq_len(t)])] + cs_data_raw_t <- data_raw[[1]][[data_column[1]]][chunk] time_series[t, 1] <- controls[["data"]][["merge"]](cs_data_raw_t) } } else { - data <- data_raw[[1]][, ifelse(controls[["data"]][["logreturns"]][1], "logreturns", data_column[i])] + data_col <- ifelse( + controls[["data"]][["logreturns"]][1], + "logreturns", + data_column[1] + ) + data <- data_raw[[1]][, data_col] time_series <- data_raw[[1]][, data_column[1]] } @@ -194,8 +241,9 @@ read_data <- function(controls) { if (controls[["hierarchy"]]) { dates <- matrix(NA_real_, nrow = T, ncol = max(T_star) + 1) for (t in seq_len(T)) { + chunk <- (sum(T_star[seq_len(t - 1)]) + 1):sum(T_star[seq_len(t)]) dates[t, -1] <- c( - data_raw[[2]][[date_column[2]]][(sum(T_star[seq_len(t - 1)]) + 1):sum(T_star[seq_len(t)])], + data_raw[[2]][[date_column[2]]][chunk], rep(NA_real_, max(T_star) - T_star[t]) ) } diff --git a/R/reorder_states.R b/R/reorder_states.R index 1eb5a12e..2503f67c 100644 --- a/R/reorder_states.R +++ b/R/reorder_states.R @@ -4,9 +4,9 @@ #' This function reorders the estimated states, which can be useful for a #' comparison to true parameters or the interpretation of states. #' -#' @param x +#' @param x \[`fHMM_model`\]\cr #' An object of class \code{\link{fHMM_model}}. -#' @param state_order +#' @param state_order \[`character(1)` | `numeric()` | `matrix()`\]\cr #' Either #' - \code{"mean"}, in which case the states are ordered according to the means #' of the state-dependent distributions, @@ -17,8 +17,8 @@ #' values from \code{1} to \code{x$data$controls$states}. If the old #' state number \code{x} should be the new state number \code{y}, put #' the value \code{x} at the position \code{y} of \code{state_order}. -#' E.g. for a 2-state HMM, specifying \code{state_order = c(2, 1)} swaps -#' the states. +#' E.g. for a 2-state HMM, specifying +#' \code{state_order = c(2, 1)} swaps the states. #' \item If \code{x$data$controls$hierarchy = TRUE}, \code{state_order} must #' be a matrix of dimension \code{x$data$controls$states[1]} x #' \code{x$data$controls$states[2] + 1}. The first column orders the @@ -26,8 +26,8 @@ #' the elements from second to last position order the fine-scale states #' of the coarse-scale state specified by the first element. E.g. for an #' HHMM with 2 coarse-scale and 2 fine-scale states, specifying -#' \code{state_order = matrix(c(2, 1, 2, 1, 1, 2), 2, 3)} swaps the -#' coarse-scale states and the fine-scale states connected to +#' \code{state_order = matrix(c(2, 1, 2, 1, 1, 2), 2, 3)} +#' swaps the coarse-scale states and the fine-scale states connected to #' coarse-scale state 2. #' } #' @@ -42,9 +42,14 @@ reorder_states <- function(x, state_order = "mean") { ### check inputs - if (!inherits(x,"fHMM_model")) { - stop("'x' is not of class 'fHMM_model'.", call. = FALSE) - } + oeli::input_check_response( + check = if (inherits(x, "fHMM_model")) { + TRUE + } else { + "'x' is not of class 'fHMM_model'." + }, + var_name = "x" + ) if (identical(state_order, "mean")) { pars <- parUncon2par(x$estimate, x$data$controls) if (!x$data$controls$hierarchy) { @@ -60,21 +65,39 @@ reorder_states <- function(x, state_order = "mean") { } } else { if (!x$data$controls$hierarchy) { - if (!(is.numeric(state_order) && - length(state_order) == x$data$controls$states && - all(state_order %in% 1:x$data$controls$states))) { - stop("'state_order' is missspecified, please check the documentation.", call. = FALSE) - } + oeli::input_check_response( + check = if ( + is.numeric(state_order) && + length(state_order) == x$data$controls$states && + all(state_order %in% 1:x$data$controls$states) + ) { + TRUE + } else { + "'state_order' is misspecified, please check the documentation." + }, + var_name = "state_order" + ) state_order <- as.matrix(state_order) } else { - if (!(is.numeric(state_order) && is.matrix(state_order) && - all(dim(state_order) == x$data$controls$states + c(0, 1)) && - all(state_order[1, ] %in% 1:x$data$controls$states[1]) && - all(sapply(1:x$data$controls$states[2], - function(col) 1:x$data$controls$states[2] %in% state_order[col,-1]))) + oeli::input_check_response( + check = if ( + is.numeric(state_order) && + is.matrix(state_order) && + all(dim(state_order) == x$data$controls$states + c(0, 1)) && + all(state_order[1, ] %in% 1:x$data$controls$states[1]) && + all(sapply( + 1:x$data$controls$states[2], + function(col) { + 1:x$data$controls$states[2] %in% state_order[col, -1] + } + )) ) { - stop("'state_order' is missspecified, please check the documentation.", call. = FALSE) - } + TRUE + } else { + "'state_order' is misspecified, please check the documentation." + }, + var_name = "state_order" + ) } } @@ -99,7 +122,10 @@ reorder_states <- function(x, state_order = "mean") { par$df_star <- par$df_star[state_order[, 1]] } for (s in state_order[, 1]) { - permut <- diag(x$data$controls$states[2])[state_order[which(state_order[, 1] == s), -1], ] + state_order_s <- which(state_order[, 1] == s) + permut <- diag(x$data$controls$states[2])[ + state_order[state_order_s, -1], + ] par$Gamma_star[[s]] <- permut %*% par$Gamma_star[[s]] %*% t(permut) par$mu_star[[s]] <- as.vector(permut %*% par$mu_star[[s]]) if (x$data$controls$sdds[[2]]$name != "poisson") { @@ -127,6 +153,6 @@ reorder_states <- function(x, state_order = "mean") { x <- compute_residuals(x, verbose = FALSE) } - ### return reorderd 'fHMM_model' + ### return reordered 'fHMM_model' return(x) } diff --git a/R/simulate_hmm.R b/R/simulate_hmm.R index cf8e38e4..2cd014bc 100644 --- a/R/simulate_hmm.R +++ b/R/simulate_hmm.R @@ -42,12 +42,22 @@ simulate_hmm <- function( controls = controls, hierarchy = hierarchy, states = states, sdds = sdds, horizon = horizon, period = period ) - if (!inherits(true_parameters, "fHMM_parameters")) { - stop("'true_parameters' is not of class 'fHMM_parameters'.", call. = FALSE) - } - if (!controls$simulated) { - stop("'controls$simulated' is not 'TRUE'.", call. = FALSE) - } + oeli::input_check_response( + check = if (inherits(true_parameters, "fHMM_parameters")) { + TRUE + } else { + "'true_parameters' is not of class 'fHMM_parameters'." + }, + var_name = "true_parameters" + ) + oeli::input_check_response( + check = if (controls$simulated) { + TRUE + } else { + "'controls$simulated' is not 'TRUE'." + }, + var_name = "controls$simulated" + ) if (!is.null(seed)) { set.seed(seed) } @@ -138,19 +148,19 @@ simulate_hmm <- function( #' @description #' This function simulates state-dependent observations. #' -#' @param markov_chain +#' @param markov_chain \[`integer()`\]\cr #' A \code{numeric} vector of states of a Markov chain. -#' @param sdd +#' @param sdd \[`character(1)`\]\cr #' A \code{character}, the name of the state-dependent distribution. -#' @param mu +#' @param mu \[`numeric()`\]\cr #' A \code{numeric} vector of expected values. -#' @param sigma +#' @param sigma \[`NULL` | `numeric()`\]\cr #' A \code{numeric} vector of standard deviations (if any). -#' @param df +#' @param df \[`NULL` | `numeric()`\]\cr #' A \code{numeric} vector of degrees of freedom (if any). -#' @param seed +#' @param seed \[`NULL` | `integer(1)`\]\cr #' Sets a seed for the observation sampling. -#' @param total_length +#' @param total_length \[`integer(1)`\]\cr #' An \code{integer}, the total length of the output vector. #' Must be greater or equal than \code{length(markov_chain)}. #' @@ -167,8 +177,18 @@ simulate_observations <- function( ) { ### check inputs - checkmate::assert_integerish(markov_chain, lower = 1, any.missing = FALSE) - checkmate::assert_number(total_length, lower = length(markov_chain)) + oeli::input_check_response( + check = checkmate::check_integerish( + markov_chain, lower = 1, any.missing = FALSE + ), + var_name = "markov_chain" + ) + oeli::input_check_response( + check = checkmate::check_number( + total_length, lower = length(markov_chain) + ), + var_name = "total_length" + ) ### set seed if (!is.null(seed)) { diff --git a/README.Rmd b/README.Rmd index 93b2ff56..4f649508 100644 --- a/README.Rmd +++ b/README.Rmd @@ -54,7 +54,7 @@ We are open to contributions and would appreciate your input: - If you have any ideas for new features, please submit them as [feature requests](https://github.com/loelschlaeger/fHMM/issues/new?assignees=&labels=future&template=suggestion.md). -- If you would like to add extensions to the package, please fork the `master` branch and submit a merge request. +- If you would like to add extensions to the package, please fork the `master` branch and submit a pull request. ## Example: Fitting an HMM to the DAX @@ -64,7 +64,7 @@ We fit a 3-state HMM with state-dependent t-distributions to the DAX log-returns library("fHMM") ``` -The package has a build-in function to download financial data from [Yahoo Finance](https://finance.yahoo.com/): +The package has a built-in function to download financial data from [Yahoo Finance](https://finance.yahoo.com/): ```{r data download, eval = FALSE} dax <- download_data(symbol = "^GDAXI") @@ -115,8 +115,14 @@ Having estimated the model, we can visualize the state-dependent distributions a ```{r plot_model_fit, fig.dim = c(10,6)} events <- fHMM_events( - list(dates = c("2001-09-11", "2008-09-15", "2020-01-27"), - labels = c("9/11 terrorist attack", "Bankruptcy Lehman Brothers", "First COVID-19 case Germany")) + list( + dates = c("2001-09-11", "2008-09-15", "2020-01-27"), + labels = c( + "9/11 terrorist attack", + "Bankruptcy Lehman Brothers", + "First COVID-19 case Germany" + ) + ) ) plot(model, plot_type = c("sdds","ts"), events = events) ``` @@ -179,13 +185,14 @@ ll_hmm(parUncon, sim$data, controls, negative = TRUE) ```{r, maximize likelihood} optimization <- nlm( - f = ll_hmm, p = parUncon, observations = sim$data, controls = controls, negative = TRUE + f = ll_hmm, p = parUncon, observations = sim$data, + controls = controls, negative = TRUE ) (estimate <- optimization$estimate) ``` -6. To interpret the estimate, it needs to be back transformed to the constrained parameter space via the `parUncon2par()` function. The state-labeling is not identified. +6. To interpret the estimate, it needs to be back-transformed to the constrained parameter space via the `parUncon2par()` function. The state labeling is not identified. ```{r, backtransform parameters} class(estimate) <- "parUncon" diff --git a/README.md b/README.md index add40955..91ad6e57 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ We are open to contributions and would appreciate your input: requests](https://github.com/loelschlaeger/fHMM/issues/new?assignees=&labels=future&template=suggestion.md). - If you would like to add extensions to the package, please fork the - `master` branch and submit a merge request. + `master` branch and submit a pull request. ## Example: Fitting an HMM to the DAX @@ -72,7 +72,7 @@ market state (yellow). library("fHMM") ``` -The package has a build-in function to download financial data from +The package has a built-in function to download financial data from [Yahoo Finance](https://finance.yahoo.com/): ``` r @@ -165,8 +165,14 @@ distributions and the decoded time series: ``` r events <- fHMM_events( - list(dates = c("2001-09-11", "2008-09-15", "2020-01-27"), - labels = c("9/11 terrorist attack", "Bankruptcy Lehman Brothers", "First COVID-19 case Germany")) + list( + dates = c("2001-09-11", "2008-09-15", "2020-01-27"), + labels = c( + "9/11 terrorist attack", + "Bankruptcy Lehman Brothers", + "First COVID-19 case Germany" + ) + ) ) plot(model, plot_type = c("sdds","ts"), events = events) ``` @@ -259,16 +265,17 @@ ll_hmm(parUncon, sim$data, controls, negative = TRUE) ``` r optimization <- nlm( - f = ll_hmm, p = parUncon, observations = sim$data, controls = controls, negative = TRUE + f = ll_hmm, p = parUncon, observations = sim$data, + controls = controls, negative = TRUE ) (estimate <- optimization$estimate) #> [1] -3.46338992 -3.44065582 0.05999848 1.06452907 0.11517811 1.07946252 ``` -6. To interpret the estimate, it needs to be back transformed to the +6. To interpret the estimate, it needs to be back-transformed to the constrained parameter space via the `parUncon2par()` function. The - state-labeling is not identified. + state labeling is not identified. ``` r class(estimate) <- "parUncon" diff --git a/development_packages.R b/development_packages.R deleted file mode 100644 index 07315066..00000000 --- a/development_packages.R +++ /dev/null @@ -1,18 +0,0 @@ -if (!require("covr", quietly = TRUE)) { - renv::install("covr", prompt = FALSE) -} -if (!require("devtools", quietly = TRUE)) { - renv::install("devtools", prompt = FALSE) -} -if (!require("DT", quietly = TRUE)) { - renv::install("DT", prompt = FALSE) -} -if (!require("markdown", quietly = TRUE)) { - renv::install("markdown", prompt = FALSE) -} -if (!require("R.utils", quietly = TRUE)) { - renv::install("R.utils", prompt = FALSE) -} -if (!require("yaml", quietly = TRUE)) { - renv::install("yaml", prompt = FALSE) -} diff --git a/man/compute_T_star.Rd b/man/compute_T_star.Rd index eb2ed6db..d3b34fe9 100644 --- a/man/compute_T_star.Rd +++ b/man/compute_T_star.Rd @@ -7,16 +7,20 @@ compute_T_star(horizon, period, dates = NULL, seed = NULL) } \arguments{ -\item{horizon}{The element \code{controls$horizon}, i.e., an integer vector of length 2, +\item{horizon}{[\code{integer(2)}]\cr +The element \code{controls$horizon}, i.e., an integer vector of length 2, where the second entry can be \code{NA_integer_}.} -\item{period}{The element \code{controls$period}, i.e. one of \code{"w"}, +\item{period}{[\code{character(1)}]\cr +The element \code{controls$period}, i.e. one of \code{"w"}, \code{"m"}, \code{"q"}, or \code{"y"}.} -\item{dates}{A \code{character} vector of dates of empirical fine-scale data (if any). +\item{dates}{[\code{NULL} | \code{character()}]\cr +A \code{character} vector of dates of empirical fine-scale data (if any). By default, \code{dates = NULL}.} -\item{seed}{Set a seed for the simulation of flexible chunk lengths. +\item{seed}{[\code{NULL} | \code{integer(1)}]\cr +Set a seed for the simulation of flexible chunk lengths. By default, \code{seed = NULL} (i.e., no seed).} } \value{ diff --git a/man/compute_ci.Rd b/man/compute_ci.Rd index 0d80e600..ff077b48 100644 --- a/man/compute_ci.Rd +++ b/man/compute_ci.Rd @@ -7,10 +7,13 @@ compute_ci(x, alpha = 0.05) } \arguments{ -\item{x}{An object of class \code{\link{fHMM_model}}.} +\item{x}{[\code{fHMM_model}]\cr +An object of class \code{\link{fHMM_model}}.} -\item{alpha}{A \code{numeric} between 0 and 1, the alpha level for the confidence interval. -By default, \code{alpha = 0.05}, which computes a 95\% confidence interval.} +\item{alpha}{[\code{numeric(1)}]\cr +The alpha level for the confidence interval. Must be between 0 and 1. +By default, \code{alpha = 0.05}, which computes a 95 percent confidence +interval.} } \value{ A \code{list} containing the following elements: diff --git a/man/compute_residuals.Rd b/man/compute_residuals.Rd index 6bba5ca3..f99726c0 100644 --- a/man/compute_residuals.Rd +++ b/man/compute_residuals.Rd @@ -7,9 +7,11 @@ compute_residuals(x, verbose = TRUE) } \arguments{ -\item{x}{An object of class \code{\link{fHMM_model}}.} +\item{x}{[\code{fHMM_model}]\cr +An object of class \code{\link{fHMM_model}}.} -\item{verbose}{Set to \code{TRUE} (default) to print progress messages.} +\item{verbose}{[\code{logical(1)}]\cr +Set to \code{TRUE} (default) to print progress messages.} } \value{ An object of class \code{\link{fHMM_model}} with residuals included. diff --git a/man/dax_model_2n.Rd b/man/dax_model_2n.Rd index cb4b8b4c..aa793b11 100644 --- a/man/dax_model_2n.Rd +++ b/man/dax_model_2n.Rd @@ -13,7 +13,7 @@ data("dax_model_2n") \description{ A pre-computed HMM on closing prices of the DAX from 2000 to 2022 with two hidden states and normal state-dependent distributions for -demonstration purpose. +demonstration purposes. } \details{ The model was estimated via: diff --git a/man/dax_model_3t.Rd b/man/dax_model_3t.Rd index 3a34deb2..80899568 100644 --- a/man/dax_model_3t.Rd +++ b/man/dax_model_3t.Rd @@ -13,7 +13,7 @@ data("dax_model_3t") \description{ A pre-computed HMM on closing prices of the DAX from 2000 to 2022 with three hidden states and state-dependent t-distributions for -demonstration purpose. +demonstration purposes. } \details{ The model was estimated via: diff --git a/man/dax_vw_model.Rd b/man/dax_vw_model.Rd index 3e898a50..83c825e4 100644 --- a/man/dax_vw_model.Rd +++ b/man/dax_vw_model.Rd @@ -14,7 +14,7 @@ data("dax_vw_model") A pre-computed HHMM with monthly averaged closing prices of the DAX from 2010 to 2022 on the coarse scale, Volkswagen AG stock data on the fine scale, two hidden fine-scale and coarse-scale states, respectively, and -state-dependent t-distributions for demonstration purpose. +state-dependent t-distributions for demonstration purposes. } \details{ The model was estimated via: diff --git a/man/decode_states.Rd b/man/decode_states.Rd index 854f13f5..68a58895 100644 --- a/man/decode_states.Rd +++ b/man/decode_states.Rd @@ -10,15 +10,20 @@ decode_states(x, verbose = TRUE) viterbi(observations, nstates, sdd, Gamma, mu, sigma = NULL, df = NULL) } \arguments{ -\item{x}{An object of class \code{\link{fHMM_model}}.} +\item{x}{[\code{fHMM_model}]\cr +An object of class \code{\link{fHMM_model}}.} -\item{verbose}{Set to \code{TRUE} to print progress messages.} +\item{verbose}{[\code{logical(1)}]\cr +Set to \code{TRUE} to print progress messages.} -\item{observations}{A \code{numeric} \code{vector} of state-dependent observations.} +\item{observations}{[\code{numeric()}]\cr +A \code{numeric} \code{vector} of state-dependent observations.} -\item{nstates}{The number of states.} +\item{nstates}{[\code{integer(1)}]\cr +The number of states.} -\item{sdd}{A \code{character}, specifying the state-dependent distribution. One of +\item{sdd}{[\code{character(1)}]\cr +A \code{character}, specifying the state-dependent distribution. One of \itemize{ \item \code{"normal"} (the normal distribution), \item \code{"lognormal"} (the log-normal distribution), @@ -27,20 +32,26 @@ viterbi(observations, nstates, sdd, Gamma, mu, sigma = NULL, df = NULL) \item \code{"poisson"} (the Poisson distribution). }} -\item{Gamma}{A transition probability \code{matrix} of dimension \code{nstates}.} +\item{Gamma}{[\code{matrix()}]\cr +A transition probability \code{matrix} of dimension \code{nstates}.} -\item{mu}{A \code{numeric} vector of expected values for the state-dependent +\item{mu}{[\code{numeric(nstates)}]\cr +A \code{numeric} vector of expected values for the state-dependent distribution in the different states of length \code{nstates}. For the gamma- or Poisson-distribution, \code{mu} must be positive.} -\item{sigma}{A positive \code{numeric} vector of standard deviations for the -state-dependent distribution in the different states of length \code{nstates}. +\item{sigma}{[\code{NULL} | \code{numeric(nstates)}]\cr +A positive \code{numeric} vector of standard deviations for the +state-dependent distribution in the different states of length +\code{nstates}. Not relevant in case of a state-dependent Poisson distribution.} -\item{df}{A positive \code{numeric} vector of degrees of freedom for the -state-dependent distribution in the different states of length \code{nstates}. +\item{df}{[\code{NULL} | \code{numeric(nstates)}]\cr +A positive \code{numeric} vector of degrees of freedom for the +state-dependent distribution in the different states of length +\code{nstates}. Only relevant in case of a state-dependent t-distribution.} } diff --git a/man/download_data.Rd b/man/download_data.Rd index 64bd73f4..62c9ac78 100644 --- a/man/download_data.Rd +++ b/man/download_data.Rd @@ -13,26 +13,31 @@ download_data( ) } \arguments{ -\item{symbol}{A \code{character}, the stock's symbol. +\item{symbol}{[\code{character(1)}]\cr +A \code{character}, the stock's symbol. It must match the identifier on \url{https://finance.yahoo.com/}.} -\item{from}{A \code{character} in the format \code{"YYYY-MM-DD"}, setting the lower +\item{from}{[\code{character(1)}]\cr +A \code{character} in the format \code{"YYYY-MM-DD"}, setting the lower data bound. Must not be earlier than \code{"1902-01-01"} (default).} -\item{to}{A \code{character} in the format \code{"YYYY-MM-DD"}, setting the upper +\item{to}{[\code{character(1)}]\cr +A \code{character} in the format \code{"YYYY-MM-DD"}, setting the upper data bound. Default is the current date \code{Sys.date()}.} -\item{fill_dates}{Set to \code{TRUE} to fill missing dates (e.g., days at which the stock +\item{fill_dates}{[\code{logical(1)}]\cr +Set to \code{TRUE} to fill missing dates (e.g., days at which the stock market is closed) with \code{NA}'s. By default, \code{fill_dates = FALSE}.} -\item{columns}{A \code{character} of requested data columns, see the details. +\item{columns}{[\code{character()}]\cr +A \code{character} of requested data columns, see the details. By default, all columns are returned.} } diff --git a/man/fHMM-package.Rd b/man/fHMM-package.Rd index 098a6c44..09035fc0 100644 --- a/man/fHMM-package.Rd +++ b/man/fHMM-package.Rd @@ -9,6 +9,35 @@ \if{html}{\figure{logo.png}{options: style='float: right' alt='logo' width='120'}} Fitting (hierarchical) hidden Markov models to financial data via maximum likelihood estimation. See Oelschläger, L. and Adam, T. "Detecting Bearish and Bullish Markets in Financial Time Series Using Hierarchical Hidden Markov Models" (2021, Statistical Modelling) \doi{10.1177/1471082X211034048} for a reference on the method. A user guide is provided by the accompanying software paper "fHMM: Hidden Markov Models for Financial Time Series in R", Oelschläger, L., Adam, T., and Michels, R. (2024, Journal of Statistical Software) \doi{10.18637/jss.v109.i09}. +} +\examples{ +### 2-state HMM with normal distributions + +# set specifications +controls <- set_controls( + states = 2, sdds = "normal", horizon = 100, runs = 10 +) + +# define parameters +parameters <- fHMM_parameters(controls, mu = c(-1, 1), seed = 1) + +# sample data +data <- prepare_data(controls, true_parameter = parameters, seed = 1) + +# fit model +model <- fit_model(data, seed = 1) + +# inspect fit +summary(model) +plot(model, "sdds") + +# decode states +model <- decode_states(model) +plot(model, "ts") + +# predict +predict(model, ahead = 5) + } \seealso{ Useful links: diff --git a/man/fHMM_colors.Rd b/man/fHMM_colors.Rd index 0fd5b97d..19c4f506 100644 --- a/man/fHMM_colors.Rd +++ b/man/fHMM_colors.Rd @@ -7,10 +7,12 @@ fHMM_colors(controls, colors = NULL) } \arguments{ -\item{controls}{An object of class \code{fHMM_controls}. +\item{controls}{[\code{fHMM_controls}]\cr +An object of class \code{fHMM_controls}. It can be created with \code{\link{set_controls}}.} -\item{colors}{Either \code{NULL} (default) or a \code{character} vector of color names or +\item{colors}{[\code{NULL} | \code{character()}]\cr +Either \code{NULL} (default) or a \code{character} vector of color names or hexadecimal RGB triplets.} } \value{ @@ -20,8 +22,10 @@ An object of class \code{fHMM_colors}, which is: length \code{controls$states} of color codes, \item for \code{controls$hierarchy == TRUE} a \code{list} of \itemize{ -\item a \code{character} vector of length \code{controls$states[1]} and -\item a \code{character} matrix of dimensions \code{controls$states} +\item a \code{character} vector of length +\code{controls$states[1]} and +\item a \code{character} matrix of dimensions +\code{controls$states} } with color codes. } diff --git a/man/fHMM_data.Rd b/man/fHMM_data.Rd index f21f1f6d..139cf799 100644 --- a/man/fHMM_data.Rd +++ b/man/fHMM_data.Rd @@ -22,27 +22,37 @@ fHMM_data( \method{summary}{fHMM_data}(object, ...) } \arguments{ -\item{dates}{The dates in the empirical case.} +\item{dates}{[\code{any}]\cr +The dates in the empirical case.} -\item{time_points}{The time points in the simulated case.} +\item{time_points}{[\code{any}]\cr +The time points in the simulated case.} -\item{markov_chain}{The states in the simulated case.} +\item{markov_chain}{[\code{any}]\cr +The states in the simulated case.} -\item{data}{The data for modeling.} +\item{data}{[\code{any}]\cr +The data for modeling.} -\item{time_series}{The data before transformation.} +\item{time_series}{[\code{any}]\cr +The data before transformation.} -\item{T_star}{The fine-scale chunk sizes.} +\item{T_star}{[\code{NULL} | \code{integer()}]\cr +The fine-scale chunk sizes.} -\item{controls}{The \code{fHMM_controls} object.} +\item{controls}{[\code{fHMM_controls}]\cr +The \code{fHMM_controls} object.} -\item{true_parameters}{The \code{fHMM_parameters} object in the simulated case.} +\item{true_parameters}{[\code{NULL} | \code{fHMM_parameters}]\cr +The \code{fHMM_parameters} object in the simulated case.} -\item{x}{An object of class \code{fHMM_data}.} +\item{x}{[\code{fHMM_data}]\cr +An object of class \code{fHMM_data}.} \item{...}{Currently not used.} -\item{object}{An object of class \code{fHMM_data}.} +\item{object}{[\code{fHMM_data}]\cr +An object of class \code{fHMM_data}.} } \value{ An object of class \code{fHMM_data}, which is a \code{list} containing @@ -50,7 +60,8 @@ the following elements: \itemize{ \item The \code{matrix} of the \code{dates} if \code{simulated = FALSE} and \code{controls$data$data_column} is specified, -\item the \code{matrix} of the \code{time_points} if \code{simulated = TRUE} +\item the \code{matrix} of the \code{time_points} if +\code{simulated = TRUE} or \code{controls$data$data_column} is not specified, \item the \code{matrix} of the simulated \code{markov_chain} if \code{simulated = TRUE}, diff --git a/man/fHMM_events.Rd b/man/fHMM_events.Rd index 0d2955dd..d95046b6 100644 --- a/man/fHMM_events.Rd +++ b/man/fHMM_events.Rd @@ -10,7 +10,8 @@ fHMM_events(events) \method{print}{fHMM_events}(x, ...) } \arguments{ -\item{events}{A \code{list} of two elements. +\item{events}{[\code{list()}]\cr +A \code{list} of two elements. \itemize{ \item The first element is named \code{"dates"} and contains a \code{character} vector in format \code{"YYYY-MM-DD"}. @@ -18,7 +19,8 @@ vector in format \code{"YYYY-MM-DD"}. vector of the same length as \code{"dates"}. }} -\item{x}{An object of class \code{fHMM_events}.} +\item{x}{[\code{fHMM_events}]\cr +An object of class \code{fHMM_events}.} \item{...}{Currently not used.} } diff --git a/man/fHMM_model.Rd b/man/fHMM_model.Rd index bafc6e2d..176f8601 100644 --- a/man/fHMM_model.Rd +++ b/man/fHMM_model.Rd @@ -50,35 +50,49 @@ npar(object, ...) \method{predict}{fHMM_model}(object, ahead = 5, alpha = 0.05, ...) } \arguments{ -\item{data}{An object of class \code{\link{fHMM_data}}.} +\item{data}{[\code{fHMM_data}]\cr +An object of class \code{\link{fHMM_data}}.} -\item{estimate}{A \code{numeric} vector of unconstrained model estimates.} +\item{estimate}{[\code{numeric()}]\cr +A \code{numeric} vector of unconstrained model estimates.} -\item{nlm_output}{The output of \code{\link[stats]{nlm}} for the selected optimization run.} +\item{nlm_output}{[\code{list()}]\cr +The output of \code{\link[stats]{nlm}} for the selected optimization run.} -\item{estimation_time}{A \code{diff.time} object, the total estimation time.} +\item{estimation_time}{[\code{difftime}]\cr +A \code{diff.time} object, the total estimation time.} -\item{ll}{A \code{numeric}, the model log-likelihood.} +\item{ll}{[\code{numeric(1)}]\cr +A \code{numeric}, the model log-likelihood.} -\item{lls}{A \code{numeric} vector, the model log-likelihoods in all optimization runs.} +\item{lls}{[\code{numeric()}]\cr +A \code{numeric} vector, the model log-likelihoods in all optimization runs.} -\item{gradient}{A \code{numeric} vector, the gradient at the optimum.} +\item{gradient}{[\code{numeric()}]\cr +A \code{numeric} vector, the gradient at the optimum.} -\item{inverse_fisher}{A \code{numeric} vector, the inverse Fisher information for each parameter.} +\item{inverse_fisher}{[\code{numeric()}]\cr +A \code{numeric} vector, the inverse Fisher information for each parameter.} -\item{decoding}{A \code{numeric} vector, the decoded time series.} +\item{decoding}{[\code{NULL} | \code{numeric()} | \code{matrix()}]\cr +A \code{numeric} vector, the decoded time series.} -\item{x, object}{An object of class \code{\link{fHMM_model}}.} +\item{x, object}{[\code{fHMM_model}]\cr +An object of class \code{\link{fHMM_model}}.} \item{...}{Currently not used.} -\item{alpha}{A \code{numeric} between 0 and 1, the confidence level.} +\item{alpha}{[\code{numeric(1)}]\cr +A \code{numeric} between 0 and 1, the confidence level.} -\item{digits}{The number of decimal places.} +\item{digits}{[\code{integer(1)}]\cr +The number of decimal places.} -\item{k}{Passed on to \code{\link[stats]{AIC}}.} +\item{k}{[\code{numeric(1)}]\cr +Passed on to \code{\link[stats]{AIC}}.} -\item{ahead}{The number of time points to predict ahead.} +\item{ahead}{[\code{integer(1)}]\cr +The number of time points to predict ahead.} } \value{ An object of class \code{\link{fHMM_model}}. diff --git a/man/fHMM_parameters.Rd b/man/fHMM_parameters.Rd index ec04e487..c02c0d89 100644 --- a/man/fHMM_parameters.Rd +++ b/man/fHMM_parameters.Rd @@ -26,12 +26,13 @@ fHMM_parameters( \method{print}{fHMM_parameters}(x, ...) } \arguments{ -\item{controls}{Either a \code{list} or an object of class \code{fHMM_controls}. +\item{controls}{[\code{list()} | \code{fHMM_controls}]\cr +Either a \code{list} or an object of class \code{fHMM_controls}. The \code{list} can contain the following elements, which are described in more detail below: \itemize{ -\item \code{hierarchy}, defines an hierarchical HMM, +\item \code{hierarchy}, defines a hierarchical HMM, \item \code{states}, defines the number of states, \item \code{sdds}, defines the state-dependent distributions, \item \code{horizon}, defines the time horizon, @@ -46,14 +47,16 @@ Unspecified parameters are set to their default values. Important: Specifications in \code{controls} always override individual specifications.} -\item{hierarchy}{A \code{logical}, set to \code{TRUE} for an hierarchical HMM. +\item{hierarchy}{[\code{logical(1)}]\cr +A \code{logical}, set to \code{TRUE} for a hierarchical HMM. If \code{hierarchy = TRUE}, some of the other controls must be specified for the coarse-scale and the fine-scale layer. By default, \code{hierarchy = FALSE}.} -\item{states}{An \code{integer}, the number of states of the underlying Markov chain. +\item{states}{[\code{integer(1)} | \code{integer(2)}]\cr +An \code{integer}, the number of states of the underlying Markov chain. If \code{hierarchy = TRUE}, \code{states} must be a \code{vector} of length 2. The first entry corresponds to the coarse-scale layer, while the second @@ -62,7 +65,8 @@ entry corresponds to the fine-scale layer. By default, \code{states = 2} if \code{hierarchy = FALSE} and \code{states = c(2, 2)} if \code{hierarchy = TRUE}.} -\item{sdds}{A \code{character}, specifying the state-dependent distribution. One of +\item{sdds}{[\code{character(1)} | \code{character(2)}]\cr +A \code{character}, specifying the state-dependent distribution. One of \itemize{ \item \code{"normal"} (the normal distribution), \item \code{"lognormal"} (the log-normal distribution), @@ -89,7 +93,8 @@ corresponds to the fine-scale layer. By default, \code{sdds = "normal"} if \code{hierarchy = FALSE} and \code{sdds = c("normal", "normal")} if \code{hierarchy = TRUE}.} -\item{Gamma, Gamma_star}{A transition probability \code{matrix}. +\item{Gamma, Gamma_star}{[\code{NULL} | \code{matrix()} | \code{list()}]\cr +A transition probability \code{matrix}. It should have dimension \code{states[1]}. @@ -97,7 +102,8 @@ It should have dimension \code{states[1]}. matrices. The \code{list} must be of length \code{states[1]}. Each transition probability matrix must be of dimension \code{states[2]}.} -\item{mu, mu_star}{A \code{numeric} vector of expected values for the state-dependent +\item{mu, mu_star}{[\code{NULL} | \code{numeric()} | \code{list()}]\cr +A \code{numeric} vector of expected values for the state-dependent distribution in the different states. For the gamma- or Poisson-distribution, \code{mu} must be positive. @@ -108,7 +114,8 @@ It should have length \code{states[1]}. expectations. The \code{list} must be of length \code{states[1]}. Each \code{vector} must be of length \code{states[2]}.} -\item{sigma, sigma_star}{A positive \code{numeric} vector of standard deviations for the +\item{sigma, sigma_star}{[\code{NULL} | \code{numeric()} | \code{list()}]\cr +A positive \code{numeric} vector of standard deviations for the state-dependent distribution in the different states. It should have length \code{states[1]}. @@ -117,7 +124,8 @@ It should have length \code{states[1]}. standard deviations. The \code{list} must be of length \code{states[1]}. Each vector must be of length \code{states[2]}.} -\item{df, df_star}{A positive \code{numeric} vector of degrees of freedom for the +\item{df, df_star}{[\code{NULL} | \code{numeric()} | \code{list()}]\cr +A positive \code{numeric} vector of degrees of freedom for the state-dependent distribution in the different states. It should have length \code{states[1]}. @@ -129,19 +137,23 @@ degrees of freedom. The \code{list} must be of length \code{states[1]}. Each vector must be of length \code{states[2]}. Only relevant in case of a fine-scale state-dependent t-distribution.} -\item{scale_par}{A positive \code{numeric} vector of length two, containing scales for sampled +\item{scale_par}{[\code{numeric(2)}]\cr +A positive \code{numeric} vector of length two, containing scales for sampled expectations and standard deviations. The first entry is the scale for \code{mu} and \code{sigma}, the second entry is the scale for \code{mu_star} and \code{sigma_star} (if any).} -\item{seed}{Sets a seed for the sampling of parameters.} +\item{seed}{[\code{NULL} | \code{integer(1)}]\cr +Sets a seed for the sampling of parameters.} -\item{check_controls}{Either \code{TRUE} to check the defined controls or \code{FALSE} to not check +\item{check_controls}{[\code{logical(1)}]\cr +Either \code{TRUE} to check the defined controls or \code{FALSE} to not check them (which saves computation time), else.} -\item{x}{An object of class \code{fHMM_parameters}.} +\item{x}{[\code{fHMM_parameters}]\cr +An object of class \code{fHMM_parameters}.} \item{...}{Currently not used.} } @@ -153,8 +165,8 @@ This function sets and checks model parameters. Unspecified parameters are sampled. } \details{ -See the \href{https://loelschlaeger.de/fHMM/articles/}{vignette on the model definition} -for more details. +See the package vignettes at \url{https://loelschlaeger.de/fHMM/articles/} +for details. } \examples{ parameters <- fHMM_parameters(states = 2, sdds = "normal") diff --git a/man/fHMM_sdds.Rd b/man/fHMM_sdds.Rd index c566141e..ee4693bd 100644 --- a/man/fHMM_sdds.Rd +++ b/man/fHMM_sdds.Rd @@ -10,7 +10,8 @@ fHMM_sdds(sdds, states) \method{print}{fHMM_sdds}(x, ...) } \arguments{ -\item{sdds}{A \code{character}, specifying the state-dependent distribution. One of +\item{sdds}{[\code{character(1)} | \code{character(2)}]\cr +A \code{character}, specifying the state-dependent distribution. One of \itemize{ \item \code{"normal"} (the normal distribution), \item \code{"lognormal"} (the log-normal distribution), @@ -37,7 +38,8 @@ corresponds to the fine-scale layer. By default, \code{sdds = "normal"} if \code{hierarchy = FALSE} and \code{sdds = c("normal", "normal")} if \code{hierarchy = TRUE}.} -\item{states}{An \code{integer}, the number of states of the underlying Markov chain. +\item{states}{[\code{integer(1)} | \code{integer(2)}]\cr +An \code{integer}, the number of states of the underlying Markov chain. If \code{hierarchy = TRUE}, \code{states} must be a \code{vector} of length 2. The first entry corresponds to the coarse-scale layer, while the second diff --git a/man/fit_model.Rd b/man/fit_model.Rd index 7925e3b5..e884cbee 100644 --- a/man/fit_model.Rd +++ b/man/fit_model.Rd @@ -22,14 +22,16 @@ fit_model( ) } \arguments{ -\item{data}{An object of class \code{\link{fHMM_data}}.} +\item{data}{[\code{fHMM_data}]\cr +An object of class \code{\link{fHMM_data}}.} -\item{controls}{Either a \code{list} or an object of class \code{fHMM_controls}. +\item{controls}{[\code{list()} | \code{fHMM_controls}]\cr +Either a \code{list} or an object of class \code{fHMM_controls}. The \code{list} can contain the following elements, which are described in more detail below: \itemize{ -\item \code{hierarchy}, defines an hierarchical HMM, +\item \code{hierarchy}, defines a hierarchical HMM, \item \code{states}, defines the number of states, \item \code{sdds}, defines the state-dependent distributions, \item \code{horizon}, defines the time horizon, @@ -44,7 +46,8 @@ Unspecified parameters are set to their default values. Important: Specifications in \code{controls} always override individual specifications.} -\item{fit}{A \code{list} of controls specifying the model fitting. +\item{fit}{[\code{list()}]\cr +A \code{list} of controls specifying the model fitting. The \code{list} can contain the following elements, which are described in more detail below: @@ -63,13 +66,15 @@ Unspecified parameters are set to their default values, see below. Specifications in \code{fit} override individual specifications.} -\item{runs}{An \code{integer}, setting the number of randomly initialized +\item{runs}{[\code{integer(1)}]\cr +An \code{integer}, setting the number of randomly initialized optimization runs of the model likelihood from which the best one is selected as the final model. By default, \code{runs = 10}.} -\item{origin}{Only relevant for simulated data, i.e., if the \code{data} control is +\item{origin}{[\code{logical(1)}]\cr +Only relevant for simulated data, i.e., if the \code{data} control is \code{NA}. In this case, a \code{logical}. If \code{origin = TRUE} the optimization is @@ -78,41 +83,50 @@ This sets \code{run = 1} and \code{accept = 1:5}. By default, \code{origin = FALSE}.} -\item{accept}{An \code{integer} (vector), specifying which optimization runs are +\item{accept}{[\code{integer()} | \code{"all"}]\cr +An \code{integer} (vector), specifying which optimization runs are accepted based on the output code of \code{\link[stats]{nlm}}. By default, \code{accept = 1:3}.} -\item{gradtol}{A positive \code{numeric} value, specifying the gradient tolerance, passed on -to \code{\link[stats]{nlm}}. +\item{gradtol}{[\code{numeric(1)}]\cr +A positive \code{numeric} value, specifying the gradient tolerance, passed +on to \code{\link[stats]{nlm}}. By default, \code{gradtol = 0.01}.} -\item{iterlim}{A positive \code{integer} value, specifying the iteration limit, passed on +\item{iterlim}{[\code{integer(1)}]\cr +A positive \code{integer} value, specifying the iteration limit, passed on to \code{\link[stats]{nlm}}. By default, \code{iterlim = 100}.} -\item{print.level}{One of \code{0}, \code{1}, and \code{2} to control the verbosity of the +\item{print.level}{[\code{0} | \code{1} | \code{2}]\cr +One of \code{0}, \code{1}, and \code{2} to control the verbosity of the numerical likelihood optimization, passed on to \code{\link[stats]{nlm}}. By default, \code{print.level = 0}.} -\item{steptol}{A positive \code{numeric} value, specifying the step tolerance, passed on +\item{steptol}{[\code{numeric(1)}]\cr +A positive \code{numeric} value, specifying the step tolerance, passed on to \code{\link[stats]{nlm}}. -By default, \code{gradtol = 0.01}.} +By default, \code{steptol = 0.01}.} -\item{ncluster}{Set the number of clusters for parallel optimization runs to reduce +\item{ncluster}{[\code{integer(1)}]\cr +Set the number of clusters for parallel optimization runs to reduce optimization time. By default, \code{ncluster = 1} (no clustering).} -\item{seed}{Set a seed for the generation of initial values. +\item{seed}{[\code{NULL} | \code{integer(1)}]\cr +Set a seed for the generation of initial values. No seed by default.} -\item{verbose}{Set to \code{TRUE} to print progress messages.} +\item{verbose}{[\code{logical(1)}]\cr +Set to \code{TRUE} to print progress messages.} -\item{initial_estimate}{Optionally defines an initial estimate for the numerical likelihood +\item{initial_estimate}{[\code{NULL} | \code{parUncon}]\cr +Optionally defines an initial estimate for the numerical likelihood optimization. Good initial estimates can improve the optimization process. Can be: \itemize{ diff --git a/man/get_initial_values.Rd b/man/get_initial_values.Rd index cd480432..461f4ded 100644 --- a/man/get_initial_values.Rd +++ b/man/get_initial_values.Rd @@ -13,18 +13,23 @@ get_initial_values( ) } \arguments{ -\item{data}{An object of class \code{\link{fHMM_data}}.} +\item{data}{[\code{fHMM_data}]\cr +An object of class \code{\link{fHMM_data}}.} -\item{ncluster}{Set the number of clusters for parallel optimization runs to reduce +\item{ncluster}{[\code{integer(1)}]\cr +Set the number of clusters for parallel optimization runs to reduce optimization time. By default, \code{ncluster = 1} (no clustering).} -\item{seed}{Set a seed for the generation of initial values. +\item{seed}{[\code{NULL} | \code{integer(1)}]\cr +Set a seed for the generation of initial values. No seed by default.} -\item{verbose}{Set to \code{TRUE} to print progress messages.} +\item{verbose}{[\code{logical(1)}]\cr +Set to \code{TRUE} to print progress messages.} -\item{initial_estimate}{Optionally defines an initial estimate for the numerical likelihood +\item{initial_estimate}{[\code{NULL} | \code{parUncon}]\cr +Optionally defines an initial estimate for the numerical likelihood optimization. Good initial estimates can improve the optimization process. Can be: \itemize{ diff --git a/man/ll_hmm.Rd b/man/ll_hmm.Rd index 0af1c867..4c5083a1 100644 --- a/man/ll_hmm.Rd +++ b/man/ll_hmm.Rd @@ -16,28 +16,32 @@ ll_hmm( ) } \arguments{ -\item{parUncon}{An object of class \code{parUncon}, which is a \code{numeric} \code{vector} +\item{parUncon}{[\code{parUncon}]\cr +An object of class \code{parUncon}, which is a \code{numeric} \code{vector} with identified and unconstrained model parameters in the following order: \enumerate{ \item non-diagonal transition probabilities \code{gammasUncon} \item expectations \code{muUncon} \item standard deviations \code{sigmaUncon} (if any) \item degrees of freedom \code{dfUncon} (if any) -\item fine-scale parameters for each coarse-scale state, in the same order (if any) +\item fine-scale parameters for each coarse-scale state, in the same order +(if any) }} -\item{observations}{A \code{numeric} \code{vector} of time-series data. +\item{observations}{[\code{numeric()} | \code{matrix()}]\cr +A \code{numeric} \code{vector} of time-series data. In the hierarchical case (\code{hierarchy = TRUE}), a \code{matrix} with coarse-scale data in the first column and corresponding fine-scale data in the rows.} -\item{controls}{Either a \code{list} or an object of class \code{fHMM_controls}. +\item{controls}{[\code{list()} | \code{fHMM_controls}]\cr +Either a \code{list} or an object of class \code{fHMM_controls}. The \code{list} can contain the following elements, which are described in more detail below: \itemize{ -\item \code{hierarchy}, defines an hierarchical HMM, +\item \code{hierarchy}, defines a hierarchical HMM, \item \code{states}, defines the number of states, \item \code{sdds}, defines the state-dependent distributions, \item \code{horizon}, defines the time horizon, @@ -52,14 +56,16 @@ Unspecified parameters are set to their default values. Important: Specifications in \code{controls} always override individual specifications.} -\item{hierarchy}{A \code{logical}, set to \code{TRUE} for an hierarchical HMM. +\item{hierarchy}{[\code{logical(1)}]\cr +A \code{logical}, set to \code{TRUE} for a hierarchical HMM. If \code{hierarchy = TRUE}, some of the other controls must be specified for the coarse-scale and the fine-scale layer. By default, \code{hierarchy = FALSE}.} -\item{states}{An \code{integer}, the number of states of the underlying Markov chain. +\item{states}{[\code{integer(1)} | \code{integer(2)}]\cr +An \code{integer}, the number of states of the underlying Markov chain. If \code{hierarchy = TRUE}, \code{states} must be a \code{vector} of length 2. The first entry corresponds to the coarse-scale layer, while the second @@ -68,7 +74,8 @@ entry corresponds to the fine-scale layer. By default, \code{states = 2} if \code{hierarchy = FALSE} and \code{states = c(2, 2)} if \code{hierarchy = TRUE}.} -\item{sdds}{A \code{character}, specifying the state-dependent distribution. One of +\item{sdds}{[\code{character(1)} | \code{character(2)}]\cr +A \code{character}, specifying the state-dependent distribution. One of \itemize{ \item \code{"normal"} (the normal distribution), \item \code{"lognormal"} (the log-normal distribution), @@ -95,10 +102,12 @@ corresponds to the fine-scale layer. By default, \code{sdds = "normal"} if \code{hierarchy = FALSE} and \code{sdds = c("normal", "normal")} if \code{hierarchy = TRUE}.} -\item{negative}{Either \code{TRUE} to return the negative log-likelihood value (useful for +\item{negative}{[\code{logical(1)}]\cr +Either \code{TRUE} to return the negative log-likelihood value (useful for optimization) or \code{FALSE} (default), else.} -\item{check_controls}{Either \code{TRUE} to check the defined controls or \code{FALSE} to not check +\item{check_controls}{[\code{logical(1)}]\cr +Either \code{TRUE} to check the defined controls or \code{FALSE} to not check them (which saves computation time), else.} } \value{ diff --git a/man/nLL_hhmm.Rd b/man/nLL_hhmm.Rd index 24f4c491..401ae242 100644 --- a/man/nLL_hhmm.Rd +++ b/man/nLL_hhmm.Rd @@ -7,11 +7,14 @@ nLL_hhmm(parUncon, observations, controls) } \arguments{ -\item{parUncon}{An object of class \code{parUncon}.} +\item{parUncon}{[\code{parUncon}]\cr +An object of class \code{parUncon}.} -\item{observations}{The matrix of the simulated or empirical data used for estimation.} +\item{observations}{[\code{matrix()}]\cr +The matrix of the simulated or empirical data used for estimation.} -\item{controls}{An object of class \code{fHMM_controls}.} +\item{controls}{[\code{fHMM_controls}]\cr +An object of class \code{fHMM_controls}.} } \value{ The negative log-likelihood value. diff --git a/man/nLL_hmm.Rd b/man/nLL_hmm.Rd index 05806263..8ca973d6 100644 --- a/man/nLL_hmm.Rd +++ b/man/nLL_hmm.Rd @@ -7,11 +7,14 @@ nLL_hmm(parUncon, observations, controls) } \arguments{ -\item{parUncon}{An object of class \code{parUncon}.} +\item{parUncon}{[\code{parUncon}]\cr +An object of class \code{parUncon}.} -\item{observations}{The vector of the simulated or empirical data used for estimation.} +\item{observations}{[\code{numeric()}]\cr +The vector of the simulated or empirical data used for estimation.} -\item{controls}{An object of class \code{fHMM_controls}.} +\item{controls}{[\code{fHMM_controls}]\cr +An object of class \code{fHMM_controls}.} } \value{ The negative log-likelihood value. diff --git a/man/parameter_labels.Rd b/man/parameter_labels.Rd index f13f3a1c..11d99a6c 100644 --- a/man/parameter_labels.Rd +++ b/man/parameter_labels.Rd @@ -7,9 +7,11 @@ parameter_labels(controls, expected_length = NULL) } \arguments{ -\item{controls}{An object of class \code{fHMM_controls}.} +\item{controls}{[\code{fHMM_controls}]\cr +An object of class \code{fHMM_controls}.} -\item{expected_length}{The expected output length. If \code{NULL} (default), this is not checked.} +\item{expected_length}{[\code{NULL} | \code{integer(1)}]\cr +The expected output length. If \code{NULL} (default), this is not checked.} } \value{ A \code{character} vector of parameter labels. diff --git a/man/parameter_transformations.Rd b/man/parameter_transformations.Rd index 8b93785a..1a62b256 100644 --- a/man/parameter_transformations.Rd +++ b/man/parameter_transformations.Rd @@ -105,15 +105,17 @@ gammasUncon2gammasCon( ) } \arguments{ -\item{par}{An object of class \code{\link{fHMM_parameters}}, which is a \code{list} +\item{par}{[\code{fHMM_parameters}]\cr +An object of class \code{\link{fHMM_parameters}}, which is a \code{list} of model parameters.} -\item{controls}{Either a \code{list} or an object of class \code{fHMM_controls}. +\item{controls}{[\code{list()} | \code{fHMM_controls}]\cr +Either a \code{list} or an object of class \code{fHMM_controls}. The \code{list} can contain the following elements, which are described in more detail below: \itemize{ -\item \code{hierarchy}, defines an hierarchical HMM, +\item \code{hierarchy}, defines a hierarchical HMM, \item \code{states}, defines the number of states, \item \code{sdds}, defines the state-dependent distributions, \item \code{horizon}, defines the time horizon, @@ -128,20 +130,24 @@ Unspecified parameters are set to their default values. Important: Specifications in \code{controls} always override individual specifications.} -\item{use_parameter_labels}{Either \code{TRUE} to label the parameters or \code{FALSE}, if not (this can +\item{use_parameter_labels}{[\code{logical(1)}]\cr +Either \code{TRUE} to label the parameters or \code{FALSE}, if not (this can save computation time).} -\item{parUncon}{An object of class \code{parUncon}, which is a \code{numeric} \code{vector} +\item{parUncon}{[\code{parUncon}]\cr +An object of class \code{parUncon}, which is a \code{numeric} \code{vector} with identified and unconstrained model parameters in the following order: \enumerate{ \item non-diagonal transition probabilities \code{gammasUncon} \item expectations \code{muUncon} \item standard deviations \code{sigmaUncon} (if any) \item degrees of freedom \code{dfUncon} (if any) -\item fine-scale parameters for each coarse-scale state, in the same order (if any) +\item fine-scale parameters for each coarse-scale state, in the same order +(if any) }} -\item{numerical_safeguard}{Either \code{TRUE} or \code{FALSE}, determining whether to apply the +\item{numerical_safeguard}{[\code{logical(1)}]\cr +Either \code{TRUE} or \code{FALSE}, determining whether to apply the following small corrections to boundary parameters to improve numerical performance when calculating and optimizing the likelihood function: \itemize{ @@ -150,30 +156,39 @@ by \code{1e-3} \item standard deviations and degrees of freedom are bounded above by \code{100} }} -\item{parCon}{An object of class \code{parCon}, which is a \code{numeric} \code{vector} +\item{parCon}{[\code{parCon}]\cr +An object of class \code{parCon}, which is a \code{numeric} \code{vector} with identified (and constrained) model parameters in the following order: \enumerate{ \item non-diagonal transition probabilities \code{gammasCon} \item expectations \code{muCon} \item standard deviations \code{sigmaCon} (if any) \item degrees of freedom \code{dfCon} (if any) -\item fine-scale parameters for each coarse-scale state, in the same order (if any) +\item fine-scale parameters for each coarse-scale state, in the same order +(if any) }} -\item{muCon, muUncon}{A vector of (un-) constrained expected values.} +\item{muCon, muUncon}{[\code{numeric()}]\cr +A vector of (un-) constrained expected values.} -\item{link}{Either \code{TRUE} or \code{FALSE}, determining whether to apply the link +\item{link}{[\code{logical(1)}]\cr +Either \code{TRUE} or \code{FALSE}, determining whether to apply the link function.} -\item{prefix}{A \code{character} prefix for labeling the parameters.} +\item{prefix}{[\code{character(1)}]\cr +A \code{character} prefix for labeling the parameters.} -\item{sigmaCon, sigmaUncon}{A vector of (un-) constrained standard deviations.} +\item{sigmaCon, sigmaUncon}{[\code{numeric()}]\cr +A vector of (un-) constrained standard deviations.} -\item{dfCon, dfUncon}{A vector of (un-) constrained degrees of freedom.} +\item{dfCon, dfUncon}{[\code{numeric()}]\cr +A vector of (un-) constrained degrees of freedom.} -\item{gammasCon, gammasUncon}{A vector of (un-) constrained non-diagonal transition probabilities.} +\item{gammasCon, gammasUncon}{[\code{numeric()}]\cr +A vector of (un-) constrained non-diagonal transition probabilities.} -\item{dim}{An \code{integer}, the dimension of the transition probability matrix.} +\item{dim}{[\code{integer(1)}]\cr +An \code{integer}, the dimension of the transition probability matrix.} } \value{ For \code{par2parUncon}: a vector of unconstrained model parameters. diff --git a/man/plot.fHMM_data.Rd b/man/plot.fHMM_data.Rd index 215f9e83..b07c16db 100644 --- a/man/plot.fHMM_data.Rd +++ b/man/plot.fHMM_data.Rd @@ -7,17 +7,22 @@ \method{plot}{fHMM_data}(x, events = NULL, title = NULL, from = NULL, to = NULL, ...) } \arguments{ -\item{x}{An object of class \code{fHMM_data}.} +\item{x}{[\code{fHMM_data}]\cr +An object of class \code{fHMM_data}.} -\item{events}{An object of class \code{\link{fHMM_events}}.} +\item{events}{[\code{NULL} | \code{fHMM_events}]\cr +An object of class \code{\link{fHMM_events}}.} -\item{title}{Optionally a \code{character} for a custom title.} +\item{title}{[\code{NULL} | \code{character(1)}]\cr +Optionally a \code{character} for a custom title.} -\item{from}{Optionally a \code{character}, a date in format \code{"YYYY-MM-DD"}, +\item{from}{[\code{NULL} | \code{character(1)}]\cr +Optionally a \code{character}, a date in format \code{"YYYY-MM-DD"}, setting the lower date bound for plotting. By default, \code{from = NULL}, i.e. no lower bound.} -\item{to}{Optionally a \code{character}, a date in format \code{"YYYY-MM-DD"}, +\item{to}{[\code{NULL} | \code{character(1)}]\cr +Optionally a \code{character}, a date in format \code{"YYYY-MM-DD"}, setting the upper date bound for plotting. By default, \code{to = NULL}, i.e. no upper bound.} diff --git a/man/plot.fHMM_model.Rd b/man/plot.fHMM_model.Rd index 4513df85..3b62ccdb 100644 --- a/man/plot.fHMM_model.Rd +++ b/man/plot.fHMM_model.Rd @@ -17,9 +17,11 @@ ) } \arguments{ -\item{x}{An object of class \code{\link{fHMM_model}}.} +\item{x}{[\code{fHMM_model}]\cr +An object of class \code{\link{fHMM_model}}.} -\item{plot_type}{A character (vector), specifying the type of plot and can be one (or more) of +\item{plot_type}{[\code{character()}]\cr +A character (vector), specifying the type of plot and can be one (or more) of \itemize{ \item \code{"ll"} for a visualization of the likelihood values in the different optimization runs, @@ -29,22 +31,28 @@ distributions, \item \code{"ts"} for a visualization of the financial time series. }} -\item{events}{An object of class \code{\link{fHMM_events}}.} +\item{events}{[\code{NULL} | \code{fHMM_events}]\cr +An object of class \code{\link{fHMM_events}}.} -\item{colors}{Either \code{NULL} (default) or a \code{character} vector of color names or +\item{colors}{[\code{NULL} | \code{character()}]\cr +Either \code{NULL} (default) or a \code{character} vector of color names or hexadecimal RGB triplets.} -\item{ll_relative}{A \code{logical}, set to \code{TRUE} (default) to plot the differences from +\item{ll_relative}{[\code{logical(1)}]\cr +A \code{logical}, set to \code{TRUE} (default) to plot the differences from the best log-likelihood value. Set to \code{FALSE} to plot the absolute values.} -\item{title}{Optionally a \code{character} for a custom title.} +\item{title}{[\code{NULL} | \code{character(1)}]\cr +Optionally a \code{character} for a custom title.} -\item{from}{Optionally a \code{character}, a date in format \code{"YYYY-MM-DD"}, +\item{from}{[\code{NULL} | \code{character(1)}]\cr +Optionally a \code{character}, a date in format \code{"YYYY-MM-DD"}, setting the lower date bound for plotting. By default, \code{from = NULL}, i.e. no lower bound.} -\item{to}{Optionally a \code{character}, a date in format \code{"YYYY-MM-DD"}, +\item{to}{[\code{NULL} | \code{character(1)}]\cr +Optionally a \code{character}, a date in format \code{"YYYY-MM-DD"}, setting the upper date bound for plotting. By default, \code{to = NULL}, i.e. no upper bound.} diff --git a/man/plot_ll.Rd b/man/plot_ll.Rd index 3674795f..fed37901 100644 --- a/man/plot_ll.Rd +++ b/man/plot_ll.Rd @@ -7,9 +7,11 @@ plot_ll(lls, ll_relative = TRUE) } \arguments{ -\item{lls}{A \code{numeric} vector of log-likelihood values.} +\item{lls}{[\code{numeric()}]\cr +A \code{numeric} vector of log-likelihood values.} -\item{ll_relative}{A \code{logical}, set to \code{TRUE} (default) to plot the differences from +\item{ll_relative}{[\code{logical(1)}]\cr +A \code{logical}, set to \code{TRUE} (default) to plot the differences from the best log-likelihood value. Set to \code{FALSE} to plot the absolute values.} } diff --git a/man/plot_pr.Rd b/man/plot_pr.Rd index 61beb8c4..169d092c 100644 --- a/man/plot_pr.Rd +++ b/man/plot_pr.Rd @@ -7,9 +7,11 @@ plot_pr(residuals, hierarchy) } \arguments{ -\item{residuals}{An object of class \code{fHMM_residuals}.} +\item{residuals}{[\code{fHMM_residuals}]\cr +An object of class \code{fHMM_residuals}.} -\item{hierarchy}{The element \code{controls$hierarchy}.} +\item{hierarchy}{[\code{logical(1)}]\cr +The element \code{controls$hierarchy}.} } \value{ No return value. Draws a plot to the current device. diff --git a/man/plot_sdds.Rd b/man/plot_sdds.Rd index 7c1a7f82..e3e603a8 100644 --- a/man/plot_sdds.Rd +++ b/man/plot_sdds.Rd @@ -7,14 +7,18 @@ plot_sdds(est, true = NULL, controls, colors) } \arguments{ -\item{est}{An object of class \code{fHMM_parameters} with estimated parameters.} +\item{est}{[\code{fHMM_parameters}]\cr +An object of class \code{fHMM_parameters} with estimated parameters.} -\item{true}{Either \code{NULL} or an object of class \code{fHMM_parameters} with true +\item{true}{[\code{NULL} | \code{fHMM_parameters}]\cr +Either \code{NULL} or an object of class \code{fHMM_parameters} with true parameters.} -\item{controls}{An object of class \code{fHMM_controls}.} +\item{controls}{[\code{fHMM_controls}]\cr +An object of class \code{fHMM_controls}.} -\item{colors}{Either \code{NULL} (default) or a \code{character} vector of color names or +\item{colors}{[\code{NULL} | \code{character()}]\cr +Either \code{NULL} (default) or a \code{character} vector of color names or hexadecimal RGB triplets.} } \value{ diff --git a/man/plot_ts.Rd b/man/plot_ts.Rd index a00bbab2..092fec83 100644 --- a/man/plot_ts.Rd +++ b/man/plot_ts.Rd @@ -15,22 +15,29 @@ plot_ts( ) } \arguments{ -\item{data}{An object of class \code{fHMM_data}.} +\item{data}{[\code{fHMM_data}]\cr +An object of class \code{fHMM_data}.} -\item{decoding}{Either \code{NULL} or an object of class \code{fHMM_decoding}.} +\item{decoding}{[\code{NULL} | \code{numeric()} | \code{matrix()}]\cr +Either \code{NULL} or an object of class \code{fHMM_decoding}.} -\item{colors}{Either \code{NULL} (default) or a \code{character} vector of color names or +\item{colors}{[\code{NULL} | \code{character()}]\cr +Either \code{NULL} (default) or a \code{character} vector of color names or hexadecimal RGB triplets.} -\item{events}{An object of class \code{\link{fHMM_events}}.} +\item{events}{[\code{NULL} | \code{fHMM_events}]\cr +An object of class \code{\link{fHMM_events}}.} -\item{title}{Optionally a \code{character} for a custom title.} +\item{title}{[\code{NULL} | \code{character(1)}]\cr +Optionally a \code{character} for a custom title.} -\item{from}{Optionally a \code{character}, a date in format \code{"YYYY-MM-DD"}, +\item{from}{[\code{NULL} | \code{character(1)}]\cr +Optionally a \code{character}, a date in format \code{"YYYY-MM-DD"}, setting the lower date bound for plotting. By default, \code{from = NULL}, i.e. no lower bound.} -\item{to}{Optionally a \code{character}, a date in format \code{"YYYY-MM-DD"}, +\item{to}{[\code{NULL} | \code{character(1)}]\cr +Optionally a \code{character}, a date in format \code{"YYYY-MM-DD"}, setting the upper date bound for plotting. By default, \code{to = NULL}, i.e. no upper bound.} } diff --git a/man/prepare_data.Rd b/man/prepare_data.Rd index 73c682ce..5d4a4b4a 100644 --- a/man/prepare_data.Rd +++ b/man/prepare_data.Rd @@ -7,13 +7,16 @@ prepare_data(controls, true_parameters = NULL, seed = NULL) } \arguments{ -\item{controls}{An object of class \code{fHMM_controls}.} +\item{controls}{[\code{fHMM_controls}]\cr +An object of class \code{fHMM_controls}.} -\item{true_parameters}{An object of class \code{fHMM_parameters}, used as simulation parameters. +\item{true_parameters}{[\code{NULL} | \code{fHMM_parameters}]\cr +An object of class \code{fHMM_parameters}, used as simulation parameters. By default, \code{true_parameters = NULL}, i.e., sampled true parameters.} -\item{seed}{Set a seed for the data simulation. -No seed per default.} +\item{seed}{[\code{NULL} | \code{integer(1)}]\cr +Set a seed for the data simulation. +No seed by default.} } \value{ An object of class \code{\link{fHMM_data}}. diff --git a/man/read_data.Rd b/man/read_data.Rd index 45933867..c8e621b3 100644 --- a/man/read_data.Rd +++ b/man/read_data.Rd @@ -7,14 +7,17 @@ read_data(controls) } \arguments{ -\item{controls}{An object of class \code{fHMM_controls}.} +\item{controls}{[\code{fHMM_controls}]\cr +An object of class \code{fHMM_controls}.} } \value{ A \code{list} containing the following elements: \itemize{ -\item the \code{matrix} of the \code{dates} if \code{controls$simulated = FALSE} +\item the \code{matrix} of the \code{dates} if +\code{controls$simulated = FALSE} and \code{controls$data$data_column} is specified, -\item the \code{matrix} of the \code{time_points} if \code{controls$simulated = TRUE} +\item the \code{matrix} of the \code{time_points} if +\code{controls$simulated = TRUE} or \code{controls$data$data_column} is not specified, \item the \code{matrix} of the empirical \code{data} used for estimation, \item the \code{matrix} named \code{time_series} of empirical data before diff --git a/man/reorder_states.Rd b/man/reorder_states.Rd index 3a0eb2ac..94dfb675 100644 --- a/man/reorder_states.Rd +++ b/man/reorder_states.Rd @@ -7,9 +7,11 @@ reorder_states(x, state_order = "mean") } \arguments{ -\item{x}{An object of class \code{\link{fHMM_model}}.} +\item{x}{[\code{fHMM_model}]\cr +An object of class \code{\link{fHMM_model}}.} -\item{state_order}{Either +\item{state_order}{[\code{character(1)} | \code{numeric()} | \code{matrix()}]\cr +Either \itemize{ \item \code{"mean"}, in which case the states are ordered according to the means of the state-dependent distributions, @@ -20,8 +22,8 @@ be a vector of length \code{x$data$controls$states} with integer values from \code{1} to \code{x$data$controls$states}. If the old state number \code{x} should be the new state number \code{y}, put the value \code{x} at the position \code{y} of \code{state_order}. -E.g. for a 2-state HMM, specifying \code{state_order = c(2, 1)} swaps -the states. +E.g. for a 2-state HMM, specifying +\code{state_order = c(2, 1)} swaps the states. \item If \code{x$data$controls$hierarchy = TRUE}, \code{state_order} must be a matrix of dimension \code{x$data$controls$states[1]} x \code{x$data$controls$states[2] + 1}. The first column orders the @@ -29,8 +31,8 @@ coarse-scale states with the logic as described above. For each row, the elements from second to last position order the fine-scale states of the coarse-scale state specified by the first element. E.g. for an HHMM with 2 coarse-scale and 2 fine-scale states, specifying -\code{state_order = matrix(c(2, 1, 2, 1, 1, 2), 2, 3)} swaps the -coarse-scale states and the fine-scale states connected to +\code{state_order = matrix(c(2, 1, 2, 1, 1, 2), 2, 3)} +swaps the coarse-scale states and the fine-scale states connected to coarse-scale state 2. } }} diff --git a/man/set_controls.Rd b/man/set_controls.Rd index 337d799f..c72d2453 100644 --- a/man/set_controls.Rd +++ b/man/set_controls.Rd @@ -39,12 +39,13 @@ validate_controls(controls) \method{summary}{fHMM_controls}(object, ...) } \arguments{ -\item{controls}{Either a \code{list} or an object of class \code{fHMM_controls}. +\item{controls}{[\code{list()} | \code{fHMM_controls}]\cr +Either a \code{list} or an object of class \code{fHMM_controls}. The \code{list} can contain the following elements, which are described in more detail below: \itemize{ -\item \code{hierarchy}, defines an hierarchical HMM, +\item \code{hierarchy}, defines a hierarchical HMM, \item \code{states}, defines the number of states, \item \code{sdds}, defines the state-dependent distributions, \item \code{horizon}, defines the time horizon, @@ -59,14 +60,16 @@ Unspecified parameters are set to their default values. Important: Specifications in \code{controls} always override individual specifications.} -\item{hierarchy}{A \code{logical}, set to \code{TRUE} for an hierarchical HMM. +\item{hierarchy}{[\code{logical(1)}]\cr +A \code{logical}, set to \code{TRUE} for a hierarchical HMM. If \code{hierarchy = TRUE}, some of the other controls must be specified for the coarse-scale and the fine-scale layer. By default, \code{hierarchy = FALSE}.} -\item{states}{An \code{integer}, the number of states of the underlying Markov chain. +\item{states}{[\code{integer(1)} | \code{integer(2)}]\cr +An \code{integer}, the number of states of the underlying Markov chain. If \code{hierarchy = TRUE}, \code{states} must be a \code{vector} of length 2. The first entry corresponds to the coarse-scale layer, while the second @@ -75,7 +78,8 @@ entry corresponds to the fine-scale layer. By default, \code{states = 2} if \code{hierarchy = FALSE} and \code{states = c(2, 2)} if \code{hierarchy = TRUE}.} -\item{sdds}{A \code{character}, specifying the state-dependent distribution. One of +\item{sdds}{[\code{character(1)} | \code{character(2)}]\cr +A \code{character}, specifying the state-dependent distribution. One of \itemize{ \item \code{"normal"} (the normal distribution), \item \code{"lognormal"} (the log-normal distribution), @@ -102,7 +106,8 @@ corresponds to the fine-scale layer. By default, \code{sdds = "normal"} if \code{hierarchy = FALSE} and \code{sdds = c("normal", "normal")} if \code{hierarchy = TRUE}.} -\item{horizon}{A \code{numeric}, specifying the length of the time horizon. +\item{horizon}{[\code{integer(1)} | \code{integer(2)}]\cr +A \code{numeric}, specifying the length of the time horizon. If \code{hierarchy = TRUE}, \code{horizon} must be a \code{vector} of length 2. The first entry corresponds to the coarse-scale layer, while the second @@ -115,7 +120,8 @@ If \code{data} is specified (i.e., not \code{NA}), the first entry of \code{horizon} is ignored and the (coarse-scale) time horizon is defined by available data.} -\item{period}{Only relevant if \code{hierarchy = TRUE}. +\item{period}{[\code{NA} | \code{character(1)}]\cr +Only relevant if \code{hierarchy = TRUE}. In this case, a \code{character} which specifies a flexible, periodic fine-scale time horizon and can be one of @@ -129,7 +135,8 @@ fine-scale time horizon and can be one of By default, \code{period = NA}. If \code{period} is not \code{NA}, it overrules \code{horizon[2]}.} -\item{data}{Either \code{NA}, in which case data is simulated (the default), or a +\item{data}{[\code{NA} | \code{list()}]\cr +Either \code{NA}, in which case data is simulated (the default), or a \code{list} of controls specifying the empirical data set. The \code{list} can contain the following elements, which are described @@ -149,7 +156,8 @@ Unspecified parameters are set to their default values, see below. Specifications in \code{data} override individual specifications.} -\item{file}{A \code{data.frame} with data and dates for modeling. +\item{file}{[\code{data.frame} | \code{character()} | \code{list()}]\cr +A \code{data.frame} with data and dates for modeling. If \code{hierarchy = TRUE}, \code{file} can be a \code{list} of length 2. The first entry is a \code{data.frame} and provides the data for @@ -160,7 +168,8 @@ layer. If \code{file} is a single \code{data.frame}, then the same Alternatively, it can be a \code{character} (of length two), the path to a .csv-file with financial data.} -\item{date_column}{A \code{character}, the name of the column in \code{file} with dates. +\item{date_column}{[\code{character(1)} | \code{character(2)}]\cr +A \code{character}, the name of the column in \code{file} with dates. If \code{hierarchy = TRUE} and \code{file} is a \code{list} of two \code{data.frame}s, \code{data_column} must be a \code{vector} of @@ -169,7 +178,8 @@ second entry corresponds to the fine-scale layer. By default, \code{date_column = "Date"}.} -\item{data_column}{A \code{character}, the name of the column in \code{file} with observations. +\item{data_column}{[\code{character(1)} | \code{character(2)}]\cr +A \code{character}, the name of the column in \code{file} with observations. If \code{hierarchy = TRUE}, \code{data_column} must be a \code{vector} of length 2. The first entry corresponds to the coarse-scale layer, while the @@ -178,13 +188,16 @@ second entry corresponds to the fine-scale layer. By default, \code{data_column = "Close"} if \code{hierarchy = FALSE} and \code{data_column = c("Close", "Close")} if \code{hierarchy = TRUE}.} -\item{from}{A \code{character} of the format \code{"YYYY-MM-DD"}, setting a lower +\item{from}{[\code{NA} | \code{character(1)}]\cr +A \code{character} of the format \code{"YYYY-MM-DD"}, setting a lower date limit. No lower limit if \code{from = NA} (default).} -\item{to}{A \code{character} of the format \code{"YYYY-MM-DD"}, setting an upper +\item{to}{[\code{NA} | \code{character(1)}]\cr +A \code{character} of the format \code{"YYYY-MM-DD"}, setting an upper date limit. No lower limit if \code{to = NA} (default).} -\item{logreturns}{A \code{logical}, if \code{TRUE} the data is transformed to log-returns. +\item{logreturns}{[\code{logical(1)} | \code{logical(2)}]\cr +A \code{logical}, if \code{TRUE} the data is transformed to log-returns. If \code{hierarchy = TRUE}, \code{logreturns} must be a \code{vector} of length 2. The first entry corresponds to the coarse-scale layer, while the @@ -193,7 +206,8 @@ second entry corresponds to the fine-scale layer. By default, \code{logreturns = FALSE} if \code{hierarchy = FALSE} and \code{logreturns = c(FALSE, FALSE)} if \code{hierarchy = TRUE}.} -\item{merge}{Only relevant if \code{hierarchy = TRUE}. +\item{merge}{[\code{function}]\cr +Only relevant if \code{hierarchy = TRUE}. In this case, a \code{function} which merges an input numeric vector of fine-scale data \code{x} into one @@ -209,7 +223,8 @@ absolute values, the relative change of the first to the last fine-scale observation. }} -\item{fit}{A \code{list} of controls specifying the model fitting. +\item{fit}{[\code{list()}]\cr +A \code{list} of controls specifying the model fitting. The \code{list} can contain the following elements, which are described in more detail below: @@ -228,13 +243,15 @@ Unspecified parameters are set to their default values, see below. Specifications in \code{fit} override individual specifications.} -\item{runs}{An \code{integer}, setting the number of randomly initialized +\item{runs}{[\code{integer(1)}]\cr +An \code{integer}, setting the number of randomly initialized optimization runs of the model likelihood from which the best one is selected as the final model. By default, \code{runs = 10}.} -\item{origin}{Only relevant for simulated data, i.e., if the \code{data} control is +\item{origin}{[\code{logical(1)}]\cr +Only relevant for simulated data, i.e., if the \code{data} control is \code{NA}. In this case, a \code{logical}. If \code{origin = TRUE} the optimization is @@ -243,32 +260,38 @@ This sets \code{run = 1} and \code{accept = 1:5}. By default, \code{origin = FALSE}.} -\item{accept}{An \code{integer} (vector), specifying which optimization runs are +\item{accept}{[\code{integer()} | \code{"all"}]\cr +An \code{integer} (vector), specifying which optimization runs are accepted based on the output code of \code{\link[stats]{nlm}}. By default, \code{accept = 1:3}.} -\item{gradtol}{A positive \code{numeric} value, specifying the gradient tolerance, passed on -to \code{\link[stats]{nlm}}. +\item{gradtol}{[\code{numeric(1)}]\cr +A positive \code{numeric} value, specifying the gradient tolerance, passed +on to \code{\link[stats]{nlm}}. By default, \code{gradtol = 0.01}.} -\item{iterlim}{A positive \code{integer} value, specifying the iteration limit, passed on +\item{iterlim}{[\code{integer(1)}]\cr +A positive \code{integer} value, specifying the iteration limit, passed on to \code{\link[stats]{nlm}}. By default, \code{iterlim = 100}.} -\item{print.level}{One of \code{0}, \code{1}, and \code{2} to control the verbosity of the +\item{print.level}{[\code{0} | \code{1} | \code{2}]\cr +One of \code{0}, \code{1}, and \code{2} to control the verbosity of the numerical likelihood optimization, passed on to \code{\link[stats]{nlm}}. By default, \code{print.level = 0}.} -\item{steptol}{A positive \code{numeric} value, specifying the step tolerance, passed on +\item{steptol}{[\code{numeric(1)}]\cr +A positive \code{numeric} value, specifying the step tolerance, passed on to \code{\link[stats]{nlm}}. -By default, \code{gradtol = 0.01}.} +By default, \code{steptol = 0.01}.} -\item{x, object}{An object of class \code{fHMM_controls}.} +\item{x, object}{[\code{fHMM_controls}]\cr +An object of class \code{fHMM_controls}.} \item{...}{Currently not used.} } @@ -305,7 +328,7 @@ set_controls( hierarchy = TRUE, # defines a hierarchy states = c(3, 2), # coarse scale and fine scale states sdds = c("gamma", "poisson"), # distributions for both layers - horizon = c(100, NA), # 100 simulated coarse-scale data points + horizon = c(100, NA), # 100 coarse-scale data points period = "m" # monthly simulated fine-scale data ) diff --git a/man/simulate_hmm.Rd b/man/simulate_hmm.Rd index 069e275b..03ea3a99 100644 --- a/man/simulate_hmm.Rd +++ b/man/simulate_hmm.Rd @@ -17,12 +17,13 @@ simulate_hmm( ) } \arguments{ -\item{controls}{Either a \code{list} or an object of class \code{fHMM_controls}. +\item{controls}{[\code{list()} | \code{fHMM_controls}]\cr +Either a \code{list} or an object of class \code{fHMM_controls}. The \code{list} can contain the following elements, which are described in more detail below: \itemize{ -\item \code{hierarchy}, defines an hierarchical HMM, +\item \code{hierarchy}, defines a hierarchical HMM, \item \code{states}, defines the number of states, \item \code{sdds}, defines the state-dependent distributions, \item \code{horizon}, defines the time horizon, @@ -37,14 +38,16 @@ Unspecified parameters are set to their default values. Important: Specifications in \code{controls} always override individual specifications.} -\item{hierarchy}{A \code{logical}, set to \code{TRUE} for an hierarchical HMM. +\item{hierarchy}{[\code{logical(1)}]\cr +A \code{logical}, set to \code{TRUE} for a hierarchical HMM. If \code{hierarchy = TRUE}, some of the other controls must be specified for the coarse-scale and the fine-scale layer. By default, \code{hierarchy = FALSE}.} -\item{states}{An \code{integer}, the number of states of the underlying Markov chain. +\item{states}{[\code{integer(1)} | \code{integer(2)}]\cr +An \code{integer}, the number of states of the underlying Markov chain. If \code{hierarchy = TRUE}, \code{states} must be a \code{vector} of length 2. The first entry corresponds to the coarse-scale layer, while the second @@ -53,7 +56,8 @@ entry corresponds to the fine-scale layer. By default, \code{states = 2} if \code{hierarchy = FALSE} and \code{states = c(2, 2)} if \code{hierarchy = TRUE}.} -\item{sdds}{A \code{character}, specifying the state-dependent distribution. One of +\item{sdds}{[\code{character(1)} | \code{character(2)}]\cr +A \code{character}, specifying the state-dependent distribution. One of \itemize{ \item \code{"normal"} (the normal distribution), \item \code{"lognormal"} (the log-normal distribution), @@ -80,7 +84,8 @@ corresponds to the fine-scale layer. By default, \code{sdds = "normal"} if \code{hierarchy = FALSE} and \code{sdds = c("normal", "normal")} if \code{hierarchy = TRUE}.} -\item{horizon}{A \code{numeric}, specifying the length of the time horizon. +\item{horizon}{[\code{integer(1)} | \code{integer(2)}]\cr +A \code{numeric}, specifying the length of the time horizon. If \code{hierarchy = TRUE}, \code{horizon} must be a \code{vector} of length 2. The first entry corresponds to the coarse-scale layer, while the second @@ -93,7 +98,8 @@ If \code{data} is specified (i.e., not \code{NA}), the first entry of \code{horizon} is ignored and the (coarse-scale) time horizon is defined by available data.} -\item{period}{Only relevant if \code{hierarchy = TRUE}. +\item{period}{[\code{NA} | \code{character(1)}]\cr +Only relevant if \code{hierarchy = TRUE}. In this case, a \code{character} which specifies a flexible, periodic fine-scale time horizon and can be one of @@ -107,11 +113,13 @@ fine-scale time horizon and can be one of By default, \code{period = NA}. If \code{period} is not \code{NA}, it overrules \code{horizon[2]}.} -\item{true_parameters}{An object of class \code{fHMM_parameters}, used as simulation parameters. +\item{true_parameters}{[\code{NULL} | \code{fHMM_parameters}]\cr +An object of class \code{fHMM_parameters}, used as simulation parameters. By default, \code{true_parameters = NULL}, i.e., sampled true parameters.} -\item{seed}{Set a seed for the data simulation. -No seed per default.} +\item{seed}{[\code{NULL} | \code{integer(1)}]\cr +Set a seed for the data simulation. +No seed by default.} } \value{ A \code{list} containing the following elements: diff --git a/man/simulate_observations.Rd b/man/simulate_observations.Rd index e1c38111..1afaf8ae 100644 --- a/man/simulate_observations.Rd +++ b/man/simulate_observations.Rd @@ -15,19 +15,26 @@ simulate_observations( ) } \arguments{ -\item{markov_chain}{A \code{numeric} vector of states of a Markov chain.} +\item{markov_chain}{[\code{integer()}]\cr +A \code{numeric} vector of states of a Markov chain.} -\item{sdd}{A \code{character}, the name of the state-dependent distribution.} +\item{sdd}{[\code{character(1)}]\cr +A \code{character}, the name of the state-dependent distribution.} -\item{mu}{A \code{numeric} vector of expected values.} +\item{mu}{[\code{numeric()}]\cr +A \code{numeric} vector of expected values.} -\item{sigma}{A \code{numeric} vector of standard deviations (if any).} +\item{sigma}{[\code{NULL} | \code{numeric()}]\cr +A \code{numeric} vector of standard deviations (if any).} -\item{df}{A \code{numeric} vector of degrees of freedom (if any).} +\item{df}{[\code{NULL} | \code{numeric()}]\cr +A \code{numeric} vector of degrees of freedom (if any).} -\item{seed}{Sets a seed for the observation sampling.} +\item{seed}{[\code{NULL} | \code{integer(1)}]\cr +Sets a seed for the observation sampling.} -\item{total_length}{An \code{integer}, the total length of the output vector. +\item{total_length}{[\code{integer(1)}]\cr +An \code{integer}, the total length of the output vector. Must be greater or equal than \code{length(markov_chain)}.} } \value{ diff --git a/man/unemp_spx_model_3_2.Rd b/man/unemp_spx_model_3_2.Rd index f441a7df..389b550a 100644 --- a/man/unemp_spx_model_3_2.Rd +++ b/man/unemp_spx_model_3_2.Rd @@ -13,7 +13,7 @@ data("unemp_spx_model_3_2") \description{ A pre-computed HHMM with monthly unemployment rate in the US on the coarse scale using 3 states and S&P 500 index data on the fine scale using 2 states -from 1970 to 2020 for demonstration purpose. +from 1970 to 2020 for demonstration purposes. } \details{ The model was estimated via: diff --git a/renv.lock b/renv.lock deleted file mode 100644 index aa853fd7..00000000 --- a/renv.lock +++ /dev/null @@ -1,6008 +0,0 @@ -{ - "R": { - "Version": "4.4.0", - "Repositories": [ - { - "Name": "CRAN", - "URL": "http://cran.rstudio.com" - } - ] - }, - "Packages": { - "BB": { - "Package": "BB", - "Version": "2019.10-1", - "Source": "Repository", - "Title": "Solving and Optimizing Large-Scale Nonlinear Systems", - "Description": "Barzilai-Borwein spectral methods for solving nonlinear system of equations, and for optimizing nonlinear objective functions subject to simple constraints. A tutorial style introduction to this package is available in a vignette on the CRAN download page or, when the package is loaded in an R session, with vignette(\"BB\").", - "Depends": [ - "R (>= 2.6.1)" - ], - "Imports": [ - "stats", - "quadprog" - ], - "Suggests": [ - "setRNG", - "survival", - "Hmisc", - "numDeriv" - ], - "BuildVignettes": "true", - "LazyLoad": "yes", - "ByteCompile": "yes", - "License": "GPL-3", - "Authors@R": "c( person(\"Ravi\", \"Varadhan\", role=c(\"aut\",\"cph\",\"trl\"), email=\"rvaradhan@jhmi.edu\"), person(\"Paul\", \"Gilbert\", role=c(\"aut\",\"cre\"), email=\"pgilbert.ttv9z@ncf.ca\"), person(\"Marcos\", \"Raydan\", role=\"ctb\", comment=\"with co-authors, wrote original algorithms in fortran. These provided some guidance for implementing R code in the BB package.\"), person(\"JM\", \"Martinez\", role=\"ctb\", comment=\"with co-authors, wrote original algorithms in fortran. These provided some guidance for implementing R code in the BB package.\"), person(\"EG\", \"Birgin\", role=\"ctb\", comment=\"with co-authors, wrote original algorithms in fortran. These provided some guidance for implementing R code in the BB package.\"), person(\"W\", \"LaCruz\", role=\"ctb\", comment=\"with co-authors, wrote original algorithms in fortran. These provided some guidance for implementing R code in the BB package.\") )", - "Copyright": "2008-2020, Ravi Varadhan", - "URL": "http://www.jhsph.edu/agingandhealth/People/Faculty_personal_pages/Varadhan.html", - "NeedsCompilation": "no", - "Author": "Ravi Varadhan [aut, cph, trl], Paul Gilbert [aut, cre], Marcos Raydan [ctb] (with co-authors, wrote original algorithms in fortran. These provided some guidance for implementing R code in the BB package.), JM Martinez [ctb] (with co-authors, wrote original algorithms in fortran. These provided some guidance for implementing R code in the BB package.), EG Birgin [ctb] (with co-authors, wrote original algorithms in fortran. These provided some guidance for implementing R code in the BB package.), W LaCruz [ctb] (with co-authors, wrote original algorithms in fortran. These provided some guidance for implementing R code in the BB package.)", - "Maintainer": "Paul Gilbert ", - "Repository": "CRAN" - }, - "DT": { - "Package": "DT", - "Version": "0.33", - "Source": "Repository", - "Type": "Package", - "Title": "A Wrapper of the JavaScript Library 'DataTables'", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = \"aut\"), person(\"Joe\", \"Cheng\", email = \"joe@posit.co\", role = c(\"aut\", \"cre\")), person(\"Xianying\", \"Tan\", role = \"aut\"), person(\"JJ\", \"Allaire\", role = \"ctb\"), person(\"Maximilian\", \"Girlich\", role = \"ctb\"), person(\"Greg\", \"Freedman Ellis\", role = \"ctb\"), person(\"Johannes\", \"Rauh\", role = \"ctb\"), person(\"SpryMedia Limited\", role = c(\"ctb\", \"cph\"), comment = \"DataTables in htmlwidgets/lib\"), person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js in htmlwidgets/lib\"), person(\"Leon\", \"Gersen\", role = c(\"ctb\", \"cph\"), comment = \"noUiSlider in htmlwidgets/lib\"), person(\"Bartek\", \"Szopka\", role = c(\"ctb\", \"cph\"), comment = \"jquery.highlight.js in htmlwidgets/lib\"), person(\"Alex\", \"Pickering\", role = c(\"ctb\")), person(\"William\", \"Holmes\", role = c(\"ctb\")), person(\"Mikko\", \"Marttila\", role = c(\"ctb\")), person(\"Andres\", \"Quintero\", role = c(\"ctb\")), person(\"Stéphane\", \"Laurent\", role = c(\"ctb\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Data objects in R can be rendered as HTML tables using the JavaScript library 'DataTables' (typically via R Markdown or Shiny). The 'DataTables' library has been included in this R package. The package name 'DT' is an abbreviation of 'DataTables'.", - "URL": "https://github.com/rstudio/DT", - "BugReports": "https://github.com/rstudio/DT/issues", - "License": "GPL-3 | file LICENSE", - "Imports": [ - "htmltools (>= 0.3.6)", - "htmlwidgets (>= 1.3)", - "httpuv", - "jsonlite (>= 0.9.16)", - "magrittr", - "crosstalk", - "jquerylib", - "promises" - ], - "Suggests": [ - "knitr (>= 1.8)", - "rmarkdown", - "shiny (>= 1.6)", - "bslib", - "future", - "testit", - "tibble" - ], - "VignetteBuilder": "knitr", - "RoxygenNote": "7.3.1", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Author": "Yihui Xie [aut], Joe Cheng [aut, cre], Xianying Tan [aut], JJ Allaire [ctb], Maximilian Girlich [ctb], Greg Freedman Ellis [ctb], Johannes Rauh [ctb], SpryMedia Limited [ctb, cph] (DataTables in htmlwidgets/lib), Brian Reavis [ctb, cph] (selectize.js in htmlwidgets/lib), Leon Gersen [ctb, cph] (noUiSlider in htmlwidgets/lib), Bartek Szopka [ctb, cph] (jquery.highlight.js in htmlwidgets/lib), Alex Pickering [ctb], William Holmes [ctb], Mikko Marttila [ctb], Andres Quintero [ctb], Stéphane Laurent [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Joe Cheng ", - "Repository": "CRAN" - }, - "GPArotation": { - "Package": "GPArotation", - "Version": "2025.3-1", - "Source": "Repository", - "Title": "Gradient Projection Factor Rotation", - "Authors@R": "c( person(\"Coen\", \"Bernaards\", email = \"cab.gparotation@gmail.com\", role = c(\"aut\",\"cre\")), person(\"Paul\", \"Gilbert\", email = \"pgilbert.ttv9z@ncf.ca\", role = \"aut\"), person(\"Robert\", \"Jennrich\", role = \"aut\") )", - "Depends": [ - "R (>= 2.0.0)" - ], - "Description": "Gradient Projection Algorithms for Factor Rotation. For details see ?GPArotation. When using this package, please cite Bernaards and Jennrich (2005) 'Gradient Projection Algorithms and Software for Arbitrary Rotation Criteria in Factor Analysis'.", - "LazyData": "yes", - "Imports": [ - "stats" - ], - "License": "GPL (>= 2)", - "URL": "https://optimizer.r-forge.r-project.org/GPArotation_www/", - "NeedsCompilation": "no", - "Author": "Coen Bernaards [aut, cre], Paul Gilbert [aut], Robert Jennrich [aut]", - "Maintainer": "Coen Bernaards ", - "Repository": "CRAN" - }, - "GenOrd": { - "Package": "GenOrd", - "Version": "1.4.0", - "Source": "Repository", - "Type": "Package", - "Title": "Simulation of Discrete Random Variables with Given Correlation Matrix and Marginal Distributions", - "Date": "2015-09-11", - "Author": "Alessandro Barbiero, Pier Alda Ferrari", - "Maintainer": "Alessandro Barbiero ", - "Description": "A gaussian copula based procedure for generating samples from discrete random variables with prescribed correlation matrix and marginal distributions.", - "License": "GPL", - "LazyLoad": "yes", - "Depends": [ - "mvtnorm", - "Matrix", - "MASS", - "stats" - ], - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "MASS": { - "Package": "MASS", - "Version": "7.3-65", - "Source": "Repository", - "Priority": "recommended", - "Date": "2025-02-19", - "Revision": "$Rev: 3681 $", - "Depends": [ - "R (>= 4.4.0)", - "grDevices", - "graphics", - "stats", - "utils" - ], - "Imports": [ - "methods" - ], - "Suggests": [ - "lattice", - "nlme", - "nnet", - "survival" - ], - "Authors@R": "c(person(\"Brian\", \"Ripley\", role = c(\"aut\", \"cre\", \"cph\"), email = \"Brian.Ripley@R-project.org\"), person(\"Bill\", \"Venables\", role = c(\"aut\", \"cph\")), person(c(\"Douglas\", \"M.\"), \"Bates\", role = \"ctb\"), person(\"Kurt\", \"Hornik\", role = \"trl\", comment = \"partial port ca 1998\"), person(\"Albrecht\", \"Gebhardt\", role = \"trl\", comment = \"partial port ca 1998\"), person(\"David\", \"Firth\", role = \"ctb\", comment = \"support functions for polr\"))", - "Description": "Functions and datasets to support Venables and Ripley, \"Modern Applied Statistics with S\" (4th edition, 2002).", - "Title": "Support Functions and Datasets for Venables and Ripley's MASS", - "LazyData": "yes", - "ByteCompile": "yes", - "License": "GPL-2 | GPL-3", - "URL": "http://www.stats.ox.ac.uk/pub/MASS4/", - "Contact": "", - "NeedsCompilation": "yes", - "Author": "Brian Ripley [aut, cre, cph], Bill Venables [aut, cph], Douglas M. Bates [ctb], Kurt Hornik [trl] (partial port ca 1998), Albrecht Gebhardt [trl] (partial port ca 1998), David Firth [ctb] (support functions for polr)", - "Maintainer": "Brian Ripley ", - "Repository": "CRAN" - }, - "Matrix": { - "Package": "Matrix", - "Version": "1.7-3", - "Source": "Repository", - "VersionNote": "do also bump src/version.h, inst/include/Matrix/version.h", - "Date": "2025-03-05", - "Priority": "recommended", - "Title": "Sparse and Dense Matrix Classes and Methods", - "Description": "A rich hierarchy of sparse and dense matrix classes, including general, symmetric, triangular, and diagonal matrices with numeric, logical, or pattern entries. Efficient methods for operating on such matrices, often wrapping the 'BLAS', 'LAPACK', and 'SuiteSparse' libraries.", - "License": "GPL (>= 2) | file LICENCE", - "URL": "https://Matrix.R-forge.R-project.org", - "BugReports": "https://R-forge.R-project.org/tracker/?atid=294&group_id=61", - "Contact": "Matrix-authors@R-project.org", - "Authors@R": "c(person(\"Douglas\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Martin\", \"Maechler\", role = c(\"aut\", \"cre\"), email = \"mmaechler+Matrix@gmail.com\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Mikael\", \"Jagan\", role = \"aut\", comment = c(ORCID = \"0000-0002-3542-2938\")), person(\"Timothy A.\", \"Davis\", role = \"ctb\", comment = c(ORCID = \"0000-0001-7614-6899\", \"SuiteSparse libraries\", \"collaborators listed in dir(system.file(\\\"doc\\\", \\\"SuiteSparse\\\", package=\\\"Matrix\\\"), pattern=\\\"License\\\", full.names=TRUE, recursive=TRUE)\")), person(\"George\", \"Karypis\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2753-1437\", \"METIS library\", \"Copyright: Regents of the University of Minnesota\")), person(\"Jason\", \"Riedy\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4345-4200\", \"GNU Octave's condest() and onenormest()\", \"Copyright: Regents of the University of California\")), person(\"Jens\", \"Oehlschlägel\", role = \"ctb\", comment = \"initial nearPD()\"), person(\"R Core Team\", role = \"ctb\", comment = c(ROR = \"02zz1nj61\", \"base R's matrix implementation\")))", - "Depends": [ - "R (>= 4.4)", - "methods" - ], - "Imports": [ - "grDevices", - "graphics", - "grid", - "lattice", - "stats", - "utils" - ], - "Suggests": [ - "MASS", - "datasets", - "sfsmisc", - "tools" - ], - "Enhances": [ - "SparseM", - "graph" - ], - "LazyData": "no", - "LazyDataNote": "not possible, since we use data/*.R and our S4 classes", - "BuildResaveData": "no", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Douglas Bates [aut] (), Martin Maechler [aut, cre] (), Mikael Jagan [aut] (), Timothy A. Davis [ctb] (, SuiteSparse libraries, collaborators listed in dir(system.file(\"doc\", \"SuiteSparse\", package=\"Matrix\"), pattern=\"License\", full.names=TRUE, recursive=TRUE)), George Karypis [ctb] (, METIS library, Copyright: Regents of the University of Minnesota), Jason Riedy [ctb] (, GNU Octave's condest() and onenormest(), Copyright: Regents of the University of California), Jens Oehlschlägel [ctb] (initial nearPD()), R Core Team [ctb] (02zz1nj61, base R's matrix implementation)", - "Maintainer": "Martin Maechler ", - "Repository": "CRAN" - }, - "R.methodsS3": { - "Package": "R.methodsS3", - "Version": "1.8.2", - "Source": "Repository", - "Depends": [ - "R (>= 2.13.0)" - ], - "Imports": [ - "utils" - ], - "Suggests": [ - "codetools" - ], - "Title": "S3 Methods Simplified", - "Authors@R": "c(person(\"Henrik\", \"Bengtsson\", role=c(\"aut\", \"cre\", \"cph\"), email = \"henrikb@braju.com\"))", - "Author": "Henrik Bengtsson [aut, cre, cph]", - "Maintainer": "Henrik Bengtsson ", - "Description": "Methods that simplify the setup of S3 generic functions and S3 methods. Major effort has been made in making definition of methods as simple as possible with a minimum of maintenance for package developers. For example, generic functions are created automatically, if missing, and naming conflict are automatically solved, if possible. The method setMethodS3() is a good start for those who in the future may want to migrate to S4. This is a cross-platform package implemented in pure R that generates standard S3 methods.", - "License": "LGPL (>= 2.1)", - "LazyLoad": "TRUE", - "URL": "https://github.com/HenrikBengtsson/R.methodsS3", - "BugReports": "https://github.com/HenrikBengtsson/R.methodsS3/issues", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "R.oo": { - "Package": "R.oo", - "Version": "1.27.1", - "Source": "Repository", - "Depends": [ - "R (>= 2.13.0)", - "R.methodsS3 (>= 1.8.2)" - ], - "Imports": [ - "methods", - "utils" - ], - "Suggests": [ - "tools" - ], - "Title": "R Object-Oriented Programming with or without References", - "Authors@R": "c(person(\"Henrik\", \"Bengtsson\", role=c(\"aut\", \"cre\", \"cph\"), email = \"henrikb@braju.com\"))", - "Author": "Henrik Bengtsson [aut, cre, cph]", - "Maintainer": "Henrik Bengtsson ", - "Description": "Methods and classes for object-oriented programming in R with or without references. Large effort has been made on making definition of methods as simple as possible with a minimum of maintenance for package developers. The package has been developed since 2001 and is now considered very stable. This is a cross-platform package implemented in pure R that defines standard S3 classes without any tricks.", - "License": "LGPL (>= 2.1)", - "LazyLoad": "TRUE", - "URL": "https://henrikbengtsson.github.io/R.oo/, https://github.com/HenrikBengtsson/R.oo", - "BugReports": "https://github.com/HenrikBengtsson/R.oo/issues", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "R.utils": { - "Package": "R.utils", - "Version": "2.13.0", - "Source": "Repository", - "Depends": [ - "R (>= 2.14.0)", - "R.oo" - ], - "Imports": [ - "methods", - "utils", - "tools", - "R.methodsS3" - ], - "Suggests": [ - "datasets", - "digest (>= 0.6.10)" - ], - "Title": "Various Programming Utilities", - "Authors@R": "c(person(\"Henrik\", \"Bengtsson\", role=c(\"aut\", \"cre\", \"cph\"), email = \"henrikb@braju.com\"))", - "Author": "Henrik Bengtsson [aut, cre, cph]", - "Maintainer": "Henrik Bengtsson ", - "Description": "Utility functions useful when programming and developing R packages.", - "License": "LGPL (>= 2.1)", - "LazyLoad": "TRUE", - "URL": "https://henrikbengtsson.github.io/R.utils/, https://github.com/HenrikBengtsson/R.utils", - "BugReports": "https://github.com/HenrikBengtsson/R.utils/issues", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "R6": { - "Package": "R6", - "Version": "2.6.1", - "Source": "Repository", - "Title": "Encapsulated Classes with Reference Semantics", - "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Creates classes with reference semantics, similar to R's built-in reference classes. Compared to reference classes, R6 classes are simpler and lighter-weight, and they are not built on S4 classes so they do not require the methods package. These classes allow public and private members, and they support inheritance, even when the classes are defined in different packages.", - "License": "MIT + file LICENSE", - "URL": "https://r6.r-lib.org, https://github.com/r-lib/R6", - "BugReports": "https://github.com/r-lib/R6/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Suggests": [ - "lobstr", - "testthat (>= 3.0.0)" - ], - "Config/Needs/website": "tidyverse/tidytemplate, ggplot2, microbenchmark, scales", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" - }, - "RColorBrewer": { - "Package": "RColorBrewer", - "Version": "1.1-3", - "Source": "Repository", - "Date": "2022-04-03", - "Title": "ColorBrewer Palettes", - "Authors@R": "c(person(given = \"Erich\", family = \"Neuwirth\", role = c(\"aut\", \"cre\"), email = \"erich.neuwirth@univie.ac.at\"))", - "Author": "Erich Neuwirth [aut, cre]", - "Maintainer": "Erich Neuwirth ", - "Depends": [ - "R (>= 2.0.0)" - ], - "Description": "Provides color schemes for maps (and other graphics) designed by Cynthia Brewer as described at http://colorbrewer2.org.", - "License": "Apache License 2.0", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "Rcpp": { - "Package": "Rcpp", - "Version": "1.0.14", - "Source": "Repository", - "Title": "Seamless R and C++ Integration", - "Date": "2025-01-11", - "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Romain\", \"Francois\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"JJ\", \"Allaire\", role = \"aut\", comment = c(ORCID = \"0000-0003-0174-9868\")), person(\"Kevin\", \"Ushey\", role = \"aut\", comment = c(ORCID = \"0000-0003-2880-7407\")), person(\"Qiang\", \"Kou\", role = \"aut\", comment = c(ORCID = \"0000-0001-6786-5453\")), person(\"Nathan\", \"Russell\", role = \"aut\"), person(\"Iñaki\", \"Ucar\", role = \"aut\", comment = c(ORCID = \"0000-0001-6403-5550\")), person(\"Doug\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"John\", \"Chambers\", role = \"aut\"))", - "Description": "The 'Rcpp' package provides R functions as well as C++ classes which offer a seamless integration of R and C++. Many R data types and objects can be mapped back and forth to C++ equivalents which facilitates both writing of new code as well as easier integration of third-party libraries. Documentation about 'Rcpp' is provided by several vignettes included in this package, via the 'Rcpp Gallery' site at , the paper by Eddelbuettel and Francois (2011, ), the book by Eddelbuettel (2013, ) and the paper by Eddelbuettel and Balamuta (2018, ); see 'citation(\"Rcpp\")' for details.", - "Imports": [ - "methods", - "utils" - ], - "Suggests": [ - "tinytest", - "inline", - "rbenchmark", - "pkgKitten (>= 0.1.2)" - ], - "URL": "https://www.rcpp.org, https://dirk.eddelbuettel.com/code/rcpp.html, https://github.com/RcppCore/Rcpp", - "License": "GPL (>= 2)", - "BugReports": "https://github.com/RcppCore/Rcpp/issues", - "MailingList": "rcpp-devel@lists.r-forge.r-project.org", - "RoxygenNote": "6.1.1", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Dirk Eddelbuettel [aut, cre] (), Romain Francois [aut] (), JJ Allaire [aut] (), Kevin Ushey [aut] (), Qiang Kou [aut] (), Nathan Russell [aut], Iñaki Ucar [aut] (), Doug Bates [aut] (), John Chambers [aut]", - "Maintainer": "Dirk Eddelbuettel ", - "Repository": "CRAN" - }, - "RcppArmadillo": { - "Package": "RcppArmadillo", - "Version": "14.4.2-1", - "Source": "Repository", - "Type": "Package", - "Title": "'Rcpp' Integration for the 'Armadillo' Templated Linear Algebra Library", - "Date": "2025-04-25", - "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Romain\", \"Francois\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Doug\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Binxiang\", \"Ni\", role = \"aut\"), person(\"Conrad\", \"Sanderson\", role = \"aut\", comment = c(ORCID = \"0000-0002-0049-4501\")))", - "Description": "'Armadillo' is a templated C++ linear algebra library (by Conrad Sanderson) that aims towards a good balance between speed and ease of use. Integer, floating point and complex numbers are supported, as well as a subset of trigonometric and statistics functions. Various matrix decompositions are provided through optional integration with LAPACK and ATLAS libraries. The 'RcppArmadillo' package includes the header files from the templated 'Armadillo' library. Thus users do not need to install 'Armadillo' itself in order to use 'RcppArmadillo'. From release 7.800.0 on, 'Armadillo' is licensed under Apache License 2; previous releases were under licensed as MPL 2.0 from version 3.800.0 onwards and LGPL-3 prior to that; 'RcppArmadillo' (the 'Rcpp' bindings/bridge to Armadillo) is licensed under the GNU GPL version 2 or later, as is the rest of 'Rcpp'.", - "License": "GPL (>= 2)", - "LazyLoad": "yes", - "Depends": [ - "R (>= 3.3.0)" - ], - "LinkingTo": [ - "Rcpp" - ], - "Imports": [ - "Rcpp (>= 1.0.12)", - "stats", - "utils", - "methods" - ], - "Suggests": [ - "tinytest", - "Matrix (>= 1.3.0)", - "pkgKitten", - "reticulate", - "slam" - ], - "URL": "https://github.com/RcppCore/RcppArmadillo, https://dirk.eddelbuettel.com/code/rcpp.armadillo.html", - "BugReports": "https://github.com/RcppCore/RcppArmadillo/issues", - "RoxygenNote": "6.0.1", - "NeedsCompilation": "yes", - "Author": "Dirk Eddelbuettel [aut, cre] (), Romain Francois [aut] (), Doug Bates [aut] (), Binxiang Ni [aut], Conrad Sanderson [aut] ()", - "Maintainer": "Dirk Eddelbuettel ", - "Repository": "https://packagemanager.posit.co/cran/latest", - "Encoding": "UTF-8" - }, - "SimMultiCorrData": { - "Package": "SimMultiCorrData", - "Version": "0.2.2", - "Source": "Repository", - "Type": "Package", - "Title": "Simulation of Correlated Data with Multiple Variable Types", - "Author": "Allison Cynthia Fialkowski", - "Maintainer": "Allison Cynthia Fialkowski ", - "Description": "Generate continuous (normal or non-normal), binary, ordinal, and count (Poisson or Negative Binomial) variables with a specified correlation matrix. It can also produce a single continuous variable. This package can be used to simulate data sets that mimic real-world situations (i.e. clinical or genetic data sets, plasmodes). All variables are generated from standard normal variables with an imposed intermediate correlation matrix. Continuous variables are simulated by specifying mean, variance, skewness, standardized kurtosis, and fifth and sixth standardized cumulants using either Fleishman's third-order () or Headrick's fifth-order () polynomial transformation. Binary and ordinal variables are simulated using a modification of the ordsample() function from 'GenOrd'. Count variables are simulated using the inverse cdf method. There are two simulation pathways which differ primarily according to the calculation of the intermediate correlation matrix. In Correlation Method 1, the intercorrelations involving count variables are determined using a simulation based, logarithmic correlation correction (adapting Yahav and Shmueli's 2012 method, ). In Correlation Method 2, the count variables are treated as ordinal (adapting Barbiero and Ferrari's 2015 modification of GenOrd, ). There is an optional error loop that corrects the final correlation matrix to be within a user-specified precision value of the target matrix. The package also includes functions to calculate standardized cumulants for theoretical distributions or from real data sets, check if a target correlation matrix is within the possible correlation bounds (given the distributions of the simulated variables), summarize results (numerically or graphically), to verify valid power method pdfs, and to calculate lower standardized kurtosis bounds.", - "Depends": [ - "R (>= 3.3.0)" - ], - "License": "GPL-2", - "Imports": [ - "BB", - "nleqslv", - "GenOrd", - "psych", - "Matrix", - "VGAM", - "triangle", - "ggplot2", - "grid", - "stats", - "utils" - ], - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "6.0.1", - "Suggests": [ - "knitr", - "rmarkdown", - "printr", - "testthat" - ], - "VignetteBuilder": "knitr", - "URL": "https://github.com/AFialkowski/SimMultiCorrData", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "TTR": { - "Package": "TTR", - "Version": "0.24.4", - "Source": "Repository", - "Type": "Package", - "Title": "Technical Trading Rules", - "Authors@R": "c( person(given=\"Joshua\", family=\"Ulrich\", role=c(\"cre\",\"aut\"), email=\"josh.m.ulrich@gmail.com\"), person(given=c(\"Ethan\",\"B.\"), family=\"Smith\", role=\"ctb\") )", - "Imports": [ - "xts (>= 0.10-0)", - "zoo", - "curl" - ], - "LinkingTo": [ - "xts" - ], - "Enhances": [ - "quantmod" - ], - "Suggests": [ - "RUnit" - ], - "Description": "A collection of over 50 technical indicators for creating technical trading rules. The package also provides fast implementations of common rolling-window functions, and several volatility calculations.", - "License": "GPL (>= 2)", - "URL": "https://github.com/joshuaulrich/TTR", - "BugReports": "https://github.com/joshuaulrich/TTR/issues", - "NeedsCompilation": "yes", - "Author": "Joshua Ulrich [cre, aut], Ethan B. Smith [ctb]", - "Maintainer": "Joshua Ulrich ", - "Repository": "CRAN" - }, - "VGAM": { - "Package": "VGAM", - "Version": "1.1-13", - "Source": "Repository", - "Date": "2025-02-11", - "Title": "Vector Generalized Linear and Additive Models", - "Authors@R": "c(person(\"Thomas\", \"Yee\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-9970-3907\"), email = \"t.yee@auckland.ac.nz\"), person(\"Cleve\", \"Moler\", role = \"ctb\", comment = \"LINPACK routines in src\"))", - "Author": "Thomas Yee [aut, cre] (), Cleve Moler [ctb] (LINPACK routines in src)", - "Maintainer": "Thomas Yee ", - "Depends": [ - "R (>= 4.1.0)", - "methods", - "stats", - "stats4", - "splines" - ], - "Suggests": [ - "VGAMextra", - "MASS", - "mgcv" - ], - "Enhances": [ - "VGAMdata" - ], - "Description": "An implementation of about 6 major classes of statistical regression models. The central algorithm is Fisher scoring and iterative reweighted least squares. At the heart of this package are the vector generalized linear and additive model (VGLM/VGAM) classes. VGLMs can be loosely thought of as multivariate GLMs. VGAMs are data-driven VGLMs that use smoothing. The book \"Vector Generalized Linear and Additive Models: With an Implementation in R\" (Yee, 2015) gives details of the statistical framework and the package. Currently only fixed-effects models are implemented. Many (100+) models and distributions are estimated by maximum likelihood estimation (MLE) or penalized MLE. The other classes are RR-VGLMs (reduced-rank VGLMs), quadratic RR-VGLMs, doubly constrained RR-VGLMs, quadratic RR-VGLMs, reduced-rank VGAMs, RCIMs (row-column interaction models)---these classes perform constrained and unconstrained quadratic ordination (CQO/UQO) models in ecology, as well as constrained additive ordination (CAO). Hauck-Donner effect detection is implemented. Note that these functions are subject to change; see the NEWS and ChangeLog files for latest changes.", - "License": "GPL-3", - "URL": "https://www.stat.auckland.ac.nz/~yee/VGAM/", - "NeedsCompilation": "yes", - "BuildVignettes": "yes", - "LazyLoad": "yes", - "LazyData": "yes", - "Repository": "CRAN" - }, - "askpass": { - "Package": "askpass", - "Version": "1.2.1", - "Source": "Repository", - "Type": "Package", - "Title": "Password Entry Utilities for R, Git, and SSH", - "Authors@R": "person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\"))", - "Description": "Cross-platform utilities for prompting the user for credentials or a passphrase, for example to authenticate with a server or read a protected key. Includes native programs for MacOS and Windows, hence no 'tcltk' is required. Password entry can be invoked in two different ways: directly from R via the askpass() function, or indirectly as password-entry back-end for 'ssh-agent' or 'git-credential' via the SSH_ASKPASS and GIT_ASKPASS environment variables. Thereby the user can be prompted for credentials or a passphrase if needed when R calls out to git or ssh.", - "License": "MIT + file LICENSE", - "URL": "https://r-lib.r-universe.dev/askpass", - "BugReports": "https://github.com/r-lib/askpass/issues", - "Encoding": "UTF-8", - "Imports": [ - "sys (>= 2.1)" - ], - "RoxygenNote": "7.2.3", - "Suggests": [ - "testthat" - ], - "Language": "en-US", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] ()", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "assertthat": { - "Package": "assertthat", - "Version": "0.2.1", - "Source": "Repository", - "Title": "Easy Pre and Post Assertions", - "Authors@R": "person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", c(\"aut\", \"cre\"))", - "Description": "An extension to stopifnot() that makes it easy to declare the pre and post conditions that you code should satisfy, while also producing friendly error messages so that your users know what's gone wrong.", - "License": "GPL-3", - "Imports": [ - "tools" - ], - "Suggests": [ - "testthat", - "covr" - ], - "RoxygenNote": "6.0.1", - "Collate": "'assert-that.r' 'on-failure.r' 'assertions-file.r' 'assertions-scalar.R' 'assertions.r' 'base.r' 'base-comparison.r' 'base-is.r' 'base-logical.r' 'base-misc.r' 'utils.r' 'validate-that.R'", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "backports": { - "Package": "backports", - "Version": "1.5.0", - "Source": "Repository", - "Type": "Package", - "Title": "Reimplementations of Functions Introduced Since R-3.0.0", - "Authors@R": "c( person(\"Michel\", \"Lang\", NULL, \"michellang@gmail.com\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0001-9754-0393\")), person(\"Duncan\", \"Murdoch\", NULL, \"murdoch.duncan@gmail.com\", role = c(\"aut\")), person(\"R Core Team\", role = \"aut\"))", - "Maintainer": "Michel Lang ", - "Description": "Functions introduced or changed since R v3.0.0 are re-implemented in this package. The backports are conditionally exported in order to let R resolve the function name to either the implemented backport, or the respective base version, if available. Package developers can make use of new functions or arguments by selectively importing specific backports to support older installations.", - "URL": "https://github.com/r-lib/backports", - "BugReports": "https://github.com/r-lib/backports/issues", - "License": "GPL-2 | GPL-3", - "NeedsCompilation": "yes", - "ByteCompile": "yes", - "Depends": [ - "R (>= 3.0.0)" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "Author": "Michel Lang [cre, aut] (), Duncan Murdoch [aut], R Core Team [aut]", - "Repository": "CRAN" - }, - "base64enc": { - "Package": "base64enc", - "Version": "0.1-3", - "Source": "Repository", - "Title": "Tools for base64 encoding", - "Author": "Simon Urbanek ", - "Maintainer": "Simon Urbanek ", - "Depends": [ - "R (>= 2.9.0)" - ], - "Enhances": [ - "png" - ], - "Description": "This package provides tools for handling base64 encoding. It is more flexible than the orphaned base64 package.", - "License": "GPL-2 | GPL-3", - "URL": "http://www.rforge.net/base64enc", - "NeedsCompilation": "yes", - "Repository": "CRAN" - }, - "benchmarkme": { - "Package": "benchmarkme", - "Version": "1.0.8", - "Source": "Repository", - "Type": "Package", - "Title": "Crowd Sourced System Benchmarks", - "Authors@R": "person(\"Colin\", \"Gillespie\", , \"csgillespie@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-1787-0275\"))", - "Maintainer": "Colin Gillespie ", - "Description": "Benchmark your CPU and compare against other CPUs. Also provides functions for obtaining system specifications, such as RAM, CPU type, and R version.", - "License": "GPL-2 | GPL-3", - "URL": "https://github.com/csgillespie/benchmarkme", - "BugReports": "https://github.com/csgillespie/benchmarkme/issues", - "Depends": [ - "R (>= 3.5.0)" - ], - "Imports": [ - "benchmarkmeData (>= 1.0.4)", - "compiler", - "doParallel", - "dplyr", - "foreach", - "graphics", - "httr", - "Matrix", - "methods", - "parallel", - "stringr", - "tibble", - "utils" - ], - "Suggests": [ - "covr", - "DT", - "ggplot2", - "knitr", - "RcppZiggurat", - "rmarkdown", - "testthat" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "LazyData": "TRUE", - "RoxygenNote": "7.1.2", - "NeedsCompilation": "no", - "Author": "Colin Gillespie [aut, cre] ()", - "Repository": "CRAN" - }, - "benchmarkmeData": { - "Package": "benchmarkmeData", - "Version": "1.0.4", - "Source": "Repository", - "Type": "Package", - "Title": "Data Set for the 'benchmarkme' Package", - "Authors@R": "person(given = \"Colin\", family = \"Gillespie\", role = c(\"aut\", \"cre\"), email = \"csgillespie@gmail.com\", comment = c(ORCID = \"0000-0003-1787-0275\"))", - "Maintainer": "Colin Gillespie ", - "Description": "Crowd sourced benchmarks from running the 'benchmarkme' package.", - "License": "GPL-2 | GPL-3", - "URL": "https://github.com/csgillespie/benchmarkme-data", - "BugReports": "https://github.com/csgillespie/benchmarkme-data/issues", - "Depends": [ - "R (>= 3.5.0)" - ], - "Imports": [ - "dplyr", - "graphics", - "tibble", - "utils" - ], - "Suggests": [ - "benchmarkme", - "covr", - "DT", - "testthat" - ], - "Encoding": "UTF-8", - "LazyData": "TRUE", - "RoxygenNote": "7.1.0", - "NeedsCompilation": "no", - "Author": "Colin Gillespie [aut, cre] ()", - "Repository": "CRAN" - }, - "brew": { - "Package": "brew", - "Version": "1.0-10", - "Source": "Repository", - "Type": "Package", - "Title": "Templating Framework for Report Generation", - "Authors@R": "c( person(\"Jeffrey\", \"Horner\", role = c(\"aut\", \"cph\")), person(\"Greg\", \"Hunt\", , \"greg@firmansyah.com\", role = c(\"aut\", \"cre\", \"cph\")) )", - "Description": "Implements a templating framework for mixing text and R code for report generation. brew template syntax is similar to PHP, Ruby's erb module, Java Server Pages, and Python's psp module.", - "License": "GPL (>= 2)", - "URL": "https://github.com/gregfrog/brew", - "BugReports": "https://github.com/gregfrog/brew/issues", - "Suggests": [ - "testthat (>= 3.0.0)" - ], - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "Repository": "CRAN", - "NeedsCompilation": "no", - "Author": "Jeffrey Horner [aut, cph], Greg Hunt [aut, cre, cph]", - "Maintainer": "Greg Hunt " - }, - "brio": { - "Package": "brio", - "Version": "1.1.5", - "Source": "Repository", - "Title": "Basic R Input Output", - "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Functions to handle basic input output, these functions always read and write UTF-8 (8-bit Unicode Transformation Format) files and provide more explicit control over line endings.", - "License": "MIT + file LICENSE", - "URL": "https://brio.r-lib.org, https://github.com/r-lib/brio", - "BugReports": "https://github.com/r-lib/brio/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Suggests": [ - "covr", - "testthat (>= 3.0.0)" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "yes", - "Author": "Jim Hester [aut] (), Gábor Csárdi [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "bslib": { - "Package": "bslib", - "Version": "0.9.0", - "Source": "Repository", - "Title": "Custom 'Bootstrap' 'Sass' Themes for 'shiny' and 'rmarkdown'", - "Authors@R": "c( person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Garrick\", \"Aden-Buie\", , \"garrick@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-7111-0077\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Javi\", \"Aguilar\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap colorpicker library\"), person(\"Thomas\", \"Park\", role = c(\"ctb\", \"cph\"), comment = \"Bootswatch library\"), person(, \"PayPal\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap accessibility plugin\") )", - "Description": "Simplifies custom 'CSS' styling of both 'shiny' and 'rmarkdown' via 'Bootstrap' 'Sass'. Supports 'Bootstrap' 3, 4 and 5 as well as their various 'Bootswatch' themes. An interactive widget is also provided for previewing themes in real time.", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/bslib/, https://github.com/rstudio/bslib", - "BugReports": "https://github.com/rstudio/bslib/issues", - "Depends": [ - "R (>= 2.10)" - ], - "Imports": [ - "base64enc", - "cachem", - "fastmap (>= 1.1.1)", - "grDevices", - "htmltools (>= 0.5.8)", - "jquerylib (>= 0.1.3)", - "jsonlite", - "lifecycle", - "memoise (>= 2.0.1)", - "mime", - "rlang", - "sass (>= 0.4.9)" - ], - "Suggests": [ - "bsicons", - "curl", - "fontawesome", - "future", - "ggplot2", - "knitr", - "magrittr", - "rappdirs", - "rmarkdown (>= 2.7)", - "shiny (> 1.8.1)", - "testthat", - "thematic", - "tools", - "utils", - "withr", - "yaml" - ], - "Config/Needs/deploy": "BH, chiflights22, colourpicker, commonmark, cpp11, cpsievert/chiflights22, cpsievert/histoslider, dplyr, DT, ggplot2, ggridges, gt, hexbin, histoslider, htmlwidgets, lattice, leaflet, lubridate, markdown, modelr, plotly, reactable, reshape2, rprojroot, rsconnect, rstudio/shiny, scales, styler, tibble", - "Config/Needs/routine": "chromote, desc, renv", - "Config/Needs/website": "brio, crosstalk, dplyr, DT, ggplot2, glue, htmlwidgets, leaflet, lorem, palmerpenguins, plotly, purrr, rprojroot, rstudio/htmltools, scales, stringr, tidyr, webshot2", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "zzzz-bs-sass, fonts, zzz-precompile, theme-*, rmd-*", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "Collate": "'accordion.R' 'breakpoints.R' 'bs-current-theme.R' 'bs-dependencies.R' 'bs-global.R' 'bs-remove.R' 'bs-theme-layers.R' 'bs-theme-preset-bootswatch.R' 'bs-theme-preset-brand.R' 'bs-theme-preset-builtin.R' 'bs-theme-preset.R' 'utils.R' 'bs-theme-preview.R' 'bs-theme-update.R' 'bs-theme.R' 'bslib-package.R' 'buttons.R' 'card.R' 'deprecated.R' 'files.R' 'fill.R' 'imports.R' 'input-dark-mode.R' 'input-switch.R' 'layout.R' 'nav-items.R' 'nav-update.R' 'navbar_options.R' 'navs-legacy.R' 'navs.R' 'onLoad.R' 'page.R' 'popover.R' 'precompiled.R' 'print.R' 'shiny-devmode.R' 'sidebar.R' 'staticimports.R' 'tooltip.R' 'utils-deps.R' 'utils-shiny.R' 'utils-tags.R' 'value-box.R' 'version-default.R' 'versions.R'", - "NeedsCompilation": "no", - "Author": "Carson Sievert [aut, cre] (), Joe Cheng [aut], Garrick Aden-Buie [aut] (), Posit Software, PBC [cph, fnd], Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Javi Aguilar [ctb, cph] (Bootstrap colorpicker library), Thomas Park [ctb, cph] (Bootswatch library), PayPal [ctb, cph] (Bootstrap accessibility plugin)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" - }, - "cachem": { - "Package": "cachem", - "Version": "1.1.0", - "Source": "Repository", - "Title": "Cache R Objects with Automatic Pruning", - "Description": "Key-value stores with automatic pruning. Caches can limit either their total size or the age of the oldest object (or both), automatically pruning objects to maintain the constraints.", - "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", c(\"aut\", \"cre\")), person(family = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")))", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "ByteCompile": "true", - "URL": "https://cachem.r-lib.org/, https://github.com/r-lib/cachem", - "Imports": [ - "rlang", - "fastmap (>= 1.2.0)" - ], - "Suggests": [ - "testthat" - ], - "RoxygenNote": "7.2.3", - "Config/Needs/routine": "lobstr", - "Config/Needs/website": "pkgdown", - "NeedsCompilation": "yes", - "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" - }, - "callr": { - "Package": "callr", - "Version": "3.7.6", - "Source": "Repository", - "Title": "Call R from R", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\", \"cph\"), comment = c(ORCID = \"0000-0001-7098-9676\")), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"Ascent Digital Services\", role = c(\"cph\", \"fnd\")) )", - "Description": "It is sometimes useful to perform a computation in a separate R process, without affecting the current R process at all. This packages does exactly that.", - "License": "MIT + file LICENSE", - "URL": "https://callr.r-lib.org, https://github.com/r-lib/callr", - "BugReports": "https://github.com/r-lib/callr/issues", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ - "processx (>= 3.6.1)", - "R6", - "utils" - ], - "Suggests": [ - "asciicast (>= 2.3.1)", - "cli (>= 1.1.0)", - "mockery", - "ps", - "rprojroot", - "spelling", - "testthat (>= 3.2.0)", - "withr (>= 2.3.0)" - ], - "Config/Needs/website": "r-lib/asciicast, glue, htmlwidgets, igraph, tibble, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.3.1.9000", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre, cph] (), Winston Chang [aut], Posit Software, PBC [cph, fnd], Ascent Digital Services [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "checkmate": { - "Package": "checkmate", - "Version": "2.3.2", - "Source": "Repository", - "Type": "Package", - "Title": "Fast and Versatile Argument Checks", - "Description": "Tests and assertions to perform frequent argument checks. A substantial part of the package was written in C to minimize any worries about execution time overhead.", - "Authors@R": "c( person(\"Michel\", \"Lang\", NULL, \"michellang@gmail.com\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0001-9754-0393\")), person(\"Bernd\", \"Bischl\", NULL, \"bernd_bischl@gmx.net\", role = \"ctb\"), person(\"Dénes\", \"Tóth\", NULL, \"toth.denes@kogentum.hu\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4262-3217\")) )", - "URL": "https://mllg.github.io/checkmate/, https://github.com/mllg/checkmate", - "URLNote": "https://github.com/mllg/checkmate", - "BugReports": "https://github.com/mllg/checkmate/issues", - "NeedsCompilation": "yes", - "ByteCompile": "yes", - "Encoding": "UTF-8", - "Depends": [ - "R (>= 3.0.0)" - ], - "Imports": [ - "backports (>= 1.1.0)", - "utils" - ], - "Suggests": [ - "R6", - "fastmatch", - "data.table (>= 1.9.8)", - "devtools", - "ggplot2", - "knitr", - "magrittr", - "microbenchmark", - "rmarkdown", - "testthat (>= 3.0.4)", - "tinytest (>= 1.1.0)", - "tibble" - ], - "License": "BSD_3_clause + file LICENSE", - "VignetteBuilder": "knitr", - "RoxygenNote": "7.3.2", - "Collate": "'AssertCollection.R' 'allMissing.R' 'anyInfinite.R' 'anyMissing.R' 'anyNaN.R' 'asInteger.R' 'assert.R' 'helper.R' 'makeExpectation.R' 'makeTest.R' 'makeAssertion.R' 'checkAccess.R' 'checkArray.R' 'checkAtomic.R' 'checkAtomicVector.R' 'checkCharacter.R' 'checkChoice.R' 'checkClass.R' 'checkComplex.R' 'checkCount.R' 'checkDataFrame.R' 'checkDataTable.R' 'checkDate.R' 'checkDirectoryExists.R' 'checkDisjunct.R' 'checkDouble.R' 'checkEnvironment.R' 'checkFALSE.R' 'checkFactor.R' 'checkFileExists.R' 'checkFlag.R' 'checkFormula.R' 'checkFunction.R' 'checkInt.R' 'checkInteger.R' 'checkIntegerish.R' 'checkList.R' 'checkLogical.R' 'checkMatrix.R' 'checkMultiClass.R' 'checkNamed.R' 'checkNames.R' 'checkNull.R' 'checkNumber.R' 'checkNumeric.R' 'checkOS.R' 'checkPOSIXct.R' 'checkPathForOutput.R' 'checkPermutation.R' 'checkR6.R' 'checkRaw.R' 'checkScalar.R' 'checkScalarNA.R' 'checkSetEqual.R' 'checkString.R' 'checkSubset.R' 'checkTRUE.R' 'checkTibble.R' 'checkVector.R' 'coalesce.R' 'isIntegerish.R' 'matchArg.R' 'qassert.R' 'qassertr.R' 'vname.R' 'wfwl.R' 'zzz.R'", - "Author": "Michel Lang [cre, aut] (), Bernd Bischl [ctb], Dénes Tóth [ctb] ()", - "Maintainer": "Michel Lang ", - "Repository": "https://packagemanager.posit.co/cran/latest" - }, - "cli": { - "Package": "cli", - "Version": "3.6.5", - "Source": "Repository", - "Title": "Helpers for Developing Command Line Interfaces", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"gabor@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Kirill\", \"Müller\", role = \"ctb\"), person(\"Salim\", \"Brüggemann\", , \"salim-b@pm.me\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A suite of tools to build attractive command line interfaces ('CLIs'), from semantic elements: headings, lists, alerts, paragraphs, etc. Supports custom themes via a 'CSS'-like language. It also contains a number of lower level 'CLI' elements: rules, boxes, trees, and 'Unicode' symbols with 'ASCII' alternatives. It support ANSI colors and text styles as well.", - "License": "MIT + file LICENSE", - "URL": "https://cli.r-lib.org, https://github.com/r-lib/cli", - "BugReports": "https://github.com/r-lib/cli/issues", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ - "utils" - ], - "Suggests": [ - "callr", - "covr", - "crayon", - "digest", - "glue (>= 1.6.0)", - "grDevices", - "htmltools", - "htmlwidgets", - "knitr", - "methods", - "processx", - "ps (>= 1.3.4.9000)", - "rlang (>= 1.0.2.9003)", - "rmarkdown", - "rprojroot", - "rstudioapi", - "testthat (>= 3.2.0)", - "tibble", - "whoami", - "withr" - ], - "Config/Needs/website": "r-lib/asciicast, bench, brio, cpp11, decor, desc, fansi, prettyunits, sessioninfo, tidyverse/tidytemplate, usethis, vctrs", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Gábor Csárdi [aut, cre], Hadley Wickham [ctb], Kirill Müller [ctb], Salim Brüggemann [ctb] (), Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "clipr": { - "Package": "clipr", - "Version": "0.8.0", - "Source": "Repository", - "Type": "Package", - "Title": "Read and Write from the System Clipboard", - "Authors@R": "c( person(\"Matthew\", \"Lincoln\", , \"matthew.d.lincoln@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4387-3384\")), person(\"Louis\", \"Maddox\", role = \"ctb\"), person(\"Steve\", \"Simpson\", role = \"ctb\"), person(\"Jennifer\", \"Bryan\", role = \"ctb\") )", - "Description": "Simple utility functions to read from and write to the Windows, OS X, and X11 clipboards.", - "License": "GPL-3", - "URL": "https://github.com/mdlincoln/clipr, http://matthewlincoln.net/clipr/", - "BugReports": "https://github.com/mdlincoln/clipr/issues", - "Imports": [ - "utils" - ], - "Suggests": [ - "covr", - "knitr", - "rmarkdown", - "rstudioapi (>= 0.5)", - "testthat (>= 2.0.0)" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.1.2", - "SystemRequirements": "xclip (https://github.com/astrand/xclip) or xsel (http://www.vergenet.net/~conrad/software/xsel/) for accessing the X11 clipboard, or wl-clipboard (https://github.com/bugaevc/wl-clipboard) for systems using Wayland.", - "NeedsCompilation": "no", - "Author": "Matthew Lincoln [aut, cre] (), Louis Maddox [ctb], Steve Simpson [ctb], Jennifer Bryan [ctb]", - "Maintainer": "Matthew Lincoln ", - "Repository": "CRAN" - }, - "codetools": { - "Package": "codetools", - "Version": "0.2-20", - "Source": "Repository", - "Priority": "recommended", - "Author": "Luke Tierney ", - "Description": "Code analysis tools for R.", - "Title": "Code Analysis Tools for R", - "Depends": [ - "R (>= 2.1)" - ], - "Maintainer": "Luke Tierney ", - "URL": "https://gitlab.com/luke-tierney/codetools", - "License": "GPL", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "commonmark": { - "Package": "commonmark", - "Version": "1.9.5", - "Source": "Repository", - "Type": "Package", - "Title": "High Performance CommonMark and Github Markdown Rendering in R", - "Authors@R": "c( person(\"Jeroen\", \"Ooms\", ,\"jeroenooms@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"John MacFarlane\", role = \"cph\", comment = \"Author of cmark\"))", - "Description": "The CommonMark specification defines a rationalized version of markdown syntax. This package uses the 'cmark' reference implementation for converting markdown text into various formats including html, latex and groff man. In addition it exposes the markdown parse tree in xml format. Also includes opt-in support for GFM extensions including tables, autolinks, and strikethrough text.", - "License": "BSD_2_clause + file LICENSE", - "URL": "https://docs.ropensci.org/commonmark/ https://ropensci.r-universe.dev/commonmark", - "BugReports": "https://github.com/r-lib/commonmark/issues", - "Suggests": [ - "curl", - "testthat", - "xml2" - ], - "RoxygenNote": "7.3.2", - "Language": "en-US", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (), John MacFarlane [cph] (Author of cmark)", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "covr": { - "Package": "covr", - "Version": "3.6.4", - "Source": "Repository", - "Encoding": "UTF-8", - "Title": "Test Coverage for Packages", - "Authors@R": "c( person(\"Jim\", \"Hester\", email = \"james.f.hester@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Willem\", \"Ligtenberg\", role = \"ctb\"), person(\"Kirill\", \"Müller\", role = \"ctb\"), person(\"Henrik\", \"Bengtsson\", role = \"ctb\"), person(\"Steve\", \"Peak\", role = \"ctb\"), person(\"Kirill\", \"Sevastyanenko\", role = \"ctb\"), person(\"Jon\", \"Clayden\", role = \"ctb\"), person(\"Robert\", \"Flight\", role = \"ctb\"), person(\"Eric\", \"Brown\", role = \"ctb\"), person(\"Brodie\", \"Gaslam\", role = \"ctb\"), person(\"Will\", \"Beasley\", role = \"ctb\"), person(\"Robert\", \"Krzyzanowski\", role = \"ctb\"), person(\"Markus\", \"Wamser\", role = \"ctb\"), person(\"Karl\", \"Forner\", role = \"ctb\"), person(\"Gergely\", \"Daróczi\", role = \"ctb\"), person(\"Jouni\", \"Helske\", role = \"ctb\"), person(\"Kun\", \"Ren\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Ken\", \"Williams\", role = \"ctb\"), person(\"Chris\", \"Campbell\", role = \"ctb\"), person(\"David\", \"Hugh-Jones\", role = \"ctb\"), person(\"Qin\", \"Wang\", role = \"ctb\"), person(\"Doug\", \"Kelkhoff\", role = \"ctb\"), person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(family = \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(family = \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\") )", - "Description": "Track and report code coverage for your package and (optionally) upload the results to a coverage service like 'Codecov' or 'Coveralls' . Code coverage is a measure of the amount of code being exercised by a set of tests. It is an indirect measure of test quality and completeness. This package is compatible with any testing methodology or framework and tracks coverage of both R code and compiled C/C++/FORTRAN code.", - "URL": "https://covr.r-lib.org, https://github.com/r-lib/covr", - "BugReports": "https://github.com/r-lib/covr/issues", - "Depends": [ - "R (>= 3.1.0)", - "methods" - ], - "Imports": [ - "digest", - "stats", - "utils", - "jsonlite", - "rex", - "httr", - "crayon", - "withr (>= 1.0.2)", - "yaml" - ], - "Suggests": [ - "R6", - "curl", - "knitr", - "rmarkdown", - "htmltools", - "DT (>= 0.2)", - "testthat", - "rlang", - "rstudioapi (>= 0.2)", - "xml2 (>= 1.0.0)", - "parallel", - "memoise", - "mockery", - "covr" - ], - "License": "MIT + file LICENSE", - "VignetteBuilder": "knitr", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "yes", - "Author": "Jim Hester [aut, cre], Willem Ligtenberg [ctb], Kirill Müller [ctb], Henrik Bengtsson [ctb], Steve Peak [ctb], Kirill Sevastyanenko [ctb], Jon Clayden [ctb], Robert Flight [ctb], Eric Brown [ctb], Brodie Gaslam [ctb], Will Beasley [ctb], Robert Krzyzanowski [ctb], Markus Wamser [ctb], Karl Forner [ctb], Gergely Daróczi [ctb], Jouni Helske [ctb], Kun Ren [ctb], Jeroen Ooms [ctb], Ken Williams [ctb], Chris Campbell [ctb], David Hugh-Jones [ctb], Qin Wang [ctb], Doug Kelkhoff [ctb], Ivan Sagalaev [ctb, cph] (highlight.js library), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library)", - "Maintainer": "Jim Hester ", - "Repository": "CRAN" - }, - "cpp11": { - "Package": "cpp11", - "Version": "0.5.2", - "Source": "Repository", - "Title": "A C++11 Interface for R's C Interface", - "Authors@R": "c( person(\"Davis\", \"Vaughan\", email = \"davis@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4777-038X\")), person(\"Jim\",\"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Romain\", \"François\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Benjamin\", \"Kietzman\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Provides a header only, C++11 interface to R's C interface. Compared to other approaches 'cpp11' strives to be safe against long jumps from the C API as well as C++ exceptions, conform to normal R function semantics and supports interaction with 'ALTREP' vectors.", - "License": "MIT + file LICENSE", - "URL": "https://cpp11.r-lib.org, https://github.com/r-lib/cpp11", - "BugReports": "https://github.com/r-lib/cpp11/issues", - "Depends": [ - "R (>= 4.0.0)" - ], - "Suggests": [ - "bench", - "brio", - "callr", - "cli", - "covr", - "decor", - "desc", - "ggplot2", - "glue", - "knitr", - "lobstr", - "mockery", - "progress", - "rmarkdown", - "scales", - "Rcpp", - "testthat (>= 3.2.0)", - "tibble", - "utils", - "vctrs", - "withr" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/Needs/cpp11/cpp_register": "brio, cli, decor, desc, glue, tibble, vctrs", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Davis Vaughan [aut, cre] (), Jim Hester [aut] (), Romain François [aut] (), Benjamin Kietzman [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Davis Vaughan ", - "Repository": "CRAN" - }, - "crayon": { - "Package": "crayon", - "Version": "1.5.3", - "Source": "Repository", - "Title": "Colored Terminal Output", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Brodie\", \"Gaslam\", , \"brodie.gaslam@yahoo.com\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "The crayon package is now superseded. Please use the 'cli' package for new projects. Colored terminal output on terminals that support 'ANSI' color and highlight codes. It also works in 'Emacs' 'ESS'. 'ANSI' color support is automatically detected. Colors and highlighting can be combined and nested. New styles can also be created easily. This package was inspired by the 'chalk' 'JavaScript' project.", - "License": "MIT + file LICENSE", - "URL": "https://r-lib.github.io/crayon/, https://github.com/r-lib/crayon", - "BugReports": "https://github.com/r-lib/crayon/issues", - "Imports": [ - "grDevices", - "methods", - "utils" - ], - "Suggests": [ - "mockery", - "rstudioapi", - "testthat", - "withr" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "Collate": "'aaa-rstudio-detect.R' 'aaaa-rematch2.R' 'aab-num-ansi-colors.R' 'aac-num-ansi-colors.R' 'ansi-256.R' 'ansi-palette.R' 'combine.R' 'string.R' 'utils.R' 'crayon-package.R' 'disposable.R' 'enc-utils.R' 'has_ansi.R' 'has_color.R' 'link.R' 'styles.R' 'machinery.R' 'parts.R' 'print.R' 'style-var.R' 'show.R' 'string_operations.R'", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre], Brodie Gaslam [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "credentials": { - "Package": "credentials", - "Version": "2.0.2", - "Source": "Repository", - "Type": "Package", - "Title": "Tools for Managing SSH and Git Credentials", - "Authors@R": "person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\"))", - "Description": "Setup and retrieve HTTPS and SSH credentials for use with 'git' and other services. For HTTPS remotes the package interfaces the 'git-credential' utility which 'git' uses to store HTTP usernames and passwords. For SSH remotes we provide convenient functions to find or generate appropriate SSH keys. The package both helps the user to setup a local git installation, and also provides a back-end for git/ssh client libraries to authenticate with existing user credentials.", - "License": "MIT + file LICENSE", - "SystemRequirements": "git (optional)", - "Encoding": "UTF-8", - "Imports": [ - "openssl (>= 1.3)", - "sys (>= 2.1)", - "curl", - "jsonlite", - "askpass" - ], - "Suggests": [ - "testthat", - "knitr", - "rmarkdown" - ], - "RoxygenNote": "7.2.1", - "VignetteBuilder": "knitr", - "Language": "en-US", - "URL": "https://docs.ropensci.org/credentials/ https://r-lib.r-universe.dev/credentials", - "BugReports": "https://github.com/r-lib/credentials/issues", - "NeedsCompilation": "no", - "Author": "Jeroen Ooms [aut, cre] ()", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "crosstalk": { - "Package": "crosstalk", - "Version": "1.2.1", - "Source": "Repository", - "Type": "Package", - "Title": "Inter-Widget Interactivity for HTML Widgets", - "Authors@R": "c( person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@posit.co\"), person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"carson@posit.co\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(family = \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(family = \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(family = \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js library\"), person(\"Kristopher Michael\", \"Kowal\", role = c(\"ctb\", \"cph\"), comment = \"es5-shim library\"), person(family = \"es5-shim contributors\", role = c(\"ctb\", \"cph\"), comment = \"es5-shim library\"), person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"), comment = \"ion.rangeSlider library\"), person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"), comment = \"Javascript strftime library\") )", - "Description": "Provides building blocks for allowing HTML widgets to communicate with each other, with Shiny or without (i.e. static .html files). Currently supports linked brushing and filtering.", - "License": "MIT + file LICENSE", - "Imports": [ - "htmltools (>= 0.3.6)", - "jsonlite", - "lazyeval", - "R6" - ], - "Suggests": [ - "shiny", - "ggplot2", - "testthat (>= 2.1.0)", - "sass", - "bslib" - ], - "URL": "https://rstudio.github.io/crosstalk/, https://github.com/rstudio/crosstalk", - "BugReports": "https://github.com/rstudio/crosstalk/issues", - "RoxygenNote": "7.2.3", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Author": "Joe Cheng [aut], Carson Sievert [aut, cre] (), Posit Software, PBC [cph, fnd], jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Brian Reavis [ctb, cph] (selectize.js library), Kristopher Michael Kowal [ctb, cph] (es5-shim library), es5-shim contributors [ctb, cph] (es5-shim library), Denis Ineshin [ctb, cph] (ion.rangeSlider library), Sami Samhuri [ctb, cph] (Javascript strftime library)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" - }, - "curl": { - "Package": "curl", - "Version": "6.2.2", - "Source": "Repository", - "Type": "Package", - "Title": "A Modern and Flexible Web Client for R", - "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Posit Software, PBC\", role = \"cph\"))", - "Description": "Bindings to 'libcurl' for performing fully configurable HTTP/FTP requests where responses can be processed in memory, on disk, or streaming via the callback or connection interfaces. Some knowledge of 'libcurl' is recommended; for a more-user-friendly web client see the 'httr2' package which builds on this package with http specific tools and logic.", - "License": "MIT + file LICENSE", - "SystemRequirements": "libcurl (>= 7.62): libcurl-devel (rpm) or libcurl4-openssl-dev (deb)", - "URL": "https://jeroen.r-universe.dev/curl", - "BugReports": "https://github.com/jeroen/curl/issues", - "Suggests": [ - "spelling", - "testthat (>= 1.0.0)", - "knitr", - "jsonlite", - "later", - "rmarkdown", - "httpuv (>= 1.4.4)", - "webutils" - ], - "VignetteBuilder": "knitr", - "Depends": [ - "R (>= 3.0.0)" - ], - "RoxygenNote": "7.3.2.9000", - "Encoding": "UTF-8", - "Language": "en-US", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (), Hadley Wickham [ctb], Posit Software, PBC [cph]", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "desc": { - "Package": "desc", - "Version": "1.4.3", - "Source": "Repository", - "Title": "Manipulate DESCRIPTION Files", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Kirill\", \"Müller\", role = \"aut\"), person(\"Jim\", \"Hester\", , \"james.f.hester@gmail.com\", role = \"aut\"), person(\"Maëlle\", \"Salmon\", role = \"ctb\", comment = c(ORCID = \"0000-0002-2815-0399\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Maintainer": "Gábor Csárdi ", - "Description": "Tools to read, write, create, and manipulate DESCRIPTION files. It is intended for packages that create or manipulate other packages.", - "License": "MIT + file LICENSE", - "URL": "https://desc.r-lib.org/, https://github.com/r-lib/desc", - "BugReports": "https://github.com/r-lib/desc/issues", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ - "cli", - "R6", - "utils" - ], - "Suggests": [ - "callr", - "covr", - "gh", - "spelling", - "testthat", - "whoami", - "withr" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.2.3", - "Collate": "'assertions.R' 'authors-at-r.R' 'built.R' 'classes.R' 'collate.R' 'constants.R' 'deps.R' 'desc-package.R' 'description.R' 'encoding.R' 'find-package-root.R' 'latex.R' 'non-oo-api.R' 'package-archives.R' 'read.R' 'remotes.R' 'str.R' 'syntax_checks.R' 'urls.R' 'utils.R' 'validate.R' 'version.R'", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre], Kirill Müller [aut], Jim Hester [aut], Maëlle Salmon [ctb] (), Posit Software, PBC [cph, fnd]", - "Repository": "CRAN" - }, - "devtools": { - "Package": "devtools", - "Version": "2.4.5", - "Source": "Repository", - "Title": "Tools to Make Developing R Packages Easier", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Jennifer\", \"Bryan\", , \"jenny@rstudio.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"RStudio\", role = c(\"cph\", \"fnd\")) )", - "Description": "Collection of package development tools.", - "License": "MIT + file LICENSE", - "URL": "https://devtools.r-lib.org/, https://github.com/r-lib/devtools", - "BugReports": "https://github.com/r-lib/devtools/issues", - "Depends": [ - "R (>= 3.0.2)", - "usethis (>= 2.1.6)" - ], - "Imports": [ - "cli (>= 3.3.0)", - "desc (>= 1.4.1)", - "ellipsis (>= 0.3.2)", - "fs (>= 1.5.2)", - "lifecycle (>= 1.0.1)", - "memoise (>= 2.0.1)", - "miniUI (>= 0.1.1.1)", - "pkgbuild (>= 1.3.1)", - "pkgdown (>= 2.0.6)", - "pkgload (>= 1.3.0)", - "profvis (>= 0.3.7)", - "rcmdcheck (>= 1.4.0)", - "remotes (>= 2.4.2)", - "rlang (>= 1.0.4)", - "roxygen2 (>= 7.2.1)", - "rversions (>= 2.1.1)", - "sessioninfo (>= 1.2.2)", - "stats", - "testthat (>= 3.1.5)", - "tools", - "urlchecker (>= 1.0.1)", - "utils", - "withr (>= 2.5.0)" - ], - "Suggests": [ - "BiocManager (>= 1.30.18)", - "callr (>= 3.7.1)", - "covr (>= 3.5.1)", - "curl (>= 4.3.2)", - "digest (>= 0.6.29)", - "DT (>= 0.23)", - "foghorn (>= 1.4.2)", - "gh (>= 1.3.0)", - "gmailr (>= 1.0.1)", - "httr (>= 1.4.3)", - "knitr (>= 1.39)", - "lintr (>= 3.0.0)", - "MASS", - "mockery (>= 0.4.3)", - "pingr (>= 2.0.1)", - "rhub (>= 1.1.1)", - "rmarkdown (>= 2.14)", - "rstudioapi (>= 0.13)", - "spelling (>= 2.2)" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.2.1", - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut], Jim Hester [aut], Winston Chang [aut], Jennifer Bryan [aut, cre] (), RStudio [cph, fnd]", - "Maintainer": "Jennifer Bryan ", - "Repository": "CRAN" - }, - "diffobj": { - "Package": "diffobj", - "Version": "0.3.6", - "Source": "Repository", - "Type": "Package", - "Title": "Diffs for R Objects", - "Description": "Generate a colorized diff of two R objects for an intuitive visualization of their differences.", - "Authors@R": "c( person( \"Brodie\", \"Gaslam\", email=\"brodie.gaslam@yahoo.com\", role=c(\"aut\", \"cre\")), person( \"Michael B.\", \"Allen\", email=\"ioplex@gmail.com\", role=c(\"ctb\", \"cph\"), comment=\"Original C implementation of Myers Diff Algorithm\"))", - "Depends": [ - "R (>= 3.1.0)" - ], - "License": "GPL-2 | GPL-3", - "URL": "https://github.com/brodieG/diffobj", - "BugReports": "https://github.com/brodieG/diffobj/issues", - "RoxygenNote": "7.2.3", - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "Suggests": [ - "knitr", - "rmarkdown" - ], - "Collate": "'capt.R' 'options.R' 'pager.R' 'check.R' 'finalizer.R' 'misc.R' 'html.R' 'styles.R' 's4.R' 'core.R' 'diff.R' 'get.R' 'guides.R' 'hunks.R' 'layout.R' 'myerssimple.R' 'rdiff.R' 'rds.R' 'set.R' 'subset.R' 'summmary.R' 'system.R' 'text.R' 'tochar.R' 'trim.R' 'word.R'", - "Imports": [ - "crayon (>= 1.3.2)", - "tools", - "methods", - "utils", - "stats" - ], - "NeedsCompilation": "yes", - "Author": "Brodie Gaslam [aut, cre], Michael B. Allen [ctb, cph] (Original C implementation of Myers Diff Algorithm)", - "Maintainer": "Brodie Gaslam ", - "Repository": "CRAN" - }, - "digest": { - "Package": "digest", - "Version": "0.6.37", - "Source": "Repository", - "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Antoine\", \"Lucas\", role=\"ctb\"), person(\"Jarek\", \"Tuszynski\", role=\"ctb\"), person(\"Henrik\", \"Bengtsson\", role=\"ctb\", comment = c(ORCID = \"0000-0002-7579-5165\")), person(\"Simon\", \"Urbanek\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2297-1732\")), person(\"Mario\", \"Frasca\", role=\"ctb\"), person(\"Bryan\", \"Lewis\", role=\"ctb\"), person(\"Murray\", \"Stokely\", role=\"ctb\"), person(\"Hannes\", \"Muehleisen\", role=\"ctb\"), person(\"Duncan\", \"Murdoch\", role=\"ctb\"), person(\"Jim\", \"Hester\", role=\"ctb\"), person(\"Wush\", \"Wu\", role=\"ctb\", comment = c(ORCID = \"0000-0001-5180-0567\")), person(\"Qiang\", \"Kou\", role=\"ctb\", comment = c(ORCID = \"0000-0001-6786-5453\")), person(\"Thierry\", \"Onkelinx\", role=\"ctb\", comment = c(ORCID = \"0000-0001-8804-4216\")), person(\"Michel\", \"Lang\", role=\"ctb\", comment = c(ORCID = \"0000-0001-9754-0393\")), person(\"Viliam\", \"Simko\", role=\"ctb\"), person(\"Kurt\", \"Hornik\", role=\"ctb\", comment = c(ORCID = \"0000-0003-4198-9911\")), person(\"Radford\", \"Neal\", role=\"ctb\", comment = c(ORCID = \"0000-0002-2473-3407\")), person(\"Kendon\", \"Bell\", role=\"ctb\", comment = c(ORCID = \"0000-0002-9093-8312\")), person(\"Matthew\", \"de Queljoe\", role=\"ctb\"), person(\"Dmitry\", \"Selivanov\", role=\"ctb\"), person(\"Ion\", \"Suruceanu\", role=\"ctb\"), person(\"Bill\", \"Denney\", role=\"ctb\"), person(\"Dirk\", \"Schumacher\", role=\"ctb\"), person(\"András\", \"Svraka\", role=\"ctb\"), person(\"Sergey\", \"Fedorov\", role=\"ctb\"), person(\"Will\", \"Landau\", role=\"ctb\", comment = c(ORCID = \"0000-0003-1878-3253\")), person(\"Floris\", \"Vanderhaeghe\", role=\"ctb\", comment = c(ORCID = \"0000-0002-6378-6229\")), person(\"Kevin\", \"Tappe\", role=\"ctb\"), person(\"Harris\", \"McGehee\", role=\"ctb\"), person(\"Tim\", \"Mastny\", role=\"ctb\"), person(\"Aaron\", \"Peikert\", role=\"ctb\", comment = c(ORCID = \"0000-0001-7813-818X\")), person(\"Mark\", \"van der Loo\", role=\"ctb\", comment = c(ORCID = \"0000-0002-9807-4686\")), person(\"Chris\", \"Muir\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2555-3878\")), person(\"Moritz\", \"Beller\", role=\"ctb\", comment = c(ORCID = \"0000-0003-4852-0526\")), person(\"Sebastian\", \"Campbell\", role=\"ctb\"), person(\"Winston\", \"Chang\", role=\"ctb\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Dean\", \"Attali\", role=\"ctb\", comment = c(ORCID = \"0000-0002-5645-3493\")), person(\"Michael\", \"Chirico\", role=\"ctb\", comment = c(ORCID = \"0000-0003-0787-087X\")), person(\"Kevin\", \"Ushey\", role=\"ctb\"))", - "Date": "2024-08-19", - "Title": "Create Compact Hash Digests of R Objects", - "Description": "Implementation of a function 'digest()' for the creation of hash digests of arbitrary R objects (using the 'md5', 'sha-1', 'sha-256', 'crc32', 'xxhash', 'murmurhash', 'spookyhash', 'blake3', 'crc32c', 'xxh3_64', and 'xxh3_128' algorithms) permitting easy comparison of R language objects, as well as functions such as'hmac()' to create hash-based message authentication code. Please note that this package is not meant to be deployed for cryptographic purposes for which more comprehensive (and widely tested) libraries such as 'OpenSSL' should be used.", - "URL": "https://github.com/eddelbuettel/digest, https://dirk.eddelbuettel.com/code/digest.html", - "BugReports": "https://github.com/eddelbuettel/digest/issues", - "Depends": [ - "R (>= 3.3.0)" - ], - "Imports": [ - "utils" - ], - "License": "GPL (>= 2)", - "Suggests": [ - "tinytest", - "simplermarkdown" - ], - "VignetteBuilder": "simplermarkdown", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Dirk Eddelbuettel [aut, cre] (), Antoine Lucas [ctb], Jarek Tuszynski [ctb], Henrik Bengtsson [ctb] (), Simon Urbanek [ctb] (), Mario Frasca [ctb], Bryan Lewis [ctb], Murray Stokely [ctb], Hannes Muehleisen [ctb], Duncan Murdoch [ctb], Jim Hester [ctb], Wush Wu [ctb] (), Qiang Kou [ctb] (), Thierry Onkelinx [ctb] (), Michel Lang [ctb] (), Viliam Simko [ctb], Kurt Hornik [ctb] (), Radford Neal [ctb] (), Kendon Bell [ctb] (), Matthew de Queljoe [ctb], Dmitry Selivanov [ctb], Ion Suruceanu [ctb], Bill Denney [ctb], Dirk Schumacher [ctb], András Svraka [ctb], Sergey Fedorov [ctb], Will Landau [ctb] (), Floris Vanderhaeghe [ctb] (), Kevin Tappe [ctb], Harris McGehee [ctb], Tim Mastny [ctb], Aaron Peikert [ctb] (), Mark van der Loo [ctb] (), Chris Muir [ctb] (), Moritz Beller [ctb] (), Sebastian Campbell [ctb], Winston Chang [ctb] (), Dean Attali [ctb] (), Michael Chirico [ctb] (), Kevin Ushey [ctb]", - "Maintainer": "Dirk Eddelbuettel ", - "Repository": "CRAN" - }, - "doParallel": { - "Package": "doParallel", - "Version": "1.0.17", - "Source": "Repository", - "Type": "Package", - "Title": "Foreach Parallel Adaptor for the 'parallel' Package", - "Authors@R": "c(person(\"Folashade\", \"Daniel\", role=\"cre\", email=\"fdaniel@microsoft.com\"), person(\"Microsoft\", \"Corporation\", role=c(\"aut\", \"cph\")), person(\"Steve\", \"Weston\", role=\"aut\"), person(\"Dan\", \"Tenenbaum\", role=\"ctb\"))", - "Description": "Provides a parallel backend for the %dopar% function using the parallel package.", - "Depends": [ - "R (>= 2.14.0)", - "foreach (>= 1.2.0)", - "iterators (>= 1.0.0)", - "parallel", - "utils" - ], - "Suggests": [ - "caret", - "mlbench", - "rpart", - "RUnit" - ], - "Enhances": [ - "compiler" - ], - "License": "GPL-2", - "URL": "https://github.com/RevolutionAnalytics/doparallel", - "BugReports": "https://github.com/RevolutionAnalytics/doparallel/issues", - "NeedsCompilation": "no", - "Author": "Folashade Daniel [cre], Microsoft Corporation [aut, cph], Steve Weston [aut], Dan Tenenbaum [ctb]", - "Maintainer": "Folashade Daniel ", - "Repository": "CRAN" - }, - "doSNOW": { - "Package": "doSNOW", - "Version": "1.0.20", - "Source": "Repository", - "Type": "Package", - "Title": "Foreach Parallel Adaptor for the 'snow' Package", - "Authors@R": "c(person(\"Folashade\", \"Daniel\", role=\"cre\", email = \"fdaniel@microsoft.com\"), person(\"Microsoft\", \"Corporation\", role=c(\"aut\",\"cph\")), person(\"Stephen\", \"Weston\", role=\"aut\"))", - "Description": "Provides a parallel backend for the %dopar% function using the snow package of Tierney, Rossini, Li, and Sevcikova.", - "Depends": [ - "R (>= 2.5.0)", - "foreach(>= 1.2.0)", - "iterators(>= 1.0.0)", - "snow(>= 0.3.0)", - "utils" - ], - "Suggests": [ - "compiler", - "RUnit", - "caret", - "mlbench", - "rpart", - "parallel" - ], - "License": "GPL-2", - "NeedsCompilation": "no", - "Author": "Folashade Daniel [cre], Microsoft Corporation [aut, cph], Stephen Weston [aut]", - "Maintainer": "Folashade Daniel ", - "Repository": "CRAN" - }, - "downlit": { - "Package": "downlit", - "Version": "0.4.4", - "Source": "Repository", - "Title": "Syntax Highlighting and Automatic Linking", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Syntax highlighting of R code, specifically designed for the needs of 'RMarkdown' packages like 'pkgdown', 'hugodown', and 'bookdown'. It includes linking of function calls to their documentation on the web, and automatic translation of ANSI escapes in output to the equivalent HTML.", - "License": "MIT + file LICENSE", - "URL": "https://downlit.r-lib.org/, https://github.com/r-lib/downlit", - "BugReports": "https://github.com/r-lib/downlit/issues", - "Depends": [ - "R (>= 4.0.0)" - ], - "Imports": [ - "brio", - "desc", - "digest", - "evaluate", - "fansi", - "memoise", - "rlang", - "vctrs", - "withr", - "yaml" - ], - "Suggests": [ - "covr", - "htmltools", - "jsonlite", - "MASS", - "MassSpecWavelet", - "pkgload", - "rmarkdown", - "testthat (>= 3.0.0)", - "xml2" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "https://packagemanager.posit.co/cran/latest" - }, - "dplyr": { - "Package": "dplyr", - "Version": "1.1.4", - "Source": "Repository", - "Type": "Package", - "Title": "A Grammar of Data Manipulation", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Romain\", \"François\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Lionel\", \"Henry\", role = \"aut\"), person(\"Kirill\", \"Müller\", role = \"aut\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4777-038X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A fast, consistent tool for working with data frame like objects, both in memory and out of memory.", - "License": "MIT + file LICENSE", - "URL": "https://dplyr.tidyverse.org, https://github.com/tidyverse/dplyr", - "BugReports": "https://github.com/tidyverse/dplyr/issues", - "Depends": [ - "R (>= 3.5.0)" - ], - "Imports": [ - "cli (>= 3.4.0)", - "generics", - "glue (>= 1.3.2)", - "lifecycle (>= 1.0.3)", - "magrittr (>= 1.5)", - "methods", - "pillar (>= 1.9.0)", - "R6", - "rlang (>= 1.1.0)", - "tibble (>= 3.2.0)", - "tidyselect (>= 1.2.0)", - "utils", - "vctrs (>= 0.6.4)" - ], - "Suggests": [ - "bench", - "broom", - "callr", - "covr", - "DBI", - "dbplyr (>= 2.2.1)", - "ggplot2", - "knitr", - "Lahman", - "lobstr", - "microbenchmark", - "nycflights13", - "purrr", - "rmarkdown", - "RMySQL", - "RPostgreSQL", - "RSQLite", - "stringi (>= 1.7.6)", - "testthat (>= 3.1.5)", - "tidyr (>= 1.3.0)", - "withr" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse, shiny, pkgdown, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre] (), Romain François [aut] (), Lionel Henry [aut], Kirill Müller [aut] (), Davis Vaughan [aut] (), Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "ellipsis": { - "Package": "ellipsis", - "Version": "0.3.2", - "Source": "Repository", - "Title": "Tools for Working with ...", - "Description": "The ellipsis is a powerful tool for extending functions. Unfortunately this power comes at a cost: misspelled arguments will be silently ignored. The ellipsis package provides a collection of functions to catch problems and alert the user.", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = c(\"aut\", \"cre\")), person(\"RStudio\", role = \"cph\") )", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "RoxygenNote": "7.1.1", - "URL": "https://ellipsis.r-lib.org, https://github.com/r-lib/ellipsis", - "BugReports": "https://github.com/r-lib/ellipsis/issues", - "Depends": [ - "R (>= 3.2)" - ], - "Imports": [ - "rlang (>= 0.3.0)" - ], - "Suggests": [ - "covr", - "testthat" - ], - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre], RStudio [cph]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "evaluate": { - "Package": "evaluate", - "Version": "1.0.3", - "Source": "Repository", - "Type": "Package", - "Title": "Parsing and Evaluation Tools that Provide More Details than the Default", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Yihui\", \"Xie\", role = \"aut\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Michael\", \"Lawrence\", role = \"ctb\"), person(\"Thomas\", \"Kluyver\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Barret\", \"Schloerke\", role = \"ctb\"), person(\"Adam\", \"Ryczkowski\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Michel\", \"Lang\", role = \"ctb\"), person(\"Karolis\", \"Koncevičius\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Parsing and evaluation tools that make it easy to recreate the command line behaviour of R.", - "License": "MIT + file LICENSE", - "URL": "https://evaluate.r-lib.org/, https://github.com/r-lib/evaluate", - "BugReports": "https://github.com/r-lib/evaluate/issues", - "Depends": [ - "R (>= 3.6.0)" - ], - "Suggests": [ - "callr", - "covr", - "ggplot2 (>= 3.3.6)", - "lattice", - "methods", - "pkgload", - "rlang", - "knitr", - "testthat (>= 3.0.0)", - "withr" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre], Yihui Xie [aut] (), Michael Lawrence [ctb], Thomas Kluyver [ctb], Jeroen Ooms [ctb], Barret Schloerke [ctb], Adam Ryczkowski [ctb], Hiroaki Yutani [ctb], Michel Lang [ctb], Karolis Koncevičius [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "fansi": { - "Package": "fansi", - "Version": "1.0.6", - "Source": "Repository", - "Title": "ANSI Control Sequence Aware String Functions", - "Description": "Counterparts to R string manipulation functions that account for the effects of ANSI text formatting control sequences.", - "Authors@R": "c( person(\"Brodie\", \"Gaslam\", email=\"brodie.gaslam@yahoo.com\", role=c(\"aut\", \"cre\")), person(\"Elliott\", \"Sales De Andrade\", role=\"ctb\"), person(family=\"R Core Team\", email=\"R-core@r-project.org\", role=\"cph\", comment=\"UTF8 byte length calcs from src/util.c\" ))", - "Depends": [ - "R (>= 3.1.0)" - ], - "License": "GPL-2 | GPL-3", - "URL": "https://github.com/brodieG/fansi", - "BugReports": "https://github.com/brodieG/fansi/issues", - "VignetteBuilder": "knitr", - "Suggests": [ - "unitizer", - "knitr", - "rmarkdown" - ], - "Imports": [ - "grDevices", - "utils" - ], - "RoxygenNote": "7.2.3", - "Encoding": "UTF-8", - "Collate": "'constants.R' 'fansi-package.R' 'internal.R' 'load.R' 'misc.R' 'nchar.R' 'strwrap.R' 'strtrim.R' 'strsplit.R' 'substr2.R' 'trimws.R' 'tohtml.R' 'unhandled.R' 'normalize.R' 'sgr.R'", - "NeedsCompilation": "yes", - "Author": "Brodie Gaslam [aut, cre], Elliott Sales De Andrade [ctb], R Core Team [cph] (UTF8 byte length calcs from src/util.c)", - "Maintainer": "Brodie Gaslam ", - "Repository": "CRAN" - }, - "farver": { - "Package": "farver", - "Version": "2.1.2", - "Source": "Repository", - "Type": "Package", - "Title": "High Performance Colour Space Manipulation", - "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Berendea\", \"Nicolae\", role = \"aut\", comment = \"Author of the ColorSpace C++ library\"), person(\"Romain\", \"François\", , \"romain@purrple.cat\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "The encoding of colour can be handled in many different ways, using different colour spaces. As different colour spaces have different uses, efficient conversion between these representations are important. The 'farver' package provides a set of functions that gives access to very fast colour space conversion and comparisons implemented in C++, and offers speed improvements over the 'convertColor' function in the 'grDevices' package.", - "License": "MIT + file LICENSE", - "URL": "https://farver.data-imaginist.com, https://github.com/thomasp85/farver", - "BugReports": "https://github.com/thomasp85/farver/issues", - "Suggests": [ - "covr", - "testthat (>= 3.0.0)" - ], - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "NeedsCompilation": "yes", - "Author": "Thomas Lin Pedersen [cre, aut] (), Berendea Nicolae [aut] (Author of the ColorSpace C++ library), Romain François [aut] (), Posit, PBC [cph, fnd]", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" - }, - "fastmap": { - "Package": "fastmap", - "Version": "1.2.0", - "Source": "Repository", - "Title": "Fast Data Structures", - "Authors@R": "c( person(\"Winston\", \"Chang\", email = \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(given = \"Tessil\", role = \"cph\", comment = \"hopscotch_map library\") )", - "Description": "Fast implementation of data structures, including a key-value store, stack, and queue. Environments are commonly used as key-value stores in R, but every time a new key is used, it is added to R's global symbol table, causing a small amount of memory leakage. This can be problematic in cases where many different keys are used. Fastmap avoids this memory leak issue by implementing the map using data structures in C++.", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "Suggests": [ - "testthat (>= 2.1.1)" - ], - "URL": "https://r-lib.github.io/fastmap/, https://github.com/r-lib/fastmap", - "BugReports": "https://github.com/r-lib/fastmap/issues", - "NeedsCompilation": "yes", - "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd], Tessil [cph] (hopscotch_map library)", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" - }, - "fontawesome": { - "Package": "fontawesome", - "Version": "0.5.3", - "Source": "Repository", - "Type": "Package", - "Title": "Easily Work with 'Font Awesome' Icons", - "Description": "Easily and flexibly insert 'Font Awesome' icons into 'R Markdown' documents and 'Shiny' apps. These icons can be inserted into HTML content through inline 'SVG' tags or 'i' tags. There is also a utility function for exporting 'Font Awesome' icons as 'PNG' images for those situations where raster graphics are needed.", - "Authors@R": "c( person(\"Richard\", \"Iannone\", , \"rich@posit.co\", c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"ctb\"), person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome font\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "License": "MIT + file LICENSE", - "URL": "https://github.com/rstudio/fontawesome, https://rstudio.github.io/fontawesome/", - "BugReports": "https://github.com/rstudio/fontawesome/issues", - "Encoding": "UTF-8", - "ByteCompile": "true", - "RoxygenNote": "7.3.2", - "Depends": [ - "R (>= 3.3.0)" - ], - "Imports": [ - "rlang (>= 1.0.6)", - "htmltools (>= 0.5.1.1)" - ], - "Suggests": [ - "covr", - "dplyr (>= 1.0.8)", - "gt (>= 0.9.0)", - "knitr (>= 1.31)", - "testthat (>= 3.0.0)", - "rsvg" - ], - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Author": "Richard Iannone [aut, cre] (), Christophe Dervieux [ctb] (), Winston Chang [ctb], Dave Gandy [ctb, cph] (Font-Awesome font), Posit Software, PBC [cph, fnd]", - "Maintainer": "Richard Iannone ", - "Repository": "CRAN" - }, - "foreach": { - "Package": "foreach", - "Version": "1.5.2", - "Source": "Repository", - "Type": "Package", - "Title": "Provides Foreach Looping Construct", - "Authors@R": "c(person(\"Folashade\", \"Daniel\", role=\"cre\", email=\"fdaniel@microsoft.com\"), person(\"Hong\", \"Ooi\", role=\"ctb\"), person(\"Rich\", \"Calaway\", role=\"ctb\"), person(\"Microsoft\", role=c(\"aut\", \"cph\")), person(\"Steve\", \"Weston\", role=\"aut\"))", - "Description": "Support for the foreach looping construct. Foreach is an idiom that allows for iterating over elements in a collection, without the use of an explicit loop counter. This package in particular is intended to be used for its return value, rather than for its side effects. In that sense, it is similar to the standard lapply function, but doesn't require the evaluation of a function. Using foreach without side effects also facilitates executing the loop in parallel.", - "License": "Apache License (== 2.0)", - "URL": "https://github.com/RevolutionAnalytics/foreach", - "BugReports": "https://github.com/RevolutionAnalytics/foreach/issues", - "Depends": [ - "R (>= 2.5.0)" - ], - "Imports": [ - "codetools", - "utils", - "iterators" - ], - "Suggests": [ - "randomForest", - "doMC", - "doParallel", - "testthat", - "knitr", - "rmarkdown" - ], - "VignetteBuilder": "knitr", - "RoxygenNote": "7.1.1", - "Collate": "'callCombine.R' 'foreach.R' 'do.R' 'foreach-ext.R' 'foreach-pkg.R' 'getDoPar.R' 'getDoSeq.R' 'getsyms.R' 'iter.R' 'nextElem.R' 'onLoad.R' 'setDoPar.R' 'setDoSeq.R' 'times.R' 'utils.R'", - "NeedsCompilation": "no", - "Author": "Folashade Daniel [cre], Hong Ooi [ctb], Rich Calaway [ctb], Microsoft [aut, cph], Steve Weston [aut]", - "Maintainer": "Folashade Daniel ", - "Repository": "CRAN" - }, - "fs": { - "Package": "fs", - "Version": "1.6.6", - "Source": "Repository", - "Title": "Cross-Platform File System Operations Based on 'libuv'", - "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"libuv project contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Joyent, Inc. and other Node contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A cross-platform interface to file system operations, built on top of the 'libuv' C library.", - "License": "MIT + file LICENSE", - "URL": "https://fs.r-lib.org, https://github.com/r-lib/fs", - "BugReports": "https://github.com/r-lib/fs/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "methods" - ], - "Suggests": [ - "covr", - "crayon", - "knitr", - "pillar (>= 1.0.0)", - "rmarkdown", - "spelling", - "testthat (>= 3.0.0)", - "tibble (>= 1.1.0)", - "vctrs (>= 0.3.0)", - "withr" - ], - "VignetteBuilder": "knitr", - "ByteCompile": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Copyright": "file COPYRIGHTS", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.2.3", - "SystemRequirements": "GNU make", - "NeedsCompilation": "yes", - "Author": "Jim Hester [aut], Hadley Wickham [aut], Gábor Csárdi [aut, cre], libuv project contributors [cph] (libuv library), Joyent, Inc. and other Node contributors [cph] (libuv library), Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "generics": { - "Package": "generics", - "Version": "0.1.4", - "Source": "Repository", - "Title": "Common S3 Generics not Provided by Base R Methods Related to Model Fitting", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Max\", \"Kuhn\", , \"max@posit.co\", role = \"aut\"), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"https://ror.org/03wc8by49\")) )", - "Description": "In order to reduce potential package dependencies and conflicts, generics provides a number of commonly used S3 generics.", - "License": "MIT + file LICENSE", - "URL": "https://generics.r-lib.org, https://github.com/r-lib/generics", - "BugReports": "https://github.com/r-lib/generics/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "methods" - ], - "Suggests": [ - "covr", - "pkgload", - "testthat (>= 3.0.0)", - "tibble", - "withr" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre] (ORCID: ), Max Kuhn [aut], Davis Vaughan [aut], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "gert": { - "Package": "gert", - "Version": "2.1.5", - "Source": "Repository", - "Type": "Package", - "Title": "Simple Git Client for R", - "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Jennifer\", \"Bryan\", role = \"ctb\", email = \"jenny@posit.co\", comment = c(ORCID = \"0000-0002-6983-2759\")))", - "Description": "Simple git client for R based on 'libgit2' with support for SSH and HTTPS remotes. All functions in 'gert' use basic R data types (such as vectors and data-frames) for their arguments and return values. User credentials are shared with command line 'git' through the git-credential store and ssh keys stored on disk or ssh-agent.", - "License": "MIT + file LICENSE", - "URL": "https://docs.ropensci.org/gert/, https://ropensci.r-universe.dev/gert", - "BugReports": "https://github.com/r-lib/gert/issues", - "Imports": [ - "askpass", - "credentials (>= 1.2.1)", - "openssl (>= 2.0.3)", - "rstudioapi (>= 0.11)", - "sys", - "zip (>= 2.1.0)" - ], - "Suggests": [ - "spelling", - "knitr", - "rmarkdown", - "testthat" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2.9000", - "SystemRequirements": "libgit2 (>= 1.0): libgit2-devel (rpm) or libgit2-dev (deb)", - "Language": "en-US", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (), Jennifer Bryan [ctb] ()", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "ggfun": { - "Package": "ggfun", - "Version": "0.1.8", - "Source": "Repository", - "Title": "Miscellaneous Functions for 'ggplot2'", - "Authors@R": "c( person(\"Guangchuang\", \"Yu\", email = \"guangchuangyu@gmail.com\", role = c(\"aut\", \"cre\", \"cph\"), comment = c(ORCID = \"0000-0002-6485-8781\")), person(\"Shuangbin\", \"Xu\", email = \"xshuangbin@163.com\", role = \"aut\", comment = c(ORCID=\"0000-0003-3513-5362\")) )", - "Description": "Useful functions and utilities for 'ggplot' object (e.g., geometric layers, themes, and utilities to edit the object).", - "Depends": [ - "R (>= 4.1.0)" - ], - "Imports": [ - "cli", - "dplyr", - "ggplot2", - "grid", - "rlang", - "utils", - "yulab.utils (>= 0.1.6)" - ], - "Suggests": [ - "ggplotify", - "knitr", - "rmarkdown", - "prettydoc", - "tidyr", - "ggnewscale" - ], - "VignetteBuilder": "knitr", - "ByteCompile": "true", - "License": "Artistic-2.0", - "Encoding": "UTF-8", - "URL": "https://github.com/YuLab-SMU/ggfun", - "BugReports": "https://github.com/YuLab-SMU/ggfun/issues", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Guangchuang Yu [aut, cre, cph] (), Shuangbin Xu [aut] ()", - "Maintainer": "Guangchuang Yu ", - "Repository": "CRAN" - }, - "ggimage": { - "Package": "ggimage", - "Version": "0.3.3", - "Source": "Repository", - "Title": "Use Image in 'ggplot2'", - "Authors@R": "person(\"Guangchuang\", \"Yu\", email = \"guangchuangyu@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6485-8781\"))", - "Description": "Supports image files and graphic objects to be visualized in 'ggplot2' graphic system.", - "Depends": [ - "R (>= 3.4.0)", - "ggplot2" - ], - "Imports": [ - "ggfun", - "ggplotify", - "grid", - "jsonlite", - "magick", - "methods", - "scales", - "tibble", - "tools", - "utils", - "withr" - ], - "Suggests": [ - "ape", - "ggtree", - "gridGraphics", - "httr", - "rsvg" - ], - "ByteCompile": "true", - "License": "Artistic-2.0", - "URL": "https://github.com/GuangchuangYu/ggimage (devel), https://yulab-smu.top/pkgdocs/ggimage.html (vignette)", - "BugReports": "https://github.com/GuangchuangYu/ggimage/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Author": "Guangchuang Yu [aut, cre] ()", - "Maintainer": "Guangchuang Yu ", - "Repository": "CRAN" - }, - "ggplot2": { - "Package": "ggplot2", - "Version": "3.5.2", - "Source": "Repository", - "Title": "Create Elegant Data Visualisations Using the Grammar of Graphics", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Winston\", \"Chang\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Lionel\", \"Henry\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Kohske\", \"Takahashi\", role = \"aut\"), person(\"Claus\", \"Wilke\", role = \"aut\", comment = c(ORCID = \"0000-0002-7470-9261\")), person(\"Kara\", \"Woo\", role = \"aut\", comment = c(ORCID = \"0000-0002-5125-4188\")), person(\"Hiroaki\", \"Yutani\", role = \"aut\", comment = c(ORCID = \"0000-0002-3385-7233\")), person(\"Dewey\", \"Dunnington\", role = \"aut\", comment = c(ORCID = \"0000-0002-9415-4582\")), person(\"Teun\", \"van den Brand\", role = \"aut\", comment = c(ORCID = \"0000-0002-9335-7468\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A system for 'declaratively' creating graphics, based on \"The Grammar of Graphics\". You provide the data, tell 'ggplot2' how to map variables to aesthetics, what graphical primitives to use, and it takes care of the details.", - "License": "MIT + file LICENSE", - "URL": "https://ggplot2.tidyverse.org, https://github.com/tidyverse/ggplot2", - "BugReports": "https://github.com/tidyverse/ggplot2/issues", - "Depends": [ - "R (>= 3.5)" - ], - "Imports": [ - "cli", - "glue", - "grDevices", - "grid", - "gtable (>= 0.1.1)", - "isoband", - "lifecycle (> 1.0.1)", - "MASS", - "mgcv", - "rlang (>= 1.1.0)", - "scales (>= 1.3.0)", - "stats", - "tibble", - "vctrs (>= 0.6.0)", - "withr (>= 2.5.0)" - ], - "Suggests": [ - "covr", - "dplyr", - "ggplot2movies", - "hexbin", - "Hmisc", - "knitr", - "mapproj", - "maps", - "multcomp", - "munsell", - "nlme", - "profvis", - "quantreg", - "ragg (>= 1.2.6)", - "RColorBrewer", - "rmarkdown", - "rpart", - "sf (>= 0.7-3)", - "svglite (>= 2.1.2)", - "testthat (>= 3.1.2)", - "vdiffr (>= 1.0.6)", - "xml2" - ], - "Enhances": [ - "sp" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "ggtext, tidyr, forcats, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.3.2", - "Collate": "'ggproto.R' 'ggplot-global.R' 'aaa-.R' 'aes-colour-fill-alpha.R' 'aes-evaluation.R' 'aes-group-order.R' 'aes-linetype-size-shape.R' 'aes-position.R' 'compat-plyr.R' 'utilities.R' 'aes.R' 'utilities-checks.R' 'legend-draw.R' 'geom-.R' 'annotation-custom.R' 'annotation-logticks.R' 'geom-polygon.R' 'geom-map.R' 'annotation-map.R' 'geom-raster.R' 'annotation-raster.R' 'annotation.R' 'autolayer.R' 'autoplot.R' 'axis-secondary.R' 'backports.R' 'bench.R' 'bin.R' 'coord-.R' 'coord-cartesian-.R' 'coord-fixed.R' 'coord-flip.R' 'coord-map.R' 'coord-munch.R' 'coord-polar.R' 'coord-quickmap.R' 'coord-radial.R' 'coord-sf.R' 'coord-transform.R' 'data.R' 'docs_layer.R' 'facet-.R' 'facet-grid-.R' 'facet-null.R' 'facet-wrap.R' 'fortify-lm.R' 'fortify-map.R' 'fortify-multcomp.R' 'fortify-spatial.R' 'fortify.R' 'stat-.R' 'geom-abline.R' 'geom-rect.R' 'geom-bar.R' 'geom-bin2d.R' 'geom-blank.R' 'geom-boxplot.R' 'geom-col.R' 'geom-path.R' 'geom-contour.R' 'geom-count.R' 'geom-crossbar.R' 'geom-segment.R' 'geom-curve.R' 'geom-defaults.R' 'geom-ribbon.R' 'geom-density.R' 'geom-density2d.R' 'geom-dotplot.R' 'geom-errorbar.R' 'geom-errorbarh.R' 'geom-freqpoly.R' 'geom-function.R' 'geom-hex.R' 'geom-histogram.R' 'geom-hline.R' 'geom-jitter.R' 'geom-label.R' 'geom-linerange.R' 'geom-point.R' 'geom-pointrange.R' 'geom-quantile.R' 'geom-rug.R' 'geom-sf.R' 'geom-smooth.R' 'geom-spoke.R' 'geom-text.R' 'geom-tile.R' 'geom-violin.R' 'geom-vline.R' 'ggplot2-package.R' 'grob-absolute.R' 'grob-dotstack.R' 'grob-null.R' 'grouping.R' 'theme-elements.R' 'guide-.R' 'guide-axis.R' 'guide-axis-logticks.R' 'guide-axis-stack.R' 'guide-axis-theta.R' 'guide-legend.R' 'guide-bins.R' 'guide-colorbar.R' 'guide-colorsteps.R' 'guide-custom.R' 'layer.R' 'guide-none.R' 'guide-old.R' 'guides-.R' 'guides-grid.R' 'hexbin.R' 'import-standalone-obj-type.R' 'import-standalone-types-check.R' 'labeller.R' 'labels.R' 'layer-sf.R' 'layout.R' 'limits.R' 'margins.R' 'performance.R' 'plot-build.R' 'plot-construction.R' 'plot-last.R' 'plot.R' 'position-.R' 'position-collide.R' 'position-dodge.R' 'position-dodge2.R' 'position-identity.R' 'position-jitter.R' 'position-jitterdodge.R' 'position-nudge.R' 'position-stack.R' 'quick-plot.R' 'reshape-add-margins.R' 'save.R' 'scale-.R' 'scale-alpha.R' 'scale-binned.R' 'scale-brewer.R' 'scale-colour.R' 'scale-continuous.R' 'scale-date.R' 'scale-discrete-.R' 'scale-expansion.R' 'scale-gradient.R' 'scale-grey.R' 'scale-hue.R' 'scale-identity.R' 'scale-linetype.R' 'scale-linewidth.R' 'scale-manual.R' 'scale-shape.R' 'scale-size.R' 'scale-steps.R' 'scale-type.R' 'scale-view.R' 'scale-viridis.R' 'scales-.R' 'stat-align.R' 'stat-bin.R' 'stat-bin2d.R' 'stat-bindot.R' 'stat-binhex.R' 'stat-boxplot.R' 'stat-contour.R' 'stat-count.R' 'stat-density-2d.R' 'stat-density.R' 'stat-ecdf.R' 'stat-ellipse.R' 'stat-function.R' 'stat-identity.R' 'stat-qq-line.R' 'stat-qq.R' 'stat-quantilemethods.R' 'stat-sf-coordinates.R' 'stat-sf.R' 'stat-smooth-methods.R' 'stat-smooth.R' 'stat-sum.R' 'stat-summary-2d.R' 'stat-summary-bin.R' 'stat-summary-hex.R' 'stat-summary.R' 'stat-unique.R' 'stat-ydensity.R' 'summarise-plot.R' 'summary.R' 'theme.R' 'theme-defaults.R' 'theme-current.R' 'utilities-break.R' 'utilities-grid.R' 'utilities-help.R' 'utilities-matrix.R' 'utilities-patterns.R' 'utilities-resolution.R' 'utilities-tidy-eval.R' 'zxx.R' 'zzz.R'", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut] (), Winston Chang [aut] (), Lionel Henry [aut], Thomas Lin Pedersen [aut, cre] (), Kohske Takahashi [aut], Claus Wilke [aut] (), Kara Woo [aut] (), Hiroaki Yutani [aut] (), Dewey Dunnington [aut] (), Teun van den Brand [aut] (), Posit, PBC [cph, fnd]", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" - }, - "ggplotify": { - "Package": "ggplotify", - "Version": "0.1.2", - "Source": "Repository", - "Title": "Convert Plot to 'grob' or 'ggplot' Object", - "Authors@R": "c(person(\"Guangchuang\", \"Yu\", email = \"guangchuangyu@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6485-8781\")))", - "Description": "Convert plot function call (using expression or formula) to 'grob' or 'ggplot' object that compatible to the 'grid' and 'ggplot2' ecosystem. With this package, we are able to e.g. using 'cowplot' to align plots produced by 'base' graphics, 'ComplexHeatmap', 'eulerr', 'grid', 'lattice', 'magick', 'pheatmap', 'vcd' etc. by converting them to 'ggplot' objects.", - "Depends": [ - "R (>= 3.4.0)" - ], - "Imports": [ - "ggplot2", - "graphics", - "grDevices", - "grid", - "gridGraphics", - "yulab.utils" - ], - "Suggests": [ - "aplot", - "colorspace", - "cowplot", - "ggimage", - "knitr", - "rmarkdown", - "lattice", - "prettydoc", - "vcd", - "utils" - ], - "VignetteBuilder": "knitr", - "ByteCompile": "true", - "License": "Artistic-2.0", - "URL": "https://github.com/GuangchuangYu/ggplotify", - "BugReports": "https://github.com/GuangchuangYu/ggplotify/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Author": "Guangchuang Yu [aut, cre] ()", - "Maintainer": "Guangchuang Yu ", - "Repository": "CRAN" - }, - "gh": { - "Package": "gh", - "Version": "1.4.1", - "Source": "Repository", - "Title": "'GitHub' 'API'", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"cre\", \"ctb\")), person(\"Jennifer\", \"Bryan\", role = \"aut\"), person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Minimal client to access the 'GitHub' 'API'.", - "License": "MIT + file LICENSE", - "URL": "https://gh.r-lib.org/, https://github.com/r-lib/gh#readme", - "BugReports": "https://github.com/r-lib/gh/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "cli (>= 3.0.1)", - "gitcreds", - "glue", - "httr2", - "ini", - "jsonlite", - "lifecycle", - "rlang (>= 1.0.0)" - ], - "Suggests": [ - "covr", - "knitr", - "mockery", - "rmarkdown", - "rprojroot", - "spelling", - "testthat (>= 3.0.0)", - "withr" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.3.1.9000", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [cre, ctb], Jennifer Bryan [aut], Hadley Wickham [aut], Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "gitcreds": { - "Package": "gitcreds", - "Version": "0.1.2", - "Source": "Repository", - "Title": "Query 'git' Credentials from 'R'", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"RStudio\", role = c(\"cph\", \"fnd\")) )", - "Description": "Query, set, delete credentials from the 'git' credential store. Manage 'GitHub' tokens and other 'git' credentials. This package is to be used by other packages that need to authenticate to 'GitHub' and/or other 'git' repositories.", - "License": "MIT + file LICENSE", - "URL": "https://gitcreds.r-lib.org/, https://github.com/r-lib/gitcreds", - "BugReports": "https://github.com/r-lib/gitcreds/issues", - "Depends": [ - "R (>= 3.4)" - ], - "Suggests": [ - "codetools", - "covr", - "knitr", - "mockery", - "oskeyring", - "rmarkdown", - "testthat (>= 3.0.0)", - "withr" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.1.9000", - "SystemRequirements": "git", - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre], RStudio [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "glue": { - "Package": "glue", - "Version": "1.8.0", - "Source": "Repository", - "Title": "Interpreted String Literals", - "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "An implementation of interpreted string literals, inspired by Python's Literal String Interpolation and Docstrings and Julia's Triple-Quoted String Literals .", - "License": "MIT + file LICENSE", - "URL": "https://glue.tidyverse.org/, https://github.com/tidyverse/glue", - "BugReports": "https://github.com/tidyverse/glue/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "methods" - ], - "Suggests": [ - "crayon", - "DBI (>= 1.2.0)", - "dplyr", - "knitr", - "magrittr", - "rlang", - "rmarkdown", - "RSQLite", - "testthat (>= 3.2.0)", - "vctrs (>= 0.3.0)", - "waldo (>= 0.5.3)", - "withr" - ], - "VignetteBuilder": "knitr", - "ByteCompile": "true", - "Config/Needs/website": "bench, forcats, ggbeeswarm, ggplot2, R.utils, rprintf, tidyr, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Jim Hester [aut] (), Jennifer Bryan [aut, cre] (), Posit Software, PBC [cph, fnd]", - "Maintainer": "Jennifer Bryan ", - "Repository": "CRAN" - }, - "gridGraphics": { - "Package": "gridGraphics", - "Version": "0.5-1", - "Source": "Repository", - "Title": "Redraw Base Graphics Using 'grid' Graphics", - "Authors@R": "c(person(\"Paul\", \"Murrell\", role = c(\"cre\", \"aut\"), email = \"paul@stat.auckland.ac.nz\"), person(\"Zhijian\", \"Wen\", role = \"aut\", email = \"jwen246@aucklanduni.ac.nz\"))", - "Description": "Functions to convert a page of plots drawn with the 'graphics' package into identical output drawn with the 'grid' package. The result looks like the original 'graphics'-based plot, but consists of 'grid' grobs and viewports that can then be manipulated with 'grid' functions (e.g., edit grobs and revisit viewports).", - "Depends": [ - "grid", - "graphics" - ], - "Imports": [ - "grDevices" - ], - "Suggests": [ - "magick (>= 1.3)", - "pdftools (>= 1.6)" - ], - "License": "GPL (>= 2)", - "URL": "https://github.com/pmur002/gridgraphics", - "NeedsCompilation": "no", - "Author": "Paul Murrell [cre, aut], Zhijian Wen [aut]", - "Maintainer": "Paul Murrell ", - "Repository": "CRAN" - }, - "gtable": { - "Package": "gtable", - "Version": "0.3.6", - "Source": "Repository", - "Title": "Arrange 'Grobs' in Tables", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Tools to make it easier to work with \"tables\" of 'grobs'. The 'gtable' package defines a 'gtable' grob class that specifies a grid along with a list of grobs and their placement in the grid. Further the package makes it easy to manipulate and combine 'gtable' objects so that complex compositions can be built up sequentially.", - "License": "MIT + file LICENSE", - "URL": "https://gtable.r-lib.org, https://github.com/r-lib/gtable", - "BugReports": "https://github.com/r-lib/gtable/issues", - "Depends": [ - "R (>= 4.0)" - ], - "Imports": [ - "cli", - "glue", - "grid", - "lifecycle", - "rlang (>= 1.1.0)", - "stats" - ], - "Suggests": [ - "covr", - "ggplot2", - "knitr", - "profvis", - "rmarkdown", - "testthat (>= 3.0.0)" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2024-10-25", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut], Thomas Lin Pedersen [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "https://packagemanager.posit.co/cran/latest" - }, - "hexSticker": { - "Package": "hexSticker", - "Version": "0.4.9", - "Source": "Repository", - "Title": "Create Hexagon Sticker in R", - "Authors@R": "c(person(given = \"Guangchuang\", family = \"Yu\", email = \"guangchuangyu@gmail.com\", role = c(\"aut\", \"cre\")), person(given = \"Laurent\", family = \"Gatto\", email = \"lg390@cam.ac.uk\", role = \"ctb\"), person(given = \"Johannes\", family = \"Rainer\", email = \"johannes.rainer@eurac.edu\", role = \"ctb\"), person(given = \"Sebastian\", family = \"Gibb\", email = \"mail@sebastiangibb.de\", role = \"ctb\"), person(given = \"Robert\", family = \"Corty\", email = \"rcorty@gmail.com\", role = \"ctb\"), person(given = \"Thomas\", family = \"Neitmann\", email = \"th.neitmann@gmail.com\", role = \"ctb\") )", - "Description": "Helper functions for creating reproducible hexagon sticker purely in R.", - "Depends": [ - "R (>= 3.4.0)" - ], - "Imports": [ - "ggimage", - "ggplot2", - "grDevices", - "hexbin", - "showtext", - "stats", - "sysfonts" - ], - "Suggests": [ - "magick" - ], - "License": "Artistic-2.0", - "ByteCompile": "true", - "URL": "https://github.com/GuangchuangYu/hexSticker", - "BugReports": "https://github.com/GuangchuangYu/hexSticker/issues", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.1.1", - "NeedsCompilation": "no", - "Author": "Guangchuang Yu [aut, cre], Laurent Gatto [ctb], Johannes Rainer [ctb], Sebastian Gibb [ctb], Robert Corty [ctb], Thomas Neitmann [ctb]", - "Maintainer": "Guangchuang Yu ", - "Repository": "CRAN" - }, - "hexbin": { - "Package": "hexbin", - "Version": "1.28.5", - "Source": "Repository", - "Title": "Hexagonal Binning Routines", - "Authors@R": "c(person(given = \"Dan\", family = \"Carr\", role = \"aut\", email = \"dcarr@voxel.galaxy.gmu.edu\"), person(given = c(\"Nicholas\"), family = \"Lewin-Koh\", role = \"aut\"), person(given = \"Martin\", family = \"Maechler\", role = \"aut\", email = \"maechler@stat.math.ethz.ch\"), person(given = \"Deepayan\", family = \"Sarkar\", role = \"aut\", email = \"deepayan.sarkar@r-project.org\"), person(given = \"Edzer\", family = \"Pebesma\", role = \"cre\", comment = c(ORCID = \"0000-0001-8049-7069\"), email = \"edzer.pebesma@uni-muenster.de\"))", - "Depends": [ - "R (>= 2.0.1)", - "methods" - ], - "Imports": [ - "lattice", - "grid", - "graphics", - "grDevices", - "stats", - "utils" - ], - "Suggests": [ - "marray", - "affy", - "Biobase", - "limma", - "knitr" - ], - "Description": "Binning and plotting functions for hexagonal bins.", - "Collate": "lattice.R BTC.R BTY.R grid.hexagons.R grid.hexlegend.R hbox.R hdiffplot.R hexbinList.R hexbinplot.R hexbin.s4.R hexpanel.R hexplom.R hexPlotMA.R hexutil.R hexViewport.R HO.R LINGRAY.R LOCS.R MAG.R RB.R smoothHexbin.R", - "License": "GPL-2", - "VignetteBuilder": "knitr", - "NeedsCompilation": "yes", - "URL": "https://github.com/edzer/hexbin", - "Author": "Dan Carr [aut], Nicholas Lewin-Koh [aut], Martin Maechler [aut], Deepayan Sarkar [aut], Edzer Pebesma [cre] ()", - "Maintainer": "Edzer Pebesma ", - "Repository": "CRAN" - }, - "highr": { - "Package": "highr", - "Version": "0.11", - "Source": "Repository", - "Type": "Package", - "Title": "Syntax Highlighting for R Source Code", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Yixuan\", \"Qiu\", role = \"aut\"), person(\"Christopher\", \"Gandrud\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\") )", - "Description": "Provides syntax highlighting for R source code. Currently it supports LaTeX and HTML output. Source code of other languages is supported via Andre Simon's highlight package ().", - "Depends": [ - "R (>= 3.3.0)" - ], - "Imports": [ - "xfun (>= 0.18)" - ], - "Suggests": [ - "knitr", - "markdown", - "testit" - ], - "License": "GPL", - "URL": "https://github.com/yihui/highr", - "BugReports": "https://github.com/yihui/highr/issues", - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre] (), Yixuan Qiu [aut], Christopher Gandrud [ctb], Qiang Li [ctb]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "hms": { - "Package": "hms", - "Version": "1.1.3", - "Source": "Repository", - "Title": "Pretty Time of Day", - "Date": "2023-03-21", - "Authors@R": "c( person(\"Kirill\", \"Müller\", role = c(\"aut\", \"cre\"), email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"R Consortium\", role = \"fnd\"), person(\"RStudio\", role = \"fnd\") )", - "Description": "Implements an S3 class for storing and formatting time-of-day values, based on the 'difftime' class.", - "Imports": [ - "lifecycle", - "methods", - "pkgconfig", - "rlang (>= 1.0.2)", - "vctrs (>= 0.3.8)" - ], - "Suggests": [ - "crayon", - "lubridate", - "pillar (>= 1.1.0)", - "testthat (>= 3.0.0)" - ], - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "URL": "https://hms.tidyverse.org/, https://github.com/tidyverse/hms", - "BugReports": "https://github.com/tidyverse/hms/issues", - "RoxygenNote": "7.2.3", - "Config/testthat/edition": "3", - "Config/autostyle/scope": "line_breaks", - "Config/autostyle/strict": "false", - "Config/Needs/website": "tidyverse/tidytemplate", - "NeedsCompilation": "no", - "Author": "Kirill Müller [aut, cre] (), R Consortium [fnd], RStudio [fnd]", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" - }, - "htmltools": { - "Package": "htmltools", - "Version": "0.5.8.1", - "Source": "Repository", - "Type": "Package", - "Title": "Tools for HTML", - "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Yihui\", \"Xie\", , \"yihui@posit.co\", role = \"aut\"), person(\"Jeff\", \"Allen\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Tools for HTML generation and output.", - "License": "GPL (>= 2)", - "URL": "https://github.com/rstudio/htmltools, https://rstudio.github.io/htmltools/", - "BugReports": "https://github.com/rstudio/htmltools/issues", - "Depends": [ - "R (>= 2.14.1)" - ], - "Imports": [ - "base64enc", - "digest", - "fastmap (>= 1.1.0)", - "grDevices", - "rlang (>= 1.0.0)", - "utils" - ], - "Suggests": [ - "Cairo", - "markdown", - "ragg", - "shiny", - "testthat", - "withr" - ], - "Enhances": [ - "knitr" - ], - "Config/Needs/check": "knitr", - "Config/Needs/website": "rstudio/quillt, bench", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "Collate": "'colors.R' 'fill.R' 'html_dependency.R' 'html_escape.R' 'html_print.R' 'htmltools-package.R' 'images.R' 'known_tags.R' 'selector.R' 'staticimports.R' 'tag_query.R' 'utils.R' 'tags.R' 'template.R'", - "NeedsCompilation": "yes", - "Author": "Joe Cheng [aut], Carson Sievert [aut, cre] (), Barret Schloerke [aut] (), Winston Chang [aut] (), Yihui Xie [aut], Jeff Allen [aut], Posit Software, PBC [cph, fnd]", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" - }, - "htmlwidgets": { - "Package": "htmlwidgets", - "Version": "1.6.4", - "Source": "Repository", - "Type": "Package", - "Title": "HTML Widgets for R", - "Authors@R": "c( person(\"Ramnath\", \"Vaidyanathan\", role = c(\"aut\", \"cph\")), person(\"Yihui\", \"Xie\", role = \"aut\"), person(\"JJ\", \"Allaire\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Kenton\", \"Russell\", role = c(\"aut\", \"cph\")), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A framework for creating HTML widgets that render in various contexts including the R console, 'R Markdown' documents, and 'Shiny' web applications.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/ramnathv/htmlwidgets", - "BugReports": "https://github.com/ramnathv/htmlwidgets/issues", - "Imports": [ - "grDevices", - "htmltools (>= 0.5.7)", - "jsonlite (>= 0.9.16)", - "knitr (>= 1.8)", - "rmarkdown", - "yaml" - ], - "Suggests": [ - "testthat" - ], - "Enhances": [ - "shiny (>= 1.1)" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Author": "Ramnath Vaidyanathan [aut, cph], Yihui Xie [aut], JJ Allaire [aut], Joe Cheng [aut], Carson Sievert [aut, cre] (), Kenton Russell [aut, cph], Ellis Hughes [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" - }, - "httpuv": { - "Package": "httpuv", - "Version": "1.6.16", - "Source": "Repository", - "Type": "Package", - "Title": "HTTP and WebSocket Server Library", - "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit, PBC\", \"fnd\", role = \"cph\"), person(\"Hector\", \"Corrada Bravo\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Andrzej\", \"Krzemienski\", role = \"cph\", comment = \"optional.hpp\"), person(\"libuv project contributors\", role = \"cph\", comment = \"libuv library, see src/libuv/AUTHORS file\"), person(\"Joyent, Inc. and other Node contributors\", role = \"cph\", comment = \"libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file\"), person(\"Niels\", \"Provos\", role = \"cph\", comment = \"libuv subcomponent: tree.h\"), person(\"Internet Systems Consortium, Inc.\", role = \"cph\", comment = \"libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c\"), person(\"Alexander\", \"Chemeris\", role = \"cph\", comment = \"libuv subcomponent: stdint-msvc2008.h (from msinttypes)\"), person(\"Google, Inc.\", role = \"cph\", comment = \"libuv subcomponent: pthread-fixes.c\"), person(\"Sony Mobile Communcations AB\", role = \"cph\", comment = \"libuv subcomponent: pthread-fixes.c\"), person(\"Berkeley Software Design Inc.\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Kenneth\", \"MacKay\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016)\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Steve\", \"Reid\", role = \"aut\", comment = \"SHA-1 implementation\"), person(\"James\", \"Brown\", role = \"aut\", comment = \"SHA-1 implementation\"), person(\"Bob\", \"Trower\", role = \"aut\", comment = \"base64 implementation\"), person(\"Alexander\", \"Peslyak\", role = \"aut\", comment = \"MD5 implementation\"), person(\"Trantor Standard Systems\", role = \"cph\", comment = \"base64 implementation\"), person(\"Igor\", \"Sysoev\", role = \"cph\", comment = \"http-parser\") )", - "Description": "Provides low-level socket and protocol support for handling HTTP and WebSocket requests directly from within R. It is primarily intended as a building block for other packages, rather than making it particularly easy to create complete web applications using httpuv alone. httpuv is built on top of the libuv and http-parser C libraries, both of which were developed by Joyent, Inc. (See LICENSE file for libuv and http-parser license information.)", - "License": "GPL (>= 2) | file LICENSE", - "URL": "https://github.com/rstudio/httpuv", - "BugReports": "https://github.com/rstudio/httpuv/issues", - "Depends": [ - "R (>= 2.15.1)" - ], - "Imports": [ - "later (>= 0.8.0)", - "promises", - "R6", - "Rcpp (>= 1.0.7)", - "utils" - ], - "Suggests": [ - "callr", - "curl", - "jsonlite", - "testthat", - "websocket" - ], - "LinkingTo": [ - "later", - "Rcpp" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "SystemRequirements": "GNU make, zlib", - "Collate": "'RcppExports.R' 'httpuv.R' 'random_port.R' 'server.R' 'staticServer.R' 'static_paths.R' 'utils.R'", - "NeedsCompilation": "yes", - "Author": "Joe Cheng [aut], Winston Chang [aut, cre], Posit, PBC fnd [cph], Hector Corrada Bravo [ctb], Jeroen Ooms [ctb], Andrzej Krzemienski [cph] (optional.hpp), libuv project contributors [cph] (libuv library, see src/libuv/AUTHORS file), Joyent, Inc. and other Node contributors [cph] (libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file), Niels Provos [cph] (libuv subcomponent: tree.h), Internet Systems Consortium, Inc. [cph] (libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c), Alexander Chemeris [cph] (libuv subcomponent: stdint-msvc2008.h (from msinttypes)), Google, Inc. [cph] (libuv subcomponent: pthread-fixes.c), Sony Mobile Communcations AB [cph] (libuv subcomponent: pthread-fixes.c), Berkeley Software Design Inc. [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Kenneth MacKay [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016) [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Steve Reid [aut] (SHA-1 implementation), James Brown [aut] (SHA-1 implementation), Bob Trower [aut] (base64 implementation), Alexander Peslyak [aut] (MD5 implementation), Trantor Standard Systems [cph] (base64 implementation), Igor Sysoev [cph] (http-parser)", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" - }, - "httr": { - "Package": "httr", - "Version": "1.4.7", - "Source": "Repository", - "Title": "Tools for Working with URLs and HTTP", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Useful tools for working with HTTP organised by HTTP verbs (GET(), POST(), etc). Configuration functions make it easy to control additional request components (authenticate(), add_headers() and so on).", - "License": "MIT + file LICENSE", - "URL": "https://httr.r-lib.org/, https://github.com/r-lib/httr", - "BugReports": "https://github.com/r-lib/httr/issues", - "Depends": [ - "R (>= 3.5)" - ], - "Imports": [ - "curl (>= 5.0.2)", - "jsonlite", - "mime", - "openssl (>= 0.8)", - "R6" - ], - "Suggests": [ - "covr", - "httpuv", - "jpeg", - "knitr", - "png", - "readr", - "rmarkdown", - "testthat (>= 0.8.0)", - "xml2" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre], Posit, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "httr2": { - "Package": "httr2", - "Version": "1.1.2", - "Source": "Repository", - "Title": "Perform HTTP Requests and Process the Responses", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"Maximilian\", \"Girlich\", role = \"ctb\") )", - "Description": "Tools for creating and modifying HTTP requests, then performing them and processing the results. 'httr2' is a modern re-imagining of 'httr' that uses a pipe-based interface and solves more of the problems that API wrapping packages face.", - "License": "MIT + file LICENSE", - "URL": "https://httr2.r-lib.org, https://github.com/r-lib/httr2", - "BugReports": "https://github.com/r-lib/httr2/issues", - "Depends": [ - "R (>= 4.0)" - ], - "Imports": [ - "cli (>= 3.0.0)", - "curl (>= 6.2.1)", - "glue", - "lifecycle", - "magrittr", - "openssl", - "R6", - "rappdirs", - "rlang (>= 1.1.0)", - "vctrs (>= 0.6.3)", - "withr" - ], - "Suggests": [ - "askpass", - "bench", - "clipr", - "covr", - "docopt", - "httpuv", - "jose", - "jsonlite", - "knitr", - "later (>= 1.4.0)", - "nanonext", - "paws.common", - "promises", - "rmarkdown", - "testthat (>= 3.1.8)", - "tibble", - "webfakes", - "xml2" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "multi-req, resp-stream, req-perform", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd], Maximilian Girlich [ctb]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "ini": { - "Package": "ini", - "Version": "0.3.1", - "Source": "Repository", - "Type": "Package", - "Title": "Read and Write '.ini' Files", - "Date": "2018-05-19", - "Author": "David Valentim Dias", - "Maintainer": "David Valentim Dias ", - "Description": "Parse simple '.ini' configuration files to an structured list. Users can manipulate this resulting list with lapply() functions. This same structured list can be used to write back to file after modifications.", - "License": "GPL-3", - "URL": "https://github.com/dvdscripter/ini", - "BugReports": "https://github.com/dvdscripter/ini/issues", - "LazyData": "FALSE", - "RoxygenNote": "6.0.1", - "Suggests": [ - "testthat" - ], - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "isoband": { - "Package": "isoband", - "Version": "0.2.7", - "Source": "Repository", - "Title": "Generate Isolines and Isobands from Regularly Spaced Elevation Grids", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Claus O.\", \"Wilke\", , \"wilke@austin.utexas.edu\", role = \"aut\", comment = c(\"Original author\", ORCID = \"0000-0002-7470-9261\")), person(\"Thomas Lin\", \"Pedersen\", , \"thomasp85@gmail.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-5147-4711\")) )", - "Description": "A fast C++ implementation to generate contour lines (isolines) and contour polygons (isobands) from regularly spaced grids containing elevation data.", - "License": "MIT + file LICENSE", - "URL": "https://isoband.r-lib.org", - "BugReports": "https://github.com/r-lib/isoband/issues", - "Imports": [ - "grid", - "utils" - ], - "Suggests": [ - "covr", - "ggplot2", - "knitr", - "magick", - "microbenchmark", - "rmarkdown", - "sf", - "testthat", - "xml2" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "SystemRequirements": "C++11", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre] (), Claus O. Wilke [aut] (Original author, ), Thomas Lin Pedersen [aut] ()", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "iterators": { - "Package": "iterators", - "Version": "1.0.14", - "Source": "Repository", - "Type": "Package", - "Title": "Provides Iterator Construct", - "Authors@R": "c(person(\"Folashade\", \"Daniel\", role=\"cre\", email=\"fdaniel@microsoft.com\"), person(\"Revolution\", \"Analytics\", role=c(\"aut\", \"cph\")), person(\"Steve\", \"Weston\", role=\"aut\"))", - "Description": "Support for iterators, which allow a programmer to traverse through all the elements of a vector, list, or other collection of data.", - "URL": "https://github.com/RevolutionAnalytics/iterators", - "Depends": [ - "R (>= 2.5.0)", - "utils" - ], - "Suggests": [ - "RUnit", - "foreach" - ], - "License": "Apache License (== 2.0)", - "NeedsCompilation": "no", - "Author": "Folashade Daniel [cre], Revolution Analytics [aut, cph], Steve Weston [aut]", - "Maintainer": "Folashade Daniel ", - "Repository": "CRAN" - }, - "jquerylib": { - "Package": "jquerylib", - "Version": "0.1.4", - "Source": "Repository", - "Title": "Obtain 'jQuery' as an HTML Dependency Object", - "Authors@R": "c( person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"carson@rstudio.com\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@rstudio.com\"), person(family = \"RStudio\", role = \"cph\"), person(family = \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt\") )", - "Description": "Obtain any major version of 'jQuery' () and use it in any webpage generated by 'htmltools' (e.g. 'shiny', 'htmlwidgets', and 'rmarkdown'). Most R users don't need to use this package directly, but other R packages (e.g. 'shiny', 'rmarkdown', etc.) depend on this package to avoid bundling redundant copies of 'jQuery'.", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "Config/testthat/edition": "3", - "RoxygenNote": "7.0.2", - "Imports": [ - "htmltools" - ], - "Suggests": [ - "testthat" - ], - "NeedsCompilation": "no", - "Author": "Carson Sievert [aut, cre] (), Joe Cheng [aut], RStudio [cph], jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" - }, - "jsonlite": { - "Package": "jsonlite", - "Version": "2.0.0", - "Source": "Repository", - "Title": "A Simple and Robust JSON Parser and Generator for R", - "License": "MIT + file LICENSE", - "Depends": [ - "methods" - ], - "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Duncan\", \"Temple Lang\", role = \"ctb\"), person(\"Lloyd\", \"Hilaiel\", role = \"cph\", comment=\"author of bundled libyajl\"))", - "URL": "https://jeroen.r-universe.dev/jsonlite https://arxiv.org/abs/1403.2805", - "BugReports": "https://github.com/jeroen/jsonlite/issues", - "Maintainer": "Jeroen Ooms ", - "VignetteBuilder": "knitr, R.rsp", - "Description": "A reasonably fast JSON parser and generator, optimized for statistical data and the web. Offers simple, flexible tools for working with JSON in R, and is particularly powerful for building pipelines and interacting with a web API. The implementation is based on the mapping described in the vignette (Ooms, 2014). In addition to converting JSON data from/to R objects, 'jsonlite' contains functions to stream, validate, and prettify JSON data. The unit tests included with the package verify that all edge cases are encoded and decoded consistently for use with dynamic data in systems and applications.", - "Suggests": [ - "httr", - "vctrs", - "testthat", - "knitr", - "rmarkdown", - "R.rsp", - "sf" - ], - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (), Duncan Temple Lang [ctb], Lloyd Hilaiel [cph] (author of bundled libyajl)", - "Repository": "CRAN" - }, - "knitr": { - "Package": "knitr", - "Version": "1.50", - "Source": "Repository", - "Type": "Package", - "Title": "A General-Purpose Package for Dynamic Report Generation in R", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Abhraneel\", \"Sarma\", role = \"ctb\"), person(\"Adam\", \"Vogt\", role = \"ctb\"), person(\"Alastair\", \"Andrew\", role = \"ctb\"), person(\"Alex\", \"Zvoleff\", role = \"ctb\"), person(\"Amar\", \"Al-Zubaidi\", role = \"ctb\"), person(\"Andre\", \"Simon\", role = \"ctb\", comment = \"the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de\"), person(\"Aron\", \"Atkins\", role = \"ctb\"), person(\"Aaron\", \"Wolen\", role = \"ctb\"), person(\"Ashley\", \"Manton\", role = \"ctb\"), person(\"Atsushi\", \"Yasumoto\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8335-495X\")), person(\"Ben\", \"Baumer\", role = \"ctb\"), person(\"Brian\", \"Diggs\", role = \"ctb\"), person(\"Brian\", \"Zhang\", role = \"ctb\"), person(\"Bulat\", \"Yapparov\", role = \"ctb\"), person(\"Cassio\", \"Pereira\", role = \"ctb\"), person(\"Christophe\", \"Dervieux\", role = \"ctb\"), person(\"David\", \"Hall\", role = \"ctb\"), person(\"David\", \"Hugh-Jones\", role = \"ctb\"), person(\"David\", \"Robinson\", role = \"ctb\"), person(\"Doug\", \"Hemken\", role = \"ctb\"), person(\"Duncan\", \"Murdoch\", role = \"ctb\"), person(\"Elio\", \"Campitelli\", role = \"ctb\"), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Emily\", \"Riederer\", role = \"ctb\"), person(\"Fabian\", \"Hirschmann\", role = \"ctb\"), person(\"Fitch\", \"Simeon\", role = \"ctb\"), person(\"Forest\", \"Fang\", role = \"ctb\"), person(c(\"Frank\", \"E\", \"Harrell\", \"Jr\"), role = \"ctb\", comment = \"the Sweavel package at inst/misc/Sweavel.sty\"), person(\"Garrick\", \"Aden-Buie\", role = \"ctb\"), person(\"Gregoire\", \"Detrez\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Hao\", \"Zhu\", role = \"ctb\"), person(\"Heewon\", \"Jeon\", role = \"ctb\"), person(\"Henrik\", \"Bengtsson\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Ian\", \"Lyttle\", role = \"ctb\"), person(\"Hodges\", \"Daniel\", role = \"ctb\"), person(\"Jacob\", \"Bien\", role = \"ctb\"), person(\"Jake\", \"Burkhead\", role = \"ctb\"), person(\"James\", \"Manton\", role = \"ctb\"), person(\"Jared\", \"Lander\", role = \"ctb\"), person(\"Jason\", \"Punyon\", role = \"ctb\"), person(\"Javier\", \"Luraschi\", role = \"ctb\"), person(\"Jeff\", \"Arnold\", role = \"ctb\"), person(\"Jenny\", \"Bryan\", role = \"ctb\"), person(\"Jeremy\", \"Ashkenas\", role = c(\"ctb\", \"cph\"), comment = \"the CSS file at inst/misc/docco-classic.css\"), person(\"Jeremy\", \"Stephens\", role = \"ctb\"), person(\"Jim\", \"Hester\", role = \"ctb\"), person(\"Joe\", \"Cheng\", role = \"ctb\"), person(\"Johannes\", \"Ranke\", role = \"ctb\"), person(\"John\", \"Honaker\", role = \"ctb\"), person(\"John\", \"Muschelli\", role = \"ctb\"), person(\"Jonathan\", \"Keane\", role = \"ctb\"), person(\"JJ\", \"Allaire\", role = \"ctb\"), person(\"Johan\", \"Toloe\", role = \"ctb\"), person(\"Jonathan\", \"Sidi\", role = \"ctb\"), person(\"Joseph\", \"Larmarange\", role = \"ctb\"), person(\"Julien\", \"Barnier\", role = \"ctb\"), person(\"Kaiyin\", \"Zhong\", role = \"ctb\"), person(\"Kamil\", \"Slowikowski\", role = \"ctb\"), person(\"Karl\", \"Forner\", role = \"ctb\"), person(c(\"Kevin\", \"K.\"), \"Smith\", role = \"ctb\"), person(\"Kirill\", \"Mueller\", role = \"ctb\"), person(\"Kohske\", \"Takahashi\", role = \"ctb\"), person(\"Lorenz\", \"Walthert\", role = \"ctb\"), person(\"Lucas\", \"Gallindo\", role = \"ctb\"), person(\"Marius\", \"Hofert\", role = \"ctb\"), person(\"Martin\", \"Modrák\", role = \"ctb\"), person(\"Michael\", \"Chirico\", role = \"ctb\"), person(\"Michael\", \"Friendly\", role = \"ctb\"), person(\"Michal\", \"Bojanowski\", role = \"ctb\"), person(\"Michel\", \"Kuhlmann\", role = \"ctb\"), person(\"Miller\", \"Patrick\", role = \"ctb\"), person(\"Nacho\", \"Caballero\", role = \"ctb\"), person(\"Nick\", \"Salkowski\", role = \"ctb\"), person(\"Niels Richard\", \"Hansen\", role = \"ctb\"), person(\"Noam\", \"Ross\", role = \"ctb\"), person(\"Obada\", \"Mahdi\", role = \"ctb\"), person(\"Pavel N.\", \"Krivitsky\", role = \"ctb\", comment=c(ORCID = \"0000-0002-9101-3362\")), person(\"Pedro\", \"Faria\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\"), person(\"Ramnath\", \"Vaidyanathan\", role = \"ctb\"), person(\"Richard\", \"Cotton\", role = \"ctb\"), person(\"Robert\", \"Krzyzanowski\", role = \"ctb\"), person(\"Rodrigo\", \"Copetti\", role = \"ctb\"), person(\"Romain\", \"Francois\", role = \"ctb\"), person(\"Ruaridh\", \"Williamson\", role = \"ctb\"), person(\"Sagiru\", \"Mati\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1413-3974\")), person(\"Scott\", \"Kostyshak\", role = \"ctb\"), person(\"Sebastian\", \"Meyer\", role = \"ctb\"), person(\"Sietse\", \"Brouwer\", role = \"ctb\"), person(c(\"Simon\", \"de\"), \"Bernard\", role = \"ctb\"), person(\"Sylvain\", \"Rousseau\", role = \"ctb\"), person(\"Taiyun\", \"Wei\", role = \"ctb\"), person(\"Thibaut\", \"Assus\", role = \"ctb\"), person(\"Thibaut\", \"Lamadon\", role = \"ctb\"), person(\"Thomas\", \"Leeper\", role = \"ctb\"), person(\"Tim\", \"Mastny\", role = \"ctb\"), person(\"Tom\", \"Torsney-Weir\", role = \"ctb\"), person(\"Trevor\", \"Davis\", role = \"ctb\"), person(\"Viktoras\", \"Veitas\", role = \"ctb\"), person(\"Weicheng\", \"Zhu\", role = \"ctb\"), person(\"Wush\", \"Wu\", role = \"ctb\"), person(\"Zachary\", \"Foster\", role = \"ctb\"), person(\"Zhian N.\", \"Kamvar\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1458-7108\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Provides a general-purpose tool for dynamic report generation in R using Literate Programming techniques.", - "Depends": [ - "R (>= 3.6.0)" - ], - "Imports": [ - "evaluate (>= 0.15)", - "highr (>= 0.11)", - "methods", - "tools", - "xfun (>= 0.51)", - "yaml (>= 2.1.19)" - ], - "Suggests": [ - "bslib", - "codetools", - "DBI (>= 0.4-1)", - "digest", - "formatR", - "gifski", - "gridSVG", - "htmlwidgets (>= 0.7)", - "jpeg", - "JuliaCall (>= 0.11.1)", - "magick", - "litedown", - "markdown (>= 1.3)", - "png", - "ragg", - "reticulate (>= 1.4)", - "rgl (>= 0.95.1201)", - "rlang", - "rmarkdown", - "sass", - "showtext", - "styler (>= 1.2.0)", - "targets (>= 0.6.0)", - "testit", - "tibble", - "tikzDevice (>= 0.10)", - "tinytex (>= 0.56)", - "webshot", - "rstudioapi", - "svglite" - ], - "License": "GPL", - "URL": "https://yihui.org/knitr/", - "BugReports": "https://github.com/yihui/knitr/issues", - "Encoding": "UTF-8", - "VignetteBuilder": "litedown, knitr", - "SystemRequirements": "Package vignettes based on R Markdown v2 or reStructuredText require Pandoc (http://pandoc.org). The function rst2pdf() requires rst2pdf (https://github.com/rst2pdf/rst2pdf).", - "Collate": "'block.R' 'cache.R' 'citation.R' 'hooks-html.R' 'plot.R' 'utils.R' 'defaults.R' 'concordance.R' 'engine.R' 'highlight.R' 'themes.R' 'header.R' 'hooks-asciidoc.R' 'hooks-chunk.R' 'hooks-extra.R' 'hooks-latex.R' 'hooks-md.R' 'hooks-rst.R' 'hooks-textile.R' 'hooks.R' 'output.R' 'package.R' 'pandoc.R' 'params.R' 'parser.R' 'pattern.R' 'rocco.R' 'spin.R' 'table.R' 'template.R' 'utils-conversion.R' 'utils-rd2html.R' 'utils-string.R' 'utils-sweave.R' 'utils-upload.R' 'utils-vignettes.R' 'zzz.R'", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre] (, https://yihui.org), Abhraneel Sarma [ctb], Adam Vogt [ctb], Alastair Andrew [ctb], Alex Zvoleff [ctb], Amar Al-Zubaidi [ctb], Andre Simon [ctb] (the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de), Aron Atkins [ctb], Aaron Wolen [ctb], Ashley Manton [ctb], Atsushi Yasumoto [ctb] (), Ben Baumer [ctb], Brian Diggs [ctb], Brian Zhang [ctb], Bulat Yapparov [ctb], Cassio Pereira [ctb], Christophe Dervieux [ctb], David Hall [ctb], David Hugh-Jones [ctb], David Robinson [ctb], Doug Hemken [ctb], Duncan Murdoch [ctb], Elio Campitelli [ctb], Ellis Hughes [ctb], Emily Riederer [ctb], Fabian Hirschmann [ctb], Fitch Simeon [ctb], Forest Fang [ctb], Frank E Harrell Jr [ctb] (the Sweavel package at inst/misc/Sweavel.sty), Garrick Aden-Buie [ctb], Gregoire Detrez [ctb], Hadley Wickham [ctb], Hao Zhu [ctb], Heewon Jeon [ctb], Henrik Bengtsson [ctb], Hiroaki Yutani [ctb], Ian Lyttle [ctb], Hodges Daniel [ctb], Jacob Bien [ctb], Jake Burkhead [ctb], James Manton [ctb], Jared Lander [ctb], Jason Punyon [ctb], Javier Luraschi [ctb], Jeff Arnold [ctb], Jenny Bryan [ctb], Jeremy Ashkenas [ctb, cph] (the CSS file at inst/misc/docco-classic.css), Jeremy Stephens [ctb], Jim Hester [ctb], Joe Cheng [ctb], Johannes Ranke [ctb], John Honaker [ctb], John Muschelli [ctb], Jonathan Keane [ctb], JJ Allaire [ctb], Johan Toloe [ctb], Jonathan Sidi [ctb], Joseph Larmarange [ctb], Julien Barnier [ctb], Kaiyin Zhong [ctb], Kamil Slowikowski [ctb], Karl Forner [ctb], Kevin K. Smith [ctb], Kirill Mueller [ctb], Kohske Takahashi [ctb], Lorenz Walthert [ctb], Lucas Gallindo [ctb], Marius Hofert [ctb], Martin Modrák [ctb], Michael Chirico [ctb], Michael Friendly [ctb], Michal Bojanowski [ctb], Michel Kuhlmann [ctb], Miller Patrick [ctb], Nacho Caballero [ctb], Nick Salkowski [ctb], Niels Richard Hansen [ctb], Noam Ross [ctb], Obada Mahdi [ctb], Pavel N. Krivitsky [ctb] (), Pedro Faria [ctb], Qiang Li [ctb], Ramnath Vaidyanathan [ctb], Richard Cotton [ctb], Robert Krzyzanowski [ctb], Rodrigo Copetti [ctb], Romain Francois [ctb], Ruaridh Williamson [ctb], Sagiru Mati [ctb] (), Scott Kostyshak [ctb], Sebastian Meyer [ctb], Sietse Brouwer [ctb], Simon de Bernard [ctb], Sylvain Rousseau [ctb], Taiyun Wei [ctb], Thibaut Assus [ctb], Thibaut Lamadon [ctb], Thomas Leeper [ctb], Tim Mastny [ctb], Tom Torsney-Weir [ctb], Trevor Davis [ctb], Viktoras Veitas [ctb], Weicheng Zhu [ctb], Wush Wu [ctb], Zachary Foster [ctb], Zhian N. Kamvar [ctb] (), Posit Software, PBC [cph, fnd]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "labeling": { - "Package": "labeling", - "Version": "0.4.3", - "Source": "Repository", - "Type": "Package", - "Title": "Axis Labeling", - "Date": "2023-08-29", - "Author": "Justin Talbot,", - "Maintainer": "Nuno Sempere ", - "Description": "Functions which provide a range of axis labeling algorithms.", - "License": "MIT + file LICENSE | Unlimited", - "Collate": "'labeling.R'", - "NeedsCompilation": "no", - "Imports": [ - "stats", - "graphics" - ], - "Repository": "CRAN" - }, - "later": { - "Package": "later", - "Version": "1.4.2", - "Source": "Repository", - "Type": "Package", - "Title": "Utilities for Scheduling Functions to Execute Later with Event Loops", - "Authors@R": "c( person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@posit.co\"), person(\"Joe\", \"Cheng\", role = c(\"aut\"), email = \"joe@posit.co\"), person(\"Charlie\", \"Gao\", role = c(\"aut\"), email = \"charlie.gao@shikokuchuo.net\", comment = c(ORCID = \"0000-0002-0750-061X\")), person(family = \"Posit Software, PBC\", role = \"cph\"), person(\"Marcus\", \"Geelnard\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\"), person(\"Evan\", \"Nemerson\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\") )", - "Description": "Executes arbitrary R or C functions some time after the current time, after the R execution stack has emptied. The functions are scheduled in an event loop.", - "URL": "https://r-lib.github.io/later/, https://github.com/r-lib/later", - "BugReports": "https://github.com/r-lib/later/issues", - "License": "MIT + file LICENSE", - "Imports": [ - "Rcpp (>= 0.12.9)", - "rlang" - ], - "LinkingTo": [ - "Rcpp" - ], - "RoxygenNote": "7.3.2", - "Suggests": [ - "knitr", - "nanonext", - "R6", - "rmarkdown", - "testthat (>= 2.1.0)" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Winston Chang [aut, cre], Joe Cheng [aut], Charlie Gao [aut] (), Posit Software, PBC [cph], Marcus Geelnard [ctb, cph] (TinyCThread library, https://tinycthread.github.io/), Evan Nemerson [ctb, cph] (TinyCThread library, https://tinycthread.github.io/)", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" - }, - "latex2exp": { - "Package": "latex2exp", - "Version": "0.9.6", - "Source": "Repository", - "Type": "Package", - "Title": "Use LaTeX Expressions in Plots", - "Date": "2022-11-27", - "Authors@R": "person(\"Stefano\", \"Meschiari\", email=\"stefano.meschiari@gmail.com\", role=c(\"aut\", \"cre\"))", - "Description": "Parses and converts LaTeX math formulas to R's plotmath expressions, used to enter mathematical formulas and symbols to be rendered as text, axis labels, etc. throughout R's plotting system.", - "License": "MIT + file LICENSE", - "URL": "https://www.stefanom.io/latex2exp/, https://github.com/stefano-meschiari/latex2exp", - "BugReports": "https://github.com/stefano-meschiari/latex2exp/issues", - "Imports": [ - "stringr", - "magrittr" - ], - "Encoding": "UTF-8", - "Suggests": [ - "testthat", - "waldo", - "knitr", - "ggplot2", - "rmarkdown", - "purrr", - "tibble", - "reactable", - "htmltools", - "RCurl", - "rlang", - "dplyr" - ], - "VignetteBuilder": "knitr", - "RoxygenNote": "7.1.2", - "Language": "en-US", - "NeedsCompilation": "no", - "Author": "Stefano Meschiari [aut, cre]", - "Maintainer": "Stefano Meschiari ", - "Repository": "CRAN" - }, - "lattice": { - "Package": "lattice", - "Version": "0.22-7", - "Source": "Repository", - "Date": "2025-03-31", - "Priority": "recommended", - "Title": "Trellis Graphics for R", - "Authors@R": "c(person(\"Deepayan\", \"Sarkar\", role = c(\"aut\", \"cre\"), email = \"deepayan.sarkar@r-project.org\", comment = c(ORCID = \"0000-0003-4107-1553\")), person(\"Felix\", \"Andrews\", role = \"ctb\"), person(\"Kevin\", \"Wright\", role = \"ctb\", comment = \"documentation\"), person(\"Neil\", \"Klepeis\", role = \"ctb\"), person(\"Johan\", \"Larsson\", role = \"ctb\", comment = \"miscellaneous improvements\"), person(\"Zhijian (Jason)\", \"Wen\", role = \"cph\", comment = \"filled contour code\"), person(\"Paul\", \"Murrell\", role = \"ctb\", email = \"paul@stat.auckland.ac.nz\"), person(\"Stefan\", \"Eng\", role = \"ctb\", comment = \"violin plot improvements\"), person(\"Achim\", \"Zeileis\", role = \"ctb\", comment = \"modern colors\"), person(\"Alexandre\", \"Courtiol\", role = \"ctb\", comment = \"generics for larrows, lpolygon, lrect and lsegments\") )", - "Description": "A powerful and elegant high-level data visualization system inspired by Trellis graphics, with an emphasis on multivariate data. Lattice is sufficient for typical graphics needs, and is also flexible enough to handle most nonstandard requirements. See ?Lattice for an introduction.", - "Depends": [ - "R (>= 4.0.0)" - ], - "Suggests": [ - "KernSmooth", - "MASS", - "latticeExtra", - "colorspace" - ], - "Imports": [ - "grid", - "grDevices", - "graphics", - "stats", - "utils" - ], - "Enhances": [ - "chron", - "zoo" - ], - "LazyLoad": "yes", - "LazyData": "yes", - "License": "GPL (>= 2)", - "URL": "https://lattice.r-forge.r-project.org/", - "BugReports": "https://github.com/deepayan/lattice/issues", - "NeedsCompilation": "yes", - "Author": "Deepayan Sarkar [aut, cre] (), Felix Andrews [ctb], Kevin Wright [ctb] (documentation), Neil Klepeis [ctb], Johan Larsson [ctb] (miscellaneous improvements), Zhijian (Jason) Wen [cph] (filled contour code), Paul Murrell [ctb], Stefan Eng [ctb] (violin plot improvements), Achim Zeileis [ctb] (modern colors), Alexandre Courtiol [ctb] (generics for larrows, lpolygon, lrect and lsegments)", - "Maintainer": "Deepayan Sarkar ", - "Repository": "CRAN" - }, - "lazyeval": { - "Package": "lazyeval", - "Version": "0.2.2", - "Source": "Repository", - "Title": "Lazy (Non-Standard) Evaluation", - "Description": "An alternative approach to non-standard evaluation using formulas. Provides a full implementation of LISP style 'quasiquotation', making it easier to generate code with other code.", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", ,\"hadley@rstudio.com\", c(\"aut\", \"cre\")), person(\"RStudio\", role = \"cph\") )", - "License": "GPL-3", - "LazyData": "true", - "Depends": [ - "R (>= 3.1.0)" - ], - "Suggests": [ - "knitr", - "rmarkdown (>= 0.2.65)", - "testthat", - "covr" - ], - "VignetteBuilder": "knitr", - "RoxygenNote": "6.1.1", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre], RStudio [cph]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "lifecycle": { - "Package": "lifecycle", - "Version": "1.0.4", - "Source": "Repository", - "Title": "Manage the Life Cycle of your Package Functions", - "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Manage the life cycle of your exported functions with shared conventions, documentation badges, and user-friendly deprecation warnings.", - "License": "MIT + file LICENSE", - "URL": "https://lifecycle.r-lib.org/, https://github.com/r-lib/lifecycle", - "BugReports": "https://github.com/r-lib/lifecycle/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "cli (>= 3.4.0)", - "glue", - "rlang (>= 1.1.0)" - ], - "Suggests": [ - "covr", - "crayon", - "knitr", - "lintr", - "rmarkdown", - "testthat (>= 3.0.1)", - "tibble", - "tidyverse", - "tools", - "vctrs", - "withr" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate, usethis", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.1", - "NeedsCompilation": "no", - "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut] (), Posit Software, PBC [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" - }, - "litedown": { - "Package": "litedown", - "Version": "0.7", - "Source": "Repository", - "Type": "Package", - "Title": "A Lightweight Version of R Markdown", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Tim\", \"Taylor\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8587-7113\")), person() )", - "Description": "Render R Markdown to Markdown (without using 'knitr'), and Markdown to lightweight HTML or 'LaTeX' documents with the 'commonmark' package (instead of 'Pandoc'). Some missing Markdown features in 'commonmark' are also supported, such as raw HTML or 'LaTeX' blocks, 'LaTeX' math, superscripts, subscripts, footnotes, element attributes, and appendices, but not all 'Pandoc' Markdown features are (or will be) supported. With additional JavaScript and CSS, you can also create HTML slides and articles. This package can be viewed as a trimmed-down version of R Markdown and 'knitr'. It does not aim at rich Markdown features or a large variety of output formats (the primary formats are HTML and 'LaTeX'). Book and website projects of multiple input documents are also supported.", - "Depends": [ - "R (>= 3.2.0)" - ], - "Imports": [ - "utils", - "commonmark (>= 1.9.5)", - "xfun (>= 0.52)" - ], - "Suggests": [ - "rbibutils", - "rstudioapi", - "tinytex" - ], - "License": "MIT + file LICENSE", - "URL": "https://github.com/yihui/litedown", - "BugReports": "https://github.com/yihui/litedown/issues", - "VignetteBuilder": "litedown", - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre] (, https://yihui.org), Tim Taylor [ctb] ()", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "lubridate": { - "Package": "lubridate", - "Version": "1.9.4", - "Source": "Repository", - "Type": "Package", - "Title": "Make Dealing with Dates a Little Easier", - "Authors@R": "c( person(\"Vitalie\", \"Spinu\", , \"spinuvit@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Garrett\", \"Grolemund\", role = \"aut\"), person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Davis\", \"Vaughan\", role = \"ctb\"), person(\"Ian\", \"Lyttle\", role = \"ctb\"), person(\"Imanuel\", \"Costigan\", role = \"ctb\"), person(\"Jason\", \"Law\", role = \"ctb\"), person(\"Doug\", \"Mitarotonda\", role = \"ctb\"), person(\"Joseph\", \"Larmarange\", role = \"ctb\"), person(\"Jonathan\", \"Boiser\", role = \"ctb\"), person(\"Chel Hee\", \"Lee\", role = \"ctb\") )", - "Maintainer": "Vitalie Spinu ", - "Description": "Functions to work with date-times and time-spans: fast and user friendly parsing of date-time data, extraction and updating of components of a date-time (years, months, days, hours, minutes, and seconds), algebraic manipulation on date-time and time-span objects. The 'lubridate' package has a consistent and memorable syntax that makes working with dates easy and fun.", - "License": "GPL (>= 2)", - "URL": "https://lubridate.tidyverse.org, https://github.com/tidyverse/lubridate", - "BugReports": "https://github.com/tidyverse/lubridate/issues", - "Depends": [ - "methods", - "R (>= 3.2)" - ], - "Imports": [ - "generics", - "timechange (>= 0.3.0)" - ], - "Suggests": [ - "covr", - "knitr", - "rmarkdown", - "testthat (>= 2.1.0)", - "vctrs (>= 0.6.5)" - ], - "Enhances": [ - "chron", - "data.table", - "timeDate", - "tis", - "zoo" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.2.3", - "SystemRequirements": "C++11, A system with zoneinfo data (e.g. /usr/share/zoneinfo). On Windows the zoneinfo included with R is used.", - "Collate": "'Dates.r' 'POSIXt.r' 'util.r' 'parse.r' 'timespans.r' 'intervals.r' 'difftimes.r' 'durations.r' 'periods.r' 'accessors-date.R' 'accessors-day.r' 'accessors-dst.r' 'accessors-hour.r' 'accessors-minute.r' 'accessors-month.r' 'accessors-quarter.r' 'accessors-second.r' 'accessors-tz.r' 'accessors-week.r' 'accessors-year.r' 'am-pm.r' 'time-zones.r' 'numeric.r' 'coercion.r' 'constants.r' 'cyclic_encoding.r' 'data.r' 'decimal-dates.r' 'deprecated.r' 'format_ISO8601.r' 'guess.r' 'hidden.r' 'instants.r' 'leap-years.r' 'ops-addition.r' 'ops-compare.r' 'ops-division.r' 'ops-integer-division.r' 'ops-m+.r' 'ops-modulo.r' 'ops-multiplication.r' 'ops-subtraction.r' 'package.r' 'pretty.r' 'round.r' 'stamp.r' 'tzdir.R' 'update.r' 'vctrs.R' 'zzz.R'", - "NeedsCompilation": "yes", - "Author": "Vitalie Spinu [aut, cre], Garrett Grolemund [aut], Hadley Wickham [aut], Davis Vaughan [ctb], Ian Lyttle [ctb], Imanuel Costigan [ctb], Jason Law [ctb], Doug Mitarotonda [ctb], Joseph Larmarange [ctb], Jonathan Boiser [ctb], Chel Hee Lee [ctb]", - "Repository": "CRAN" - }, - "magick": { - "Package": "magick", - "Version": "2.8.6", - "Source": "Repository", - "Type": "Package", - "Title": "Advanced Graphics and Image-Processing in R", - "Authors@R": "person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\"))", - "Description": "Bindings to 'ImageMagick': the most comprehensive open-source image processing library available. Supports many common formats (png, jpeg, tiff, pdf, etc) and manipulations (rotate, scale, crop, trim, flip, blur, etc). All operations are vectorized via the Magick++ STL meaning they operate either on a single frame or a series of frames for working with layers, collages, or animation. In RStudio images are automatically previewed when printed to the console, resulting in an interactive editing environment. The latest version of the package includes a native graphics device for creating in-memory graphics or drawing onto images using pixel coordinates.", - "License": "MIT + file LICENSE", - "URL": "https://docs.ropensci.org/magick/ https://ropensci.r-universe.dev/magick", - "BugReports": "https://github.com/ropensci/magick/issues", - "SystemRequirements": "ImageMagick++: ImageMagick-c++-devel (rpm) or libmagick++-dev (deb)", - "VignetteBuilder": "knitr", - "Depends": [ - "R (>= 4.1.0)" - ], - "Imports": [ - "Rcpp (>= 0.12.12)", - "magrittr", - "curl" - ], - "LinkingTo": [ - "Rcpp" - ], - "Suggests": [ - "av (>= 0.3)", - "spelling", - "jsonlite", - "methods", - "knitr", - "rmarkdown", - "rsvg", - "webp", - "pdftools", - "ggplot2", - "gapminder", - "IRdisplay", - "tesseract (>= 2.0)", - "gifski" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "Language": "en-US", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] ()", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "magrittr": { - "Package": "magrittr", - "Version": "2.0.3", - "Source": "Repository", - "Type": "Package", - "Title": "A Forward-Pipe Operator for R", - "Authors@R": "c( person(\"Stefan Milton\", \"Bache\", , \"stefan@stefanbache.dk\", role = c(\"aut\", \"cph\"), comment = \"Original author and creator of magrittr\"), person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", role = \"cre\"), person(\"RStudio\", role = c(\"cph\", \"fnd\")) )", - "Description": "Provides a mechanism for chaining commands with a new forward-pipe operator, %>%. This operator will forward a value, or the result of an expression, into the next function call/expression. There is flexible support for the type of right-hand side expressions. For more information, see package vignette. To quote Rene Magritte, \"Ceci n'est pas un pipe.\"", - "License": "MIT + file LICENSE", - "URL": "https://magrittr.tidyverse.org, https://github.com/tidyverse/magrittr", - "BugReports": "https://github.com/tidyverse/magrittr/issues", - "Depends": [ - "R (>= 3.4.0)" - ], - "Suggests": [ - "covr", - "knitr", - "rlang", - "rmarkdown", - "testthat" - ], - "VignetteBuilder": "knitr", - "ByteCompile": "Yes", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.1.2", - "NeedsCompilation": "yes", - "Author": "Stefan Milton Bache [aut, cph] (Original author and creator of magrittr), Hadley Wickham [aut], Lionel Henry [cre], RStudio [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" - }, - "markdown": { - "Package": "markdown", - "Version": "2.0", - "Source": "Repository", - "Type": "Package", - "Title": "Render Markdown with 'commonmark'", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"JJ\", \"Allaire\", role = \"aut\"), person(\"Jeffrey\", \"Horner\", role = \"aut\"), person(\"Henrik\", \"Bengtsson\", role = \"ctb\"), person(\"Jim\", \"Hester\", role = \"ctb\"), person(\"Yixuan\", \"Qiu\", role = \"ctb\"), person(\"Kohske\", \"Takahashi\", role = \"ctb\"), person(\"Adam\", \"November\", role = \"ctb\"), person(\"Nacho\", \"Caballero\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Thomas\", \"Leeper\", role = \"ctb\"), person(\"Joe\", \"Cheng\", role = \"ctb\"), person(\"Andrzej\", \"Oles\", role = \"ctb\"), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Render Markdown to full and lightweight HTML/LaTeX documents with the 'commonmark' package. This package has been superseded by 'litedown'.", - "Depends": [ - "R (>= 2.11.1)" - ], - "Imports": [ - "utils", - "xfun", - "litedown (>= 0.6)" - ], - "Suggests": [ - "knitr", - "rmarkdown (>= 2.18)", - "yaml", - "RCurl" - ], - "License": "MIT + file LICENSE", - "URL": "https://github.com/rstudio/markdown", - "BugReports": "https://github.com/rstudio/markdown/issues", - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre] (), JJ Allaire [aut], Jeffrey Horner [aut], Henrik Bengtsson [ctb], Jim Hester [ctb], Yixuan Qiu [ctb], Kohske Takahashi [ctb], Adam November [ctb], Nacho Caballero [ctb], Jeroen Ooms [ctb], Thomas Leeper [ctb], Joe Cheng [ctb], Andrzej Oles [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "memoise": { - "Package": "memoise", - "Version": "2.0.1", - "Source": "Repository", - "Title": "'Memoisation' of Functions", - "Authors@R": "c(person(given = \"Hadley\", family = \"Wickham\", role = \"aut\", email = \"hadley@rstudio.com\"), person(given = \"Jim\", family = \"Hester\", role = \"aut\"), person(given = \"Winston\", family = \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@rstudio.com\"), person(given = \"Kirill\", family = \"Müller\", role = \"aut\", email = \"krlmlr+r@mailbox.org\"), person(given = \"Daniel\", family = \"Cook\", role = \"aut\", email = \"danielecook@gmail.com\"), person(given = \"Mark\", family = \"Edmondson\", role = \"ctb\", email = \"r@sunholo.com\"))", - "Description": "Cache the results of a function so that when you call it again with the same arguments it returns the previously computed value.", - "License": "MIT + file LICENSE", - "URL": "https://memoise.r-lib.org, https://github.com/r-lib/memoise", - "BugReports": "https://github.com/r-lib/memoise/issues", - "Imports": [ - "rlang (>= 0.4.10)", - "cachem" - ], - "Suggests": [ - "digest", - "aws.s3", - "covr", - "googleAuthR", - "googleCloudStorageR", - "httr", - "testthat" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.1.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut], Jim Hester [aut], Winston Chang [aut, cre], Kirill Müller [aut], Daniel Cook [aut], Mark Edmondson [ctb]", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" - }, - "mgcv": { - "Package": "mgcv", - "Version": "1.9-3", - "Source": "Repository", - "Authors@R": "person(given = \"Simon\", family = \"Wood\", role = c(\"aut\", \"cre\"), email = \"simon.wood@r-project.org\")", - "Title": "Mixed GAM Computation Vehicle with Automatic Smoothness Estimation", - "Description": "Generalized additive (mixed) models, some of their extensions and other generalized ridge regression with multiple smoothing parameter estimation by (Restricted) Marginal Likelihood, Generalized Cross Validation and similar, or using iterated nested Laplace approximation for fully Bayesian inference. See Wood (2017) for an overview. Includes a gam() function, a wide variety of smoothers, 'JAGS' support and distributions beyond the exponential family.", - "Priority": "recommended", - "Depends": [ - "R (>= 3.6.0)", - "nlme (>= 3.1-64)" - ], - "Imports": [ - "methods", - "stats", - "graphics", - "Matrix", - "splines", - "utils" - ], - "Suggests": [ - "parallel", - "survival", - "MASS" - ], - "LazyLoad": "yes", - "ByteCompile": "yes", - "License": "GPL (>= 2)", - "NeedsCompilation": "yes", - "Author": "Simon Wood [aut, cre]", - "Maintainer": "Simon Wood ", - "Repository": "CRAN" - }, - "mime": { - "Package": "mime", - "Version": "0.13", - "Source": "Repository", - "Type": "Package", - "Title": "Map Filenames to MIME Types", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Jeffrey\", \"Horner\", role = \"ctb\"), person(\"Beilei\", \"Bian\", role = \"ctb\") )", - "Description": "Guesses the MIME type from a filename extension using the data derived from /etc/mime.types in UNIX-type systems.", - "Imports": [ - "tools" - ], - "License": "GPL", - "URL": "https://github.com/yihui/mime", - "BugReports": "https://github.com/yihui/mime/issues", - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Yihui Xie [aut, cre] (, https://yihui.org), Jeffrey Horner [ctb], Beilei Bian [ctb]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "miniUI": { - "Package": "miniUI", - "Version": "0.1.2", - "Source": "Repository", - "Type": "Package", - "Title": "Shiny UI Widgets for Small Screens", - "Authors@R": "c( person(\"Joe\", \"Cheng\", role = c(\"cre\", \"aut\"), email = \"joe@posit.co\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Provides UI widget and layout functions for writing Shiny apps that work well on small screens.", - "License": "GPL-3", - "URL": "https://github.com/rstudio/miniUI", - "BugReports": "https://github.com/rstudio/miniUI/issues", - "Imports": [ - "shiny (>= 0.13)", - "htmltools (>= 0.3)", - "utils" - ], - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Author": "Joe Cheng [cre, aut], Posit Software, PBC [cph, fnd] (03wc8by49)", - "Maintainer": "Joe Cheng ", - "Repository": "CRAN" - }, - "mnormt": { - "Package": "mnormt", - "Version": "2.1.1", - "Source": "Repository", - "Date": "2022-09-26", - "Title": "The Multivariate Normal and t Distributions, and Their Truncated Versions", - "Author": "Adelchi Azzalini [aut, cre], Alan Genz [aut] (most Fortran code), Alan Miller [ctb] (Fortran routine PHI), Michael J. Wichura [ctb] (Fortran routine PHINV), G. W. Hill [ctb] (Fortran routine STDINV), Yihong Ge [ctb] (Fortran routines BNVU and MVBVU).", - "Maintainer": "Adelchi Azzalini ", - "Depends": [ - "R (>= 2.2.0)" - ], - "Description": "Functions are provided for computing the density and the distribution function of d-dimensional normal and \"t\" random variables, possibly truncated (on one side or two sides), and for generating random vectors sampled from these distributions, except sampling from the truncated \"t\". Moments of arbitrary order of a multivariate truncated normal are computed, and converted to cumulants up to order 4. Probabilities are computed via non-Monte Carlo methods; different routines are used in the case d=1, d=2, d=3, d>3, if d denotes the dimensionality.", - "License": "GPL-2 | GPL-3", - "URL": "http://azzalini.stat.unipd.it/SW/Pkg-mnormt/", - "NeedsCompilation": "yes", - "Encoding": "UTF-8", - "Repository": "CRAN" - }, - "mvtnorm": { - "Package": "mvtnorm", - "Version": "1.3-3", - "Source": "Repository", - "Title": "Multivariate Normal and t Distributions", - "Date": "2025-01-09", - "Authors@R": "c(person(\"Alan\", \"Genz\", role = \"aut\"), person(\"Frank\", \"Bretz\", role = \"aut\"), person(\"Tetsuhisa\", \"Miwa\", role = \"aut\"), person(\"Xuefei\", \"Mi\", role = \"aut\"), person(\"Friedrich\", \"Leisch\", role = \"ctb\"), person(\"Fabian\", \"Scheipl\", role = \"ctb\"), person(\"Bjoern\", \"Bornkamp\", role = \"ctb\", comment = c(ORCID = \"0000-0002-6294-8185\")), person(\"Martin\", \"Maechler\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Torsten\", \"Hothorn\", role = c(\"aut\", \"cre\"), email = \"Torsten.Hothorn@R-project.org\", comment = c(ORCID = \"0000-0001-8301-0471\")))", - "Description": "Computes multivariate normal and t probabilities, quantiles, random deviates, and densities. Log-likelihoods for multivariate Gaussian models and Gaussian copulae parameterised by Cholesky factors of covariance or precision matrices are implemented for interval-censored and exact data, or a mix thereof. Score functions for these log-likelihoods are available. A class representing multiple lower triangular matrices and corresponding methods are part of this package.", - "Imports": [ - "stats" - ], - "Depends": [ - "R(>= 3.5.0)" - ], - "Suggests": [ - "qrng", - "numDeriv" - ], - "License": "GPL-2", - "URL": "http://mvtnorm.R-forge.R-project.org", - "NeedsCompilation": "yes", - "Author": "Alan Genz [aut], Frank Bretz [aut], Tetsuhisa Miwa [aut], Xuefei Mi [aut], Friedrich Leisch [ctb], Fabian Scheipl [ctb], Bjoern Bornkamp [ctb] (), Martin Maechler [ctb] (), Torsten Hothorn [aut, cre] ()", - "Maintainer": "Torsten Hothorn ", - "Repository": "CRAN" - }, - "nleqslv": { - "Package": "nleqslv", - "Version": "3.3.5", - "Source": "Repository", - "Title": "Solve Systems of Nonlinear Equations", - "Date": "2023-11-25", - "Author": "Berend Hasselman", - "Maintainer": "Berend Hasselman ", - "Description": "Solve a system of nonlinear equations using a Broyden or a Newton method with a choice of global strategies such as line search and trust region. There are options for using a numerical or user supplied Jacobian, for specifying a banded numerical Jacobian and for allowing a singular or ill-conditioned Jacobian.", - "License": "GPL (>= 2)", - "NeedsCompilation": "yes", - "Repository": "CRAN" - }, - "nlme": { - "Package": "nlme", - "Version": "3.1-168", - "Source": "Repository", - "Date": "2025-03-31", - "Priority": "recommended", - "Title": "Linear and Nonlinear Mixed Effects Models", - "Authors@R": "c(person(\"José\", \"Pinheiro\", role = \"aut\", comment = \"S version\"), person(\"Douglas\", \"Bates\", role = \"aut\", comment = \"up to 2007\"), person(\"Saikat\", \"DebRoy\", role = \"ctb\", comment = \"up to 2002\"), person(\"Deepayan\", \"Sarkar\", role = \"ctb\", comment = \"up to 2005\"), person(\"EISPACK authors\", role = \"ctb\", comment = \"src/rs.f\"), person(\"Siem\", \"Heisterkamp\", role = \"ctb\", comment = \"Author fixed sigma\"), person(\"Bert\", \"Van Willigen\",role = \"ctb\", comment = \"Programmer fixed sigma\"), person(\"Johannes\", \"Ranke\", role = \"ctb\", comment = \"varConstProp()\"), person(\"R Core Team\", email = \"R-core@R-project.org\", role = c(\"aut\", \"cre\"), comment = c(ROR = \"02zz1nj61\")))", - "Contact": "see 'MailingList'", - "Description": "Fit and compare Gaussian linear and nonlinear mixed-effects models.", - "Depends": [ - "R (>= 3.6.0)" - ], - "Imports": [ - "graphics", - "stats", - "utils", - "lattice" - ], - "Suggests": [ - "MASS", - "SASmixed" - ], - "LazyData": "yes", - "Encoding": "UTF-8", - "License": "GPL (>= 2)", - "BugReports": "https://bugs.r-project.org", - "MailingList": "R-help@r-project.org", - "URL": "https://svn.r-project.org/R-packages/trunk/nlme/", - "NeedsCompilation": "yes", - "Author": "José Pinheiro [aut] (S version), Douglas Bates [aut] (up to 2007), Saikat DebRoy [ctb] (up to 2002), Deepayan Sarkar [ctb] (up to 2005), EISPACK authors [ctb] (src/rs.f), Siem Heisterkamp [ctb] (Author fixed sigma), Bert Van Willigen [ctb] (Programmer fixed sigma), Johannes Ranke [ctb] (varConstProp()), R Core Team [aut, cre] (02zz1nj61)", - "Maintainer": "R Core Team ", - "Repository": "CRAN" - }, - "oeli": { - "Package": "oeli", - "Version": "0.7.2", - "Source": "Repository", - "Type": "Package", - "Title": "Some Utilities for Developing Data Science Software", - "Authors@R": "c( person(\"Lennart\", \"Oelschl\\u00e4ger\", email = \"oelschlaeger.lennart@gmail.com\", role = c(\"aut\", \"cre\")) )", - "Description": "A collection of general-purpose helper functions that I (and maybe others) find useful when developing data science software. Includes tools for simulation, data transformation, input validation, and more.", - "License": "GPL (>= 3)", - "Encoding": "UTF-8", - "Config/testthat/edition": "3", - "RoxygenNote": "7.3.2", - "Imports": [ - "benchmarkme", - "checkmate", - "cli", - "ggplot2", - "hexSticker", - "latex2exp", - "Rcpp", - "rprojroot", - "showtext", - "SimMultiCorrData", - "stats", - "sysfonts", - "utils" - ], - "LinkingTo": [ - "Rcpp", - "RcppArmadillo", - "testthat" - ], - "Suggests": [ - "knitr", - "rmarkdown", - "testthat (>= 3.0.0)", - "xml2" - ], - "URL": "https://github.com/loelschlaeger/oeli, http://loelschlaeger.de/oeli/", - "BugReports": "https://github.com/loelschlaeger/oeli/issues", - "NeedsCompilation": "yes", - "Author": "Lennart Oelschläger [aut, cre]", - "Maintainer": "Lennart Oelschläger ", - "Repository": "CRAN" - }, - "openssl": { - "Package": "openssl", - "Version": "2.3.2", - "Source": "Repository", - "Type": "Package", - "Title": "Toolkit for Encryption, Signatures and Certificates Based on OpenSSL", - "Authors@R": "c(person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Oliver\", \"Keyes\", role = \"ctb\"))", - "Description": "Bindings to OpenSSL libssl and libcrypto, plus custom SSH key parsers. Supports RSA, DSA and EC curves P-256, P-384, P-521, and curve25519. Cryptographic signatures can either be created and verified manually or via x509 certificates. AES can be used in cbc, ctr or gcm mode for symmetric encryption; RSA for asymmetric (public key) encryption or EC for Diffie Hellman. High-level envelope functions combine RSA and AES for encrypting arbitrary sized data. Other utilities include key generators, hash functions (md5, sha1, sha256, etc), base64 encoder, a secure random number generator, and 'bignum' math methods for manually performing crypto calculations on large multibyte integers.", - "License": "MIT + file LICENSE", - "URL": "https://jeroen.r-universe.dev/openssl", - "BugReports": "https://github.com/jeroen/openssl/issues", - "SystemRequirements": "OpenSSL >= 1.0.2", - "VignetteBuilder": "knitr", - "Imports": [ - "askpass" - ], - "Suggests": [ - "curl", - "testthat (>= 2.1.0)", - "digest", - "knitr", - "rmarkdown", - "jsonlite", - "jose", - "sodium" - ], - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (), Oliver Keyes [ctb]", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "padr": { - "Package": "padr", - "Version": "0.6.3", - "Source": "Repository", - "Type": "Package", - "Title": "Quickly Get Datetime Data Ready for Analysis", - "Authors@R": "person(given = \"Edwin\", family = \"Thoen\", role = c(\"aut\", \"cre\"), email = \"edwinthoen@gmail.com\")", - "Description": "Transforms datetime data into a format ready for analysis. It offers two core functionalities; aggregating data to a higher level interval (thicken) and imputing records where observations were absent (pad).", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "LazyData": "true", - "Depends": [ - "R (>= 3.0.0)" - ], - "Imports": [ - "Rcpp", - "dplyr (>= 1.0.0)", - "lubridate", - "rlang" - ], - "Suggests": [ - "ggplot2", - "testthat", - "knitr", - "rmarkdown", - "lazyeval", - "tidyr", - "data.table" - ], - "RoxygenNote": "7.2.1", - "LinkingTo": [ - "Rcpp" - ], - "VignetteBuilder": "knitr", - "URL": "https://edwinth.github.io/padr/, https://github.com/EdwinTh/padr", - "BugReports": "https://github.com/EdwinTh/padr/issues", - "ByteCompile": "true", - "NeedsCompilation": "yes", - "Author": "Edwin Thoen [aut, cre]", - "Maintainer": "Edwin Thoen ", - "Repository": "CRAN" - }, - "pillar": { - "Package": "pillar", - "Version": "1.10.2", - "Source": "Repository", - "Title": "Coloured Formatting for Columns", - "Authors@R": "c(person(given = \"Kirill\", family = \"M\\u00fcller\", role = c(\"aut\", \"cre\"), email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(given = \"Hadley\", family = \"Wickham\", role = \"aut\"), person(given = \"RStudio\", role = \"cph\"))", - "Description": "Provides 'pillar' and 'colonnade' generics designed for formatting columns of data using the full range of colours provided by modern terminals.", - "License": "MIT + file LICENSE", - "URL": "https://pillar.r-lib.org/, https://github.com/r-lib/pillar", - "BugReports": "https://github.com/r-lib/pillar/issues", - "Imports": [ - "cli (>= 2.3.0)", - "glue", - "lifecycle", - "rlang (>= 1.0.2)", - "utf8 (>= 1.1.0)", - "utils", - "vctrs (>= 0.5.0)" - ], - "Suggests": [ - "bit64", - "DBI", - "debugme", - "DiagrammeR", - "dplyr", - "formattable", - "ggplot2", - "knitr", - "lubridate", - "nanotime", - "nycflights13", - "palmerpenguins", - "rmarkdown", - "scales", - "stringi", - "survival", - "testthat (>= 3.1.1)", - "tibble", - "units (>= 0.7.2)", - "vdiffr", - "withr" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2.9000", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "format_multi_fuzz, format_multi_fuzz_2, format_multi, ctl_colonnade, ctl_colonnade_1, ctl_colonnade_2", - "Config/autostyle/scope": "line_breaks", - "Config/autostyle/strict": "true", - "Config/gha/extra-packages": "units=?ignore-before-r=4.3.0", - "Config/Needs/website": "tidyverse/tidytemplate", - "NeedsCompilation": "no", - "Author": "Kirill Müller [aut, cre] (), Hadley Wickham [aut], RStudio [cph]", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" - }, - "pkgbuild": { - "Package": "pkgbuild", - "Version": "1.4.7", - "Source": "Repository", - "Title": "Find Tools Needed to Build R Packages", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Provides functions used to build R packages. Locates compilers needed to build R packages on various platforms and ensures the PATH is configured appropriately so R can use them.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/pkgbuild, https://pkgbuild.r-lib.org", - "BugReports": "https://github.com/r-lib/pkgbuild/issues", - "Depends": [ - "R (>= 3.5)" - ], - "Imports": [ - "callr (>= 3.2.0)", - "cli (>= 3.4.0)", - "desc", - "processx", - "R6" - ], - "Suggests": [ - "covr", - "cpp11", - "knitr", - "Rcpp", - "rmarkdown", - "testthat (>= 3.2.0)", - "withr (>= 2.3.0)" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut], Jim Hester [aut], Gábor Csárdi [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "pkgconfig": { - "Package": "pkgconfig", - "Version": "2.0.3", - "Source": "Repository", - "Title": "Private Configuration for 'R' Packages", - "Author": "Gábor Csárdi", - "Maintainer": "Gábor Csárdi ", - "Description": "Set configuration options on a per-package basis. Options set by a given package only apply to that package, other packages are unaffected.", - "License": "MIT + file LICENSE", - "LazyData": "true", - "Imports": [ - "utils" - ], - "Suggests": [ - "covr", - "testthat", - "disposables (>= 1.0.3)" - ], - "URL": "https://github.com/r-lib/pkgconfig#readme", - "BugReports": "https://github.com/r-lib/pkgconfig/issues", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "pkgdown": { - "Package": "pkgdown", - "Version": "2.1.2", - "Source": "Repository", - "Title": "Make Static HTML Documentation for a Package", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Jay\", \"Hesselberth\", role = \"aut\", comment = c(ORCID = \"0000-0002-6299-179X\")), person(\"Maëlle\", \"Salmon\", role = \"aut\", comment = c(ORCID = \"0000-0002-2815-0399\")), person(\"Olivier\", \"Roy\", role = \"aut\"), person(\"Salim\", \"Brüggemann\", role = \"aut\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Generate an attractive and useful website from a source package. 'pkgdown' converts your documentation, vignettes, 'README', and more to 'HTML' making it easy to share information about your package online.", - "License": "MIT + file LICENSE", - "URL": "https://pkgdown.r-lib.org/, https://github.com/r-lib/pkgdown", - "BugReports": "https://github.com/r-lib/pkgdown/issues", - "Depends": [ - "R (>= 4.0.0)" - ], - "Imports": [ - "bslib (>= 0.5.1)", - "callr (>= 3.7.3)", - "cli (>= 3.6.1)", - "desc (>= 1.4.0)", - "downlit (>= 0.4.4)", - "fontawesome", - "fs (>= 1.4.0)", - "httr2 (>= 1.0.2)", - "jsonlite", - "openssl", - "purrr (>= 1.0.0)", - "ragg (>= 1.4.0)", - "rlang (>= 1.1.4)", - "rmarkdown (>= 2.27)", - "tibble", - "whisker", - "withr (>= 2.4.3)", - "xml2 (>= 1.3.1)", - "yaml" - ], - "Suggests": [ - "covr", - "diffviewer", - "evaluate (>= 0.24.0)", - "gert", - "gt", - "htmltools", - "htmlwidgets", - "knitr (>= 1.50)", - "lifecycle", - "magick", - "methods", - "pkgload (>= 1.0.2)", - "quarto", - "rsconnect", - "rstudioapi", - "rticles", - "sass", - "testthat (>= 3.1.3)", - "tools" - ], - "VignetteBuilder": "knitr, quarto", - "Config/Needs/website": "usethis, servr", - "Config/potools/style": "explicit", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "build-article, build-quarto-article, build-reference", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2.9000", - "SystemRequirements": "pandoc", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre] (), Jay Hesselberth [aut] (), Maëlle Salmon [aut] (), Olivier Roy [aut], Salim Brüggemann [aut] (), Posit Software, PBC [cph, fnd] (03wc8by49)", - "Maintainer": "Hadley Wickham ", - "Repository": "https://packagemanager.posit.co/cran/latest" - }, - "pkgload": { - "Package": "pkgload", - "Version": "1.4.0", - "Source": "Repository", - "Title": "Simulate Package Installation and Attach", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"R Core team\", role = \"ctb\", comment = \"Some namespace and vignette code extracted from base R\") )", - "Description": "Simulates the process of installing a package and then attaching it. This is a key part of the 'devtools' package as it allows you to rapidly iterate while developing a package.", - "License": "GPL-3", - "URL": "https://github.com/r-lib/pkgload, https://pkgload.r-lib.org", - "BugReports": "https://github.com/r-lib/pkgload/issues", - "Depends": [ - "R (>= 3.4.0)" - ], - "Imports": [ - "cli (>= 3.3.0)", - "desc", - "fs", - "glue", - "lifecycle", - "methods", - "pkgbuild", - "processx", - "rlang (>= 1.1.1)", - "rprojroot", - "utils", - "withr (>= 2.4.3)" - ], - "Suggests": [ - "bitops", - "jsonlite", - "mathjaxr", - "pak", - "Rcpp", - "remotes", - "rstudioapi", - "testthat (>= 3.2.1.1)", - "usethis" - ], - "Config/Needs/website": "tidyverse/tidytemplate, ggplot2", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "TRUE", - "Config/testthat/start-first": "dll", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut], Winston Chang [aut], Jim Hester [aut], Lionel Henry [aut, cre], Posit Software, PBC [cph, fnd], R Core team [ctb] (Some namespace and vignette code extracted from base R)", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" - }, - "pracma": { - "Package": "pracma", - "Version": "2.4.4", - "Source": "Repository", - "Type": "Package", - "Date": "2023-11-08", - "Title": "Practical Numerical Math Functions", - "Authors@R": "person(\"Hans W.\", \"Borchers\", email=\"hwborchers@googlemail.com\", role=c(\"aut\", \"cre\"))", - "Depends": [ - "R (>= 3.1.0)" - ], - "Imports": [ - "graphics", - "grDevices", - "stats", - "utils" - ], - "Suggests": [ - "NlcOptim", - "quadprog" - ], - "Description": "Provides a large number of functions from numerical analysis and linear algebra, numerical optimization, differential equations, time series, plus some well-known special mathematical functions. Uses 'MATLAB' function names where appropriate to simplify porting.", - "License": "GPL (>= 3)", - "ByteCompile": "true", - "LazyData": "yes", - "NeedsCompilation": "no", - "Author": "Hans W. Borchers [aut, cre]", - "Maintainer": "Hans W. Borchers ", - "Repository": "CRAN" - }, - "praise": { - "Package": "praise", - "Version": "1.0.0", - "Source": "Repository", - "Title": "Praise Users", - "Author": "Gabor Csardi, Sindre Sorhus", - "Maintainer": "Gabor Csardi ", - "Description": "Build friendly R packages that praise their users if they have done something good, or they just need it to feel better.", - "License": "MIT + file LICENSE", - "LazyData": "true", - "URL": "https://github.com/gaborcsardi/praise", - "BugReports": "https://github.com/gaborcsardi/praise/issues", - "Suggests": [ - "testthat" - ], - "Collate": "'adjective.R' 'adverb.R' 'exclamation.R' 'verb.R' 'rpackage.R' 'package.R'", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "prettyunits": { - "Package": "prettyunits", - "Version": "1.2.0", - "Source": "Repository", - "Title": "Pretty, Human Readable Formatting of Quantities", - "Authors@R": "c( person(\"Gabor\", \"Csardi\", email=\"csardi.gabor@gmail.com\", role=c(\"aut\", \"cre\")), person(\"Bill\", \"Denney\", email=\"wdenney@humanpredictions.com\", role=c(\"ctb\"), comment=c(ORCID=\"0000-0002-5759-428X\")), person(\"Christophe\", \"Regouby\", email=\"christophe.regouby@free.fr\", role=c(\"ctb\")) )", - "Description": "Pretty, human readable formatting of quantities. Time intervals: '1337000' -> '15d 11h 23m 20s'. Vague time intervals: '2674000' -> 'about a month ago'. Bytes: '1337' -> '1.34 kB'. Rounding: '99' with 3 significant digits -> '99.0' p-values: '0.00001' -> '<0.0001'. Colors: '#FF0000' -> 'red'. Quantities: '1239437' -> '1.24 M'.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/prettyunits", - "BugReports": "https://github.com/r-lib/prettyunits/issues", - "Depends": [ - "R(>= 2.10)" - ], - "Suggests": [ - "codetools", - "covr", - "testthat" - ], - "RoxygenNote": "7.2.3", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Author": "Gabor Csardi [aut, cre], Bill Denney [ctb] (), Christophe Regouby [ctb]", - "Maintainer": "Gabor Csardi ", - "Repository": "CRAN" - }, - "processx": { - "Package": "processx", - "Version": "3.8.6", - "Source": "Repository", - "Title": "Execute and Control System Processes", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\", \"cph\"), comment = c(ORCID = \"0000-0001-7098-9676\")), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"Ascent Digital Services\", role = c(\"cph\", \"fnd\")) )", - "Description": "Tools to run system processes in the background. It can check if a background process is running; wait on a background process to finish; get the exit status of finished processes; kill background processes. It can read the standard output and error of the processes, using non-blocking connections. 'processx' can poll a process for standard output or error, with a timeout. It can also poll several processes at once.", - "License": "MIT + file LICENSE", - "URL": "https://processx.r-lib.org, https://github.com/r-lib/processx", - "BugReports": "https://github.com/r-lib/processx/issues", - "Depends": [ - "R (>= 3.4.0)" - ], - "Imports": [ - "ps (>= 1.2.0)", - "R6", - "utils" - ], - "Suggests": [ - "callr (>= 3.7.3)", - "cli (>= 3.3.0)", - "codetools", - "covr", - "curl", - "debugme", - "parallel", - "rlang (>= 1.0.2)", - "testthat (>= 3.0.0)", - "webfakes", - "withr" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1.9000", - "NeedsCompilation": "yes", - "Author": "Gábor Csárdi [aut, cre, cph] (), Winston Chang [aut], Posit Software, PBC [cph, fnd], Ascent Digital Services [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "profvis": { - "Package": "profvis", - "Version": "0.4.0", - "Source": "Repository", - "Title": "Interactive Visualizations for Profiling R Code", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Javier\", \"Luraschi\", role = \"aut\"), person(\"Timothy\", \"Mastny\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library\"), person(, \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/htmlwidgets/lib/jquery/AUTHORS.txt\"), person(\"Mike\", \"Bostock\", role = c(\"ctb\", \"cph\"), comment = \"D3 library\"), person(, \"D3 contributors\", role = \"ctb\", comment = \"D3 library\"), person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\") )", - "Description": "Interactive visualizations for profiling R code.", - "License": "MIT + file LICENSE", - "URL": "https://profvis.r-lib.org, https://github.com/r-lib/profvis", - "BugReports": "https://github.com/r-lib/profvis/issues", - "Depends": [ - "R (>= 4.0)" - ], - "Imports": [ - "htmlwidgets (>= 0.3.2)", - "rlang (>= 1.1.0)", - "vctrs" - ], - "Suggests": [ - "htmltools", - "knitr", - "rmarkdown", - "shiny", - "testthat (>= 3.0.0)" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate, rmarkdown", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre], Winston Chang [aut], Javier Luraschi [aut], Timothy Mastny [aut], Posit Software, PBC [cph, fnd], jQuery Foundation [cph] (jQuery library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/htmlwidgets/lib/jquery/AUTHORS.txt), Mike Bostock [ctb, cph] (D3 library), D3 contributors [ctb] (D3 library), Ivan Sagalaev [ctb, cph] (highlight.js library)", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "progress": { - "Package": "progress", - "Version": "1.2.3", - "Source": "Repository", - "Title": "Terminal Progress Bars", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Rich\", \"FitzJohn\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Configurable Progress bars, they may include percentage, elapsed time, and/or the estimated completion time. They work in terminals, in 'Emacs' 'ESS', 'RStudio', 'Windows' 'Rgui' and the 'macOS' 'R.app'. The package also provides a 'C++' 'API', that works with or without 'Rcpp'.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/progress#readme, http://r-lib.github.io/progress/", - "BugReports": "https://github.com/r-lib/progress/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "crayon", - "hms", - "prettyunits", - "R6" - ], - "Suggests": [ - "Rcpp", - "testthat (>= 3.0.0)", - "withr" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre], Rich FitzJohn [aut], Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "promises": { - "Package": "promises", - "Version": "1.3.2", - "Source": "Repository", - "Type": "Package", - "Title": "Abstractions for Promise-Based Asynchronous Programming", - "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Provides fundamental abstractions for doing asynchronous programming in R using promises. Asynchronous programming is useful for allowing a single R process to orchestrate multiple tasks in the background while also attending to something else. Semantics are similar to 'JavaScript' promises, but with a syntax that is idiomatic R.", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/promises/, https://github.com/rstudio/promises", - "BugReports": "https://github.com/rstudio/promises/issues", - "Imports": [ - "fastmap (>= 1.1.0)", - "later", - "magrittr (>= 1.5)", - "R6", - "Rcpp", - "rlang", - "stats" - ], - "Suggests": [ - "future (>= 1.21.0)", - "knitr", - "purrr", - "rmarkdown", - "spelling", - "testthat", - "vembedr" - ], - "LinkingTo": [ - "later", - "Rcpp" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "rsconnect", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Joe Cheng [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Joe Cheng ", - "Repository": "CRAN" - }, - "ps": { - "Package": "ps", - "Version": "1.9.1", - "Source": "Repository", - "Title": "List, Query, Manipulate System Processes", - "Authors@R": "c( person(\"Jay\", \"Loden\", role = \"aut\"), person(\"Dave\", \"Daeschler\", role = \"aut\"), person(\"Giampaolo\", \"Rodola'\", role = \"aut\"), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "List, query and manipulate all system processes, on 'Windows', 'Linux' and 'macOS'.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/ps, https://ps.r-lib.org/", - "BugReports": "https://github.com/r-lib/ps/issues", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ - "utils" - ], - "Suggests": [ - "callr", - "covr", - "curl", - "pillar", - "pingr", - "processx (>= 3.1.0)", - "R6", - "rlang", - "testthat (>= 3.0.0)", - "webfakes", - "withr" - ], - "Biarch": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Jay Loden [aut], Dave Daeschler [aut], Giampaolo Rodola' [aut], Gábor Csárdi [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "psych": { - "Package": "psych", - "Version": "2.5.3", - "Source": "Repository", - "Date": "2025-03-18", - "Title": "Procedures for Psychological, Psychometric, and Personality Research", - "Authors@R": "person(\"William\", \"Revelle\", role =c(\"aut\",\"cre\"), email=\"revelle@northwestern.edu\", comment=c(ORCID = \"0000-0003-4880-9610\") )", - "Description": "A general purpose toolbox developed originally for personality, psychometric theory and experimental psychology. Functions are primarily for multivariate analysis and scale construction using factor analysis, principal component analysis, cluster analysis and reliability analysis, although others provide basic descriptive statistics. Item Response Theory is done using factor analysis of tetrachoric and polychoric correlations. Functions for analyzing data at multiple levels include within and between group statistics, including correlations and factor analysis. Validation and cross validation of scales developed using basic machine learning algorithms are provided, as are functions for simulating and testing particular item and test structures. Several functions serve as a useful front end for structural equation modeling. Graphical displays of path diagrams, including mediation models, factor analysis and structural equation models are created using basic graphics. Some of the functions are written to support a book on psychometric theory as well as publications in personality research. For more information, see the web page.", - "License": "GPL (>= 2)", - "Imports": [ - "mnormt", - "parallel", - "stats", - "graphics", - "grDevices", - "methods", - "lattice", - "nlme", - "GPArotation" - ], - "Suggests": [ - "psychTools", - "lavaan", - "lme4", - "Rcsdp", - "graph", - "knitr", - "Rgraphviz" - ], - "LazyData": "yes", - "ByteCompile": "true", - "VignetteBuilder": "knitr", - "URL": "https://personality-project.org/r/psych/ https://personality-project.org/r/psych-manual.pdf", - "NeedsCompilation": "no", - "Author": "William Revelle [aut, cre] ()", - "Maintainer": "William Revelle ", - "Repository": "CRAN" - }, - "purrr": { - "Package": "purrr", - "Version": "1.0.4", - "Source": "Repository", - "Title": "Functional Programming Tools", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "A complete and consistent functional programming toolkit for R.", - "License": "MIT + file LICENSE", - "URL": "https://purrr.tidyverse.org/, https://github.com/tidyverse/purrr", - "BugReports": "https://github.com/tidyverse/purrr/issues", - "Depends": [ - "R (>= 4.0)" - ], - "Imports": [ - "cli (>= 3.6.1)", - "lifecycle (>= 1.0.3)", - "magrittr (>= 1.5.0)", - "rlang (>= 1.1.1)", - "vctrs (>= 0.6.3)" - ], - "Suggests": [ - "covr", - "dplyr (>= 0.7.8)", - "httr", - "knitr", - "lubridate", - "rmarkdown", - "testthat (>= 3.0.0)", - "tibble", - "tidyselect" - ], - "LinkingTo": [ - "cli" - ], - "VignetteBuilder": "knitr", - "Biarch": "true", - "Config/build/compilation-database": "true", - "Config/Needs/website": "tidyverse/tidytemplate, tidyr", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "TRUE", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre] (), Lionel Henry [aut], Posit Software, PBC [cph, fnd] (03wc8by49)", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "quadprog": { - "Package": "quadprog", - "Version": "1.5-8", - "Source": "Repository", - "Type": "Package", - "Title": "Functions to Solve Quadratic Programming Problems", - "Date": "2019-11-20", - "Author": "S original by Berwin A. Turlach R port by Andreas Weingessel Fortran contributions from Cleve Moler (dposl/LINPACK and (a modified version of) dpodi/LINPACK)", - "Maintainer": "Berwin A. Turlach ", - "Description": "This package contains routines and documentation for solving quadratic programming problems.", - "Depends": [ - "R (>= 3.1.0)" - ], - "License": "GPL (>= 2)", - "NeedsCompilation": "yes", - "Repository": "CRAN" - }, - "quantmod": { - "Package": "quantmod", - "Version": "0.4.27", - "Source": "Repository", - "Type": "Package", - "Title": "Quantitative Financial Modelling Framework", - "Authors@R": "c( person(given=c(\"Jeffrey\",\"A.\"), family=\"Ryan\", role=c(\"aut\",\"cph\")), person(given=c(\"Joshua\",\"M.\"), family=\"Ulrich\", role=c(\"cre\",\"aut\"), email=\"josh.m.ulrich@gmail.com\"), person(given=c(\"Ethan\",\"B.\"), family=\"Smith\", role=\"ctb\"), person(given=\"Wouter\", family=\"Thielen\", role=\"ctb\"), person(given=\"Paul\", family=\"Teetor\", role=\"ctb\"), person(given=\"Steve\", family=\"Bronder\", role=\"ctb\") )", - "Depends": [ - "R (>= 3.2.0)", - "xts(>= 0.9-0)", - "zoo", - "TTR(>= 0.2)", - "methods" - ], - "Imports": [ - "curl", - "jsonlite(>= 1.1)" - ], - "Suggests": [ - "DBI", - "RMySQL", - "RSQLite", - "timeSeries", - "xml2", - "downloader", - "tinytest" - ], - "Description": "Specify, build, trade, and analyse quantitative financial trading strategies.", - "LazyLoad": "yes", - "License": "GPL-3", - "URL": "https://www.quantmod.com/, https://github.com/joshuaulrich/quantmod", - "BugReports": "https://github.com/joshuaulrich/quantmod/issues", - "NeedsCompilation": "no", - "Author": "Jeffrey A. Ryan [aut, cph], Joshua M. Ulrich [cre, aut], Ethan B. Smith [ctb], Wouter Thielen [ctb], Paul Teetor [ctb], Steve Bronder [ctb]", - "Maintainer": "Joshua M. Ulrich ", - "Repository": "CRAN" - }, - "ragg": { - "Package": "ragg", - "Version": "1.4.0", - "Source": "Repository", - "Type": "Package", - "Title": "Graphic Devices Based on AGG", - "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Maxim\", \"Shemanarev\", role = c(\"aut\", \"cph\"), comment = \"Author of AGG\"), person(\"Tony\", \"Juricic\", , \"tonygeek@yahoo.com\", role = c(\"ctb\", \"cph\"), comment = \"Contributor to AGG\"), person(\"Milan\", \"Marusinec\", , \"milan@marusinec.sk\", role = c(\"ctb\", \"cph\"), comment = \"Contributor to AGG\"), person(\"Spencer\", \"Garrett\", role = \"ctb\", comment = \"Contributor to AGG\"), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", - "Maintainer": "Thomas Lin Pedersen ", - "Description": "Anti-Grain Geometry (AGG) is a high-quality and high-performance 2D drawing library. The 'ragg' package provides a set of graphic devices based on AGG to use as alternative to the raster devices provided through the 'grDevices' package.", - "License": "MIT + file LICENSE", - "URL": "https://ragg.r-lib.org, https://github.com/r-lib/ragg", - "BugReports": "https://github.com/r-lib/ragg/issues", - "Imports": [ - "systemfonts (>= 1.0.3)", - "textshaping (>= 0.3.0)" - ], - "Suggests": [ - "covr", - "graphics", - "grid", - "testthat (>= 3.0.0)" - ], - "LinkingTo": [ - "systemfonts", - "textshaping" - ], - "Config/Needs/website": "ggplot2, devoid, magick, bench, tidyr, ggridges, hexbin, sessioninfo, pkgdown, tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "SystemRequirements": "freetype2, libpng, libtiff, libjpeg", - "Config/testthat/edition": "3", - "Config/build/compilation-database": "true", - "NeedsCompilation": "yes", - "Author": "Thomas Lin Pedersen [cre, aut] (), Maxim Shemanarev [aut, cph] (Author of AGG), Tony Juricic [ctb, cph] (Contributor to AGG), Milan Marusinec [ctb, cph] (Contributor to AGG), Spencer Garrett [ctb] (Contributor to AGG), Posit, PBC [cph, fnd]", - "Repository": "CRAN" - }, - "rappdirs": { - "Package": "rappdirs", - "Version": "0.3.3", - "Source": "Repository", - "Type": "Package", - "Title": "Application Directories: Determine Where to Save Data, Caches, and Logs", - "Authors@R": "c(person(given = \"Hadley\", family = \"Wickham\", role = c(\"trl\", \"cre\", \"cph\"), email = \"hadley@rstudio.com\"), person(given = \"RStudio\", role = \"cph\"), person(given = \"Sridhar\", family = \"Ratnakumar\", role = \"aut\"), person(given = \"Trent\", family = \"Mick\", role = \"aut\"), person(given = \"ActiveState\", role = \"cph\", comment = \"R/appdir.r, R/cache.r, R/data.r, R/log.r translated from appdirs\"), person(given = \"Eddy\", family = \"Petrisor\", role = \"ctb\"), person(given = \"Trevor\", family = \"Davis\", role = c(\"trl\", \"aut\")), person(given = \"Gabor\", family = \"Csardi\", role = \"ctb\"), person(given = \"Gregory\", family = \"Jefferis\", role = \"ctb\"))", - "Description": "An easy way to determine which directories on the users computer you should use to save data, caches and logs. A port of Python's 'Appdirs' () to R.", - "License": "MIT + file LICENSE", - "URL": "https://rappdirs.r-lib.org, https://github.com/r-lib/rappdirs", - "BugReports": "https://github.com/r-lib/rappdirs/issues", - "Depends": [ - "R (>= 3.2)" - ], - "Suggests": [ - "roxygen2", - "testthat (>= 3.0.0)", - "covr", - "withr" - ], - "Copyright": "Original python appdirs module copyright (c) 2010 ActiveState Software Inc. R port copyright Hadley Wickham, RStudio. See file LICENSE for details.", - "Encoding": "UTF-8", - "RoxygenNote": "7.1.1", - "Config/testthat/edition": "3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [trl, cre, cph], RStudio [cph], Sridhar Ratnakumar [aut], Trent Mick [aut], ActiveState [cph] (R/appdir.r, R/cache.r, R/data.r, R/log.r translated from appdirs), Eddy Petrisor [ctb], Trevor Davis [trl, aut], Gabor Csardi [ctb], Gregory Jefferis [ctb]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "rcmdcheck": { - "Package": "rcmdcheck", - "Version": "1.4.0", - "Source": "Repository", - "Title": "Run 'R CMD check' from 'R' and Capture Results", - "Authors@R": "person(given = \"Gábor\", family = \"Csárdi\", role = c(\"cre\", \"aut\"), email = \"csardi.gabor@gmail.com\")", - "Description": "Run 'R CMD check' from 'R' and capture the results of the individual checks. Supports running checks in the background, timeouts, pretty printing and comparing check results.", - "License": "MIT + file LICENSE", - "URL": "https://r-lib.github.io/rcmdcheck/, https://github.com/r-Lib/rcmdcheck#readme", - "BugReports": "https://github.com/r-Lib/rcmdcheck/issues", - "Imports": [ - "callr (>= 3.1.1.9000)", - "cli (>= 3.0.0)", - "curl", - "desc (>= 1.2.0)", - "digest", - "pkgbuild", - "prettyunits", - "R6", - "rprojroot", - "sessioninfo (>= 1.1.1)", - "utils", - "withr", - "xopen" - ], - "Suggests": [ - "covr", - "knitr", - "mockery", - "processx", - "ps", - "rmarkdown", - "svglite", - "testthat", - "webfakes" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.1.2", - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [cre, aut]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "remotes": { - "Package": "remotes", - "Version": "2.5.0", - "Source": "Repository", - "Title": "R Package Installation from Remote Repositories, Including 'GitHub'", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Martin\", \"Morgan\", role = \"aut\"), person(\"Dan\", \"Tenenbaum\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"Ascent Digital Services\", role = \"cph\") )", - "Description": "Download and install R packages stored in 'GitHub', 'GitLab', 'Bitbucket', 'Bioconductor', or plain 'subversion' or 'git' repositories. This package provides the 'install_*' functions in 'devtools'. Indeed most of the code was copied over from 'devtools'.", - "License": "MIT + file LICENSE", - "URL": "https://remotes.r-lib.org, https://github.com/r-lib/remotes#readme", - "BugReports": "https://github.com/r-lib/remotes/issues", - "Depends": [ - "R (>= 3.0.0)" - ], - "Imports": [ - "methods", - "stats", - "tools", - "utils" - ], - "Suggests": [ - "brew", - "callr", - "codetools", - "covr", - "curl", - "git2r (>= 0.23.0)", - "knitr", - "mockery", - "pingr", - "pkgbuild (>= 1.0.1)", - "rmarkdown", - "rprojroot", - "testthat (>= 3.0.0)", - "webfakes", - "withr" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "SystemRequirements": "Subversion for install_svn, git for install_git", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre], Jim Hester [aut], Hadley Wickham [aut], Winston Chang [aut], Martin Morgan [aut], Dan Tenenbaum [aut], Posit Software, PBC [cph, fnd], Ascent Digital Services [cph]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "renv": { - "Package": "renv", - "Version": "1.1.4", - "Source": "Repository", - "Type": "Package", - "Title": "Project Environments", - "Authors@R": "c( person(\"Kevin\", \"Ushey\", role = c(\"aut\", \"cre\"), email = \"kevin@rstudio.com\", comment = c(ORCID = \"0000-0003-2880-7407\")), person(\"Hadley\", \"Wickham\", role = c(\"aut\"), email = \"hadley@rstudio.com\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A dependency management toolkit for R. Using 'renv', you can create and manage project-local R libraries, save the state of these libraries to a 'lockfile', and later restore your library as required. Together, these tools can help make your projects more isolated, portable, and reproducible.", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/renv/, https://github.com/rstudio/renv", - "BugReports": "https://github.com/rstudio/renv/issues", - "Imports": [ - "utils" - ], - "Suggests": [ - "BiocManager", - "cli", - "compiler", - "covr", - "cpp11", - "devtools", - "gitcreds", - "jsonlite", - "jsonvalidate", - "knitr", - "miniUI", - "modules", - "packrat", - "pak", - "R6", - "remotes", - "reticulate", - "rmarkdown", - "rstudioapi", - "shiny", - "testthat", - "uuid", - "waldo", - "yaml", - "webfakes" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "bioconductor,python,install,restore,snapshot,retrieve,remotes", - "NeedsCompilation": "no", - "Author": "Kevin Ushey [aut, cre] (), Hadley Wickham [aut] (), Posit Software, PBC [cph, fnd]", - "Maintainer": "Kevin Ushey ", - "Repository": "CRAN" - }, - "rex": { - "Package": "rex", - "Version": "1.2.1", - "Source": "Repository", - "Type": "Package", - "Title": "Friendly Regular Expressions", - "Authors@R": "c( person(\"Kevin\", \"Ushey\", , \"kevinushey@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Jim\", \"Hester\", , \"james.f.hester@gmail.com\", role = \"aut\"), person(\"Robert\", \"Krzyzanowski\", , \"rkrzyzanowski@gmail.com\", role = \"aut\") )", - "Description": "A friendly interface for the construction of regular expressions.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/kevinushey/rex", - "BugReports": "https://github.com/kevinushey/rex/issues", - "Imports": [ - "lazyeval" - ], - "Suggests": [ - "covr", - "dplyr", - "ggplot2", - "Hmisc", - "knitr", - "magrittr", - "rmarkdown", - "roxygen2", - "rvest", - "stringr", - "testthat" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.1.2", - "Collate": "'aaa.R' 'utils.R' 'escape.R' 'capture.R' 'character_class.R' 'counts.R' 'lookarounds.R' 'match.R' 'or.R' 'rex-mode.R' 'rex.R' 'shortcuts.R' 'wildcards.R' 'zzz.R'", - "NeedsCompilation": "no", - "Author": "Kevin Ushey [aut, cre], Jim Hester [aut], Robert Krzyzanowski [aut]", - "Maintainer": "Kevin Ushey ", - "Repository": "CRAN" - }, - "rlang": { - "Package": "rlang", - "Version": "1.1.6", - "Source": "Repository", - "Title": "Functions for Base Types and Core R and 'Tidyverse' Features", - "Description": "A toolbox for working with base types, core R features like the condition system, and core 'Tidyverse' features like tidy evaluation.", - "Authors@R": "c( person(\"Lionel\", \"Henry\", ,\"lionel@posit.co\", c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", ,\"hadley@posit.co\", \"aut\"), person(given = \"mikefc\", email = \"mikefc@coolbutuseless.com\", role = \"cph\", comment = \"Hash implementation based on Mike's xxhashlite\"), person(given = \"Yann\", family = \"Collet\", role = \"cph\", comment = \"Author of the embedded xxHash library\"), person(given = \"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", - "License": "MIT + file LICENSE", - "ByteCompile": "true", - "Biarch": "true", - "Depends": [ - "R (>= 3.5.0)" - ], - "Imports": [ - "utils" - ], - "Suggests": [ - "cli (>= 3.1.0)", - "covr", - "crayon", - "desc", - "fs", - "glue", - "knitr", - "magrittr", - "methods", - "pillar", - "pkgload", - "rmarkdown", - "stats", - "testthat (>= 3.2.0)", - "tibble", - "usethis", - "vctrs (>= 0.2.3)", - "withr" - ], - "Enhances": [ - "winch" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "URL": "https://rlang.r-lib.org, https://github.com/r-lib/rlang", - "BugReports": "https://github.com/r-lib/rlang/issues", - "Config/build/compilation-database": "true", - "Config/testthat/edition": "3", - "Config/Needs/website": "dplyr, tidyverse/tidytemplate", - "NeedsCompilation": "yes", - "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut], mikefc [cph] (Hash implementation based on Mike's xxhashlite), Yann Collet [cph] (Author of the embedded xxHash library), Posit, PBC [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" - }, - "rmarkdown": { - "Package": "rmarkdown", - "Version": "2.29", - "Source": "Repository", - "Type": "Package", - "Title": "Dynamic Documents for R", - "Authors@R": "c( person(\"JJ\", \"Allaire\", , \"jj@posit.co\", role = \"aut\"), person(\"Yihui\", \"Xie\", , \"xie@yihui.name\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Jonathan\", \"McPherson\", , \"jonathan@posit.co\", role = \"aut\"), person(\"Javier\", \"Luraschi\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevin@posit.co\", role = \"aut\"), person(\"Aron\", \"Atkins\", , \"aron@posit.co\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\"), person(\"Richard\", \"Iannone\", , \"rich@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Andrew\", \"Dunning\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0464-5036\")), person(\"Atsushi\", \"Yasumoto\", role = c(\"ctb\", \"cph\"), comment = c(ORCID = \"0000-0002-8335-495X\", cph = \"Number sections Lua filter\")), person(\"Barret\", \"Schloerke\", role = \"ctb\"), person(\"Carson\", \"Sievert\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Devon\", \"Ryan\", , \"dpryan79@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8549-0971\")), person(\"Frederik\", \"Aust\", , \"frederik.aust@uni-koeln.de\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4900-788X\")), person(\"Jeff\", \"Allen\", , \"jeff@posit.co\", role = \"ctb\"), person(\"JooYoung\", \"Seo\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4064-6012\")), person(\"Malcolm\", \"Barrett\", role = \"ctb\"), person(\"Rob\", \"Hyndman\", , \"Rob.Hyndman@monash.edu\", role = \"ctb\"), person(\"Romain\", \"Lesur\", role = \"ctb\"), person(\"Roy\", \"Storey\", role = \"ctb\"), person(\"Ruben\", \"Arslan\", , \"ruben.arslan@uni-goettingen.de\", role = \"ctb\"), person(\"Sergio\", \"Oller\", role = \"ctb\"), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery UI library; authors listed in inst/rmd/h/jqueryui/AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Alexander\", \"Farkas\", role = c(\"ctb\", \"cph\"), comment = \"html5shiv library\"), person(\"Scott\", \"Jehl\", role = c(\"ctb\", \"cph\"), comment = \"Respond.js library\"), person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"), person(\"Greg\", \"Franko\", role = c(\"ctb\", \"cph\"), comment = \"tocify library\"), person(\"John\", \"MacFarlane\", role = c(\"ctb\", \"cph\"), comment = \"Pandoc templates\"), person(, \"Google, Inc.\", role = c(\"ctb\", \"cph\"), comment = \"ioslides library\"), person(\"Dave\", \"Raggett\", role = \"ctb\", comment = \"slidy library\"), person(, \"W3C\", role = \"cph\", comment = \"slidy library\"), person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome\"), person(\"Ben\", \"Sperry\", role = \"ctb\", comment = \"Ionicons\"), person(, \"Drifty\", role = \"cph\", comment = \"Ionicons\"), person(\"Aidan\", \"Lister\", role = c(\"ctb\", \"cph\"), comment = \"jQuery StickyTabs\"), person(\"Benct Philip\", \"Jonsson\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\"), person(\"Albert\", \"Krewinkel\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\") )", - "Description": "Convert R Markdown documents into a variety of formats.", - "License": "GPL-3", - "URL": "https://github.com/rstudio/rmarkdown, https://pkgs.rstudio.com/rmarkdown/", - "BugReports": "https://github.com/rstudio/rmarkdown/issues", - "Depends": [ - "R (>= 3.0)" - ], - "Imports": [ - "bslib (>= 0.2.5.1)", - "evaluate (>= 0.13)", - "fontawesome (>= 0.5.0)", - "htmltools (>= 0.5.1)", - "jquerylib", - "jsonlite", - "knitr (>= 1.43)", - "methods", - "tinytex (>= 0.31)", - "tools", - "utils", - "xfun (>= 0.36)", - "yaml (>= 2.1.19)" - ], - "Suggests": [ - "digest", - "dygraphs", - "fs", - "rsconnect", - "downlit (>= 0.4.0)", - "katex (>= 1.4.0)", - "sass (>= 0.4.0)", - "shiny (>= 1.6.0)", - "testthat (>= 3.0.3)", - "tibble", - "vctrs", - "cleanrmd", - "withr (>= 2.4.2)", - "xml2" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "rstudio/quillt, pkgdown", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "SystemRequirements": "pandoc (>= 1.14) - http://pandoc.org", - "NeedsCompilation": "no", - "Author": "JJ Allaire [aut], Yihui Xie [aut, cre] (), Christophe Dervieux [aut] (), Jonathan McPherson [aut], Javier Luraschi [aut], Kevin Ushey [aut], Aron Atkins [aut], Hadley Wickham [aut], Joe Cheng [aut], Winston Chang [aut], Richard Iannone [aut] (), Andrew Dunning [ctb] (), Atsushi Yasumoto [ctb, cph] (, Number sections Lua filter), Barret Schloerke [ctb], Carson Sievert [ctb] (), Devon Ryan [ctb] (), Frederik Aust [ctb] (), Jeff Allen [ctb], JooYoung Seo [ctb] (), Malcolm Barrett [ctb], Rob Hyndman [ctb], Romain Lesur [ctb], Roy Storey [ctb], Ruben Arslan [ctb], Sergio Oller [ctb], Posit Software, PBC [cph, fnd], jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in inst/rmd/h/jqueryui/AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Alexander Farkas [ctb, cph] (html5shiv library), Scott Jehl [ctb, cph] (Respond.js library), Ivan Sagalaev [ctb, cph] (highlight.js library), Greg Franko [ctb, cph] (tocify library), John MacFarlane [ctb, cph] (Pandoc templates), Google, Inc. [ctb, cph] (ioslides library), Dave Raggett [ctb] (slidy library), W3C [cph] (slidy library), Dave Gandy [ctb, cph] (Font-Awesome), Ben Sperry [ctb] (Ionicons), Drifty [cph] (Ionicons), Aidan Lister [ctb, cph] (jQuery StickyTabs), Benct Philip Jonsson [ctb, cph] (pagebreak Lua filter), Albert Krewinkel [ctb, cph] (pagebreak Lua filter)", - "Maintainer": "Yihui Xie ", - "Repository": "RSPM" - }, - "roxygen2": { - "Package": "roxygen2", - "Version": "7.3.2", - "Source": "Repository", - "Title": "In-Line Documentation for R", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\", \"cph\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Peter\", \"Danenberg\", , \"pcd@roxygen.org\", role = c(\"aut\", \"cph\")), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = \"aut\"), person(\"Manuel\", \"Eugster\", role = c(\"aut\", \"cph\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Generate your Rd documentation, 'NAMESPACE' file, and collation field using specially formatted comments. Writing documentation in-line with code makes it easier to keep your documentation up-to-date as your requirements change. 'roxygen2' is inspired by the 'Doxygen' system for C++.", - "License": "MIT + file LICENSE", - "URL": "https://roxygen2.r-lib.org/, https://github.com/r-lib/roxygen2", - "BugReports": "https://github.com/r-lib/roxygen2/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "brew", - "cli (>= 3.3.0)", - "commonmark", - "desc (>= 1.2.0)", - "knitr", - "methods", - "pkgload (>= 1.0.2)", - "purrr (>= 1.0.0)", - "R6 (>= 2.1.2)", - "rlang (>= 1.0.6)", - "stringi", - "stringr (>= 1.0.0)", - "utils", - "withr", - "xml2" - ], - "Suggests": [ - "covr", - "R.methodsS3", - "R.oo", - "rmarkdown (>= 2.16)", - "testthat (>= 3.1.2)", - "yaml" - ], - "LinkingTo": [ - "cpp11" - ], - "VignetteBuilder": "knitr", - "Config/Needs/development": "testthat", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "TRUE", - "Encoding": "UTF-8", - "Language": "en-GB", - "RoxygenNote": "7.3.1.9000", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre, cph] (), Peter Danenberg [aut, cph], Gábor Csárdi [aut], Manuel Eugster [aut, cph], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "rprojroot": { - "Package": "rprojroot", - "Version": "2.0.4", - "Source": "Repository", - "Title": "Finding Files in Project Subdirectories", - "Authors@R": "person(given = \"Kirill\", family = \"M\\u00fcller\", role = c(\"aut\", \"cre\"), email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\"))", - "Description": "Robust, reliable and flexible paths to files below a project root. The 'root' of a project is defined as a directory that matches a certain criterion, e.g., it contains a certain regular file.", - "License": "MIT + file LICENSE", - "URL": "https://rprojroot.r-lib.org/, https://github.com/r-lib/rprojroot", - "BugReports": "https://github.com/r-lib/rprojroot/issues", - "Depends": [ - "R (>= 3.0.0)" - ], - "Suggests": [ - "covr", - "knitr", - "lifecycle", - "mockr", - "rlang", - "rmarkdown", - "testthat (>= 3.0.0)", - "withr" - ], - "VignetteBuilder": "knitr", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Author": "Kirill Müller [aut, cre] ()", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" - }, - "rstudioapi": { - "Package": "rstudioapi", - "Version": "0.17.1", - "Source": "Repository", - "Title": "Safely Access the RStudio API", - "Description": "Access the RStudio API (if available) and provide informative error messages when it's not.", - "Authors@R": "c( person(\"Kevin\", \"Ushey\", role = c(\"aut\", \"cre\"), email = \"kevin@rstudio.com\"), person(\"JJ\", \"Allaire\", role = c(\"aut\"), email = \"jj@posit.co\"), person(\"Hadley\", \"Wickham\", role = c(\"aut\"), email = \"hadley@posit.co\"), person(\"Gary\", \"Ritchie\", role = c(\"aut\"), email = \"gary@posit.co\"), person(family = \"RStudio\", role = \"cph\") )", - "Maintainer": "Kevin Ushey ", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/rstudioapi/, https://github.com/rstudio/rstudioapi", - "BugReports": "https://github.com/rstudio/rstudioapi/issues", - "RoxygenNote": "7.3.2", - "Suggests": [ - "testthat", - "knitr", - "rmarkdown", - "clipr", - "covr" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Author": "Kevin Ushey [aut, cre], JJ Allaire [aut], Hadley Wickham [aut], Gary Ritchie [aut], RStudio [cph]", - "Repository": "CRAN" - }, - "rversions": { - "Package": "rversions", - "Version": "2.1.2", - "Source": "Repository", - "Title": "Query 'R' Versions, Including 'r-release' and 'r-oldrel'", - "Authors@R": "c(person(given = \"Gábor\", family = \"Csárdi\", role = c(\"aut\", \"cre\"), email = \"csardi.gabor@gmail.com\"), person(given = \"Jeroen\", family = \"Ooms\", role = \"ctb\", email = \"jeroen.ooms@stat.ucla.edu\"), person(given = \"R Consortium\", role = \"fnd\"))", - "Description": "Query the main 'R' 'SVN' repository to find the versions 'r-release' and 'r-oldrel' refer to, and also all previous 'R' versions and their release dates.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-hub/rversions, https://r-hub.github.io/rversions/", - "BugReports": "https://github.com/r-hub/rversions/issues", - "Imports": [ - "curl", - "utils", - "xml2 (>= 1.0.0)" - ], - "Suggests": [ - "covr", - "mockery", - "testthat" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.2.1.9000", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre], Jeroen Ooms [ctb], R Consortium [fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "sass": { - "Package": "sass", - "Version": "0.4.10", - "Source": "Repository", - "Type": "Package", - "Title": "Syntactically Awesome Style Sheets ('Sass')", - "Description": "An 'SCSS' compiler, powered by the 'LibSass' library. With this, R developers can use variables, inheritance, and functions to generate dynamic style sheets. The package uses the 'Sass CSS' extension language, which is stable, powerful, and CSS compatible.", - "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@rstudio.com\", \"aut\"), person(\"Timothy\", \"Mastny\", , \"tim.mastny@gmail.com\", \"aut\"), person(\"Richard\", \"Iannone\", , \"rich@rstudio.com\", \"aut\", comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Barret\", \"Schloerke\", , \"barret@rstudio.com\", \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Carson\", \"Sievert\", , \"carson@rstudio.com\", c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Christophe\", \"Dervieux\", , \"cderv@rstudio.com\", c(\"ctb\"), comment = c(ORCID = \"0000-0003-4474-2498\")), person(family = \"RStudio\", role = c(\"cph\", \"fnd\")), person(family = \"Sass Open Source Foundation\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Greter\", \"Marcel\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Mifsud\", \"Michael\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Hampton\", \"Catlin\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Natalie\", \"Weizenbaum\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Chris\", \"Eppstein\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Adams\", \"Joseph\", role = c(\"ctb\", \"cph\"), comment = \"json.cpp\"), person(\"Trifunovic\", \"Nemanja\", role = c(\"ctb\", \"cph\"), comment = \"utf8.h\") )", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/sass/, https://github.com/rstudio/sass", - "BugReports": "https://github.com/rstudio/sass/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "SystemRequirements": "GNU make", - "Imports": [ - "fs (>= 1.2.4)", - "rlang (>= 0.4.10)", - "htmltools (>= 0.5.1)", - "R6", - "rappdirs" - ], - "Suggests": [ - "testthat", - "knitr", - "rmarkdown", - "withr", - "shiny", - "curl" - ], - "VignetteBuilder": "knitr", - "Config/testthat/edition": "3", - "NeedsCompilation": "yes", - "Author": "Joe Cheng [aut], Timothy Mastny [aut], Richard Iannone [aut] (), Barret Schloerke [aut] (), Carson Sievert [aut, cre] (), Christophe Dervieux [ctb] (), RStudio [cph, fnd], Sass Open Source Foundation [ctb, cph] (LibSass library), Greter Marcel [ctb, cph] (LibSass library), Mifsud Michael [ctb, cph] (LibSass library), Hampton Catlin [ctb, cph] (LibSass library), Natalie Weizenbaum [ctb, cph] (LibSass library), Chris Eppstein [ctb, cph] (LibSass library), Adams Joseph [ctb, cph] (json.cpp), Trifunovic Nemanja [ctb, cph] (utf8.h)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" - }, - "scales": { - "Package": "scales", - "Version": "1.4.0", - "Source": "Repository", - "Title": "Scale Functions for Visualization", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Dana\", \"Seidel\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Graphical scales map data to aesthetics, and provide methods for automatically determining breaks and labels for axes and legends.", - "License": "MIT + file LICENSE", - "URL": "https://scales.r-lib.org, https://github.com/r-lib/scales", - "BugReports": "https://github.com/r-lib/scales/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ - "cli", - "farver (>= 2.0.3)", - "glue", - "labeling", - "lifecycle", - "R6", - "RColorBrewer", - "rlang (>= 1.1.0)", - "viridisLite" - ], - "Suggests": [ - "bit64", - "covr", - "dichromat", - "ggplot2", - "hms (>= 0.5.0)", - "stringi", - "testthat (>= 3.0.0)" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-04-23", - "Encoding": "UTF-8", - "LazyLoad": "yes", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut], Thomas Lin Pedersen [cre, aut] (), Dana Seidel [aut], Posit Software, PBC [cph, fnd] (03wc8by49)", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "https://packagemanager.posit.co/cran/latest" - }, - "sessioninfo": { - "Package": "sessioninfo", - "Version": "1.2.3", - "Source": "Repository", - "Title": "R Session Information", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = \"cre\"), person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Robert\", \"Flight\", role = \"aut\"), person(\"Kirill\", \"Müller\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\"), person(\"R Core team\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Maintainer": "Gábor Csárdi ", - "Description": "Query and print information about the current R session. It is similar to 'utils::sessionInfo()', but includes more information about packages, and where they were installed from.", - "License": "GPL-2", - "URL": "https://github.com/r-lib/sessioninfo#readme, https://sessioninfo.r-lib.org", - "BugReports": "https://github.com/r-lib/sessioninfo/issues", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ - "cli (>= 3.1.0)", - "tools", - "utils" - ], - "Suggests": [ - "callr", - "covr", - "gh", - "reticulate", - "rmarkdown", - "testthat (>= 3.2.0)", - "withr" - ], - "Config/Needs/website": "pkgdown, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [cre], Hadley Wickham [aut], Winston Chang [aut], Robert Flight [aut], Kirill Müller [aut], Jim Hester [aut], R Core team [ctb], Posit Software, PBC [cph, fnd]", - "Repository": "CRAN" - }, - "shiny": { - "Package": "shiny", - "Version": "1.10.0", - "Source": "Repository", - "Type": "Package", - "Title": "Web Application Framework for R", - "Authors@R": "c( person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@posit.co\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@posit.co\"), person(\"JJ\", \"Allaire\", role = \"aut\", email = \"jj@posit.co\"), person(\"Carson\", \"Sievert\", role = \"aut\", email = \"carson@posit.co\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Barret\", \"Schloerke\", role = \"aut\", email = \"barret@posit.co\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Yihui\", \"Xie\", role = \"aut\", email = \"yihui@posit.co\"), person(\"Jeff\", \"Allen\", role = \"aut\"), person(\"Jonathan\", \"McPherson\", role = \"aut\", email = \"jonathan@posit.co\"), person(\"Alan\", \"Dipert\", role = \"aut\"), person(\"Barbara\", \"Borges\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(family = \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt\"), person(family = \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery UI library; authors listed in inst/www/shared/jqueryui/AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(family = \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(family = \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Prem Nawaz\", \"Khan\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Victor\", \"Tsaran\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Dennis\", \"Lembree\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Srinivasu\", \"Chakravarthula\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Cathy\", \"O'Connor\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(family = \"PayPal, Inc\", role = \"cph\", comment = \"Bootstrap accessibility plugin\"), person(\"Stefan\", \"Petre\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap-datepicker library\"), person(\"Andrew\", \"Rowls\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap-datepicker library\"), person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js library\"), person(\"Salmen\", \"Bejaoui\", role = c(\"ctb\", \"cph\"), comment = \"selectize-plugin-a11y library\"), person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"), comment = \"ion.rangeSlider library\"), person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"), comment = \"Javascript strftime library\"), person(family = \"SpryMedia Limited\", role = c(\"ctb\", \"cph\"), comment = \"DataTables library\"), person(\"John\", \"Fraser\", role = c(\"ctb\", \"cph\"), comment = \"showdown.js library\"), person(\"John\", \"Gruber\", role = c(\"ctb\", \"cph\"), comment = \"showdown.js library\"), person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"), person(family = \"R Core Team\", role = c(\"ctb\", \"cph\"), comment = \"tar implementation from R\") )", - "Description": "Makes it incredibly easy to build interactive web applications with R. Automatic \"reactive\" binding between inputs and outputs and extensive prebuilt widgets make it possible to build beautiful, responsive, and powerful applications with minimal effort.", - "License": "GPL-3 | file LICENSE", - "Depends": [ - "R (>= 3.0.2)", - "methods" - ], - "Imports": [ - "utils", - "grDevices", - "httpuv (>= 1.5.2)", - "mime (>= 0.3)", - "jsonlite (>= 0.9.16)", - "xtable", - "fontawesome (>= 0.4.0)", - "htmltools (>= 0.5.4)", - "R6 (>= 2.0)", - "sourcetools", - "later (>= 1.0.0)", - "promises (>= 1.3.2)", - "tools", - "crayon", - "rlang (>= 0.4.10)", - "fastmap (>= 1.1.1)", - "withr", - "commonmark (>= 1.7)", - "glue (>= 1.3.2)", - "bslib (>= 0.6.0)", - "cachem (>= 1.1.0)", - "lifecycle (>= 0.2.0)" - ], - "Suggests": [ - "coro (>= 1.1.0)", - "datasets", - "DT", - "Cairo (>= 1.5-5)", - "testthat (>= 3.0.0)", - "knitr (>= 1.6)", - "markdown", - "rmarkdown", - "ggplot2", - "reactlog (>= 1.0.0)", - "magrittr", - "yaml", - "future", - "dygraphs", - "ragg", - "showtext", - "sass" - ], - "URL": "https://shiny.posit.co/, https://github.com/rstudio/shiny", - "BugReports": "https://github.com/rstudio/shiny/issues", - "Collate": "'globals.R' 'app-state.R' 'app_template.R' 'bind-cache.R' 'bind-event.R' 'bookmark-state-local.R' 'bookmark-state.R' 'bootstrap-deprecated.R' 'bootstrap-layout.R' 'conditions.R' 'map.R' 'utils.R' 'bootstrap.R' 'busy-indicators-spinners.R' 'busy-indicators.R' 'cache-utils.R' 'deprecated.R' 'devmode.R' 'diagnose.R' 'extended-task.R' 'fileupload.R' 'graph.R' 'reactives.R' 'reactive-domains.R' 'history.R' 'hooks.R' 'html-deps.R' 'image-interact-opts.R' 'image-interact.R' 'imageutils.R' 'input-action.R' 'input-checkbox.R' 'input-checkboxgroup.R' 'input-date.R' 'input-daterange.R' 'input-file.R' 'input-numeric.R' 'input-password.R' 'input-radiobuttons.R' 'input-select.R' 'input-slider.R' 'input-submit.R' 'input-text.R' 'input-textarea.R' 'input-utils.R' 'insert-tab.R' 'insert-ui.R' 'jqueryui.R' 'knitr.R' 'middleware-shiny.R' 'middleware.R' 'timer.R' 'shiny.R' 'mock-session.R' 'modal.R' 'modules.R' 'notifications.R' 'priorityqueue.R' 'progress.R' 'react.R' 'reexports.R' 'render-cached-plot.R' 'render-plot.R' 'render-table.R' 'run-url.R' 'runapp.R' 'serializers.R' 'server-input-handlers.R' 'server-resource-paths.R' 'server.R' 'shiny-options.R' 'shiny-package.R' 'shinyapp.R' 'shinyui.R' 'shinywrappers.R' 'showcase.R' 'snapshot.R' 'staticimports.R' 'tar.R' 'test-export.R' 'test-server.R' 'test.R' 'update-input.R' 'utils-lang.R' 'version_bs_date_picker.R' 'version_ion_range_slider.R' 'version_jquery.R' 'version_jqueryui.R' 'version_selectize.R' 'version_strftime.R' 'viewer.R'", - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "RdMacros": "lifecycle", - "Config/testthat/edition": "3", - "Config/Needs/check": "shinytest2", - "NeedsCompilation": "no", - "Author": "Winston Chang [aut, cre] (), Joe Cheng [aut], JJ Allaire [aut], Carson Sievert [aut] (), Barret Schloerke [aut] (), Yihui Xie [aut], Jeff Allen [aut], Jonathan McPherson [aut], Alan Dipert [aut], Barbara Borges [aut], Posit Software, PBC [cph, fnd], jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt), jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in inst/www/shared/jqueryui/AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Prem Nawaz Khan [ctb] (Bootstrap accessibility plugin), Victor Tsaran [ctb] (Bootstrap accessibility plugin), Dennis Lembree [ctb] (Bootstrap accessibility plugin), Srinivasu Chakravarthula [ctb] (Bootstrap accessibility plugin), Cathy O'Connor [ctb] (Bootstrap accessibility plugin), PayPal, Inc [cph] (Bootstrap accessibility plugin), Stefan Petre [ctb, cph] (Bootstrap-datepicker library), Andrew Rowls [ctb, cph] (Bootstrap-datepicker library), Brian Reavis [ctb, cph] (selectize.js library), Salmen Bejaoui [ctb, cph] (selectize-plugin-a11y library), Denis Ineshin [ctb, cph] (ion.rangeSlider library), Sami Samhuri [ctb, cph] (Javascript strftime library), SpryMedia Limited [ctb, cph] (DataTables library), John Fraser [ctb, cph] (showdown.js library), John Gruber [ctb, cph] (showdown.js library), Ivan Sagalaev [ctb, cph] (highlight.js library), R Core Team [ctb, cph] (tar implementation from R)", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" - }, - "showtext": { - "Package": "showtext", - "Version": "0.9-7", - "Source": "Repository", - "Type": "Package", - "Title": "Using Fonts More Easily in R Graphs", - "Date": "2024-03-02", - "Author": "Yixuan Qiu and authors/contributors of the included software. See file AUTHORS for details.", - "Maintainer": "Yixuan Qiu ", - "Description": "Making it easy to use various types of fonts ('TrueType', 'OpenType', Type 1, web fonts, etc.) in R graphs, and supporting most output formats of R graphics including PNG, PDF and SVG. Text glyphs will be converted into polygons or raster images, hence after the plot has been created, it no longer relies on the font files. No external software such as 'Ghostscript' is needed to use this package.", - "Depends": [ - "sysfonts (>= 0.7.1)", - "showtextdb (>= 2.0)" - ], - "Imports": [ - "grDevices" - ], - "Suggests": [ - "knitr", - "rmarkdown", - "prettydoc", - "curl", - "jsonlite" - ], - "SystemRequirements": "zlib, libpng, FreeType", - "URL": "https://github.com/yixuan/showtext", - "BugReports": "https://github.com/yixuan/showtext/issues", - "License": "Apache License (>= 2.0)", - "Copyright": "see file COPYRIGHTS", - "VignetteBuilder": "knitr, rmarkdown", - "RoxygenNote": "7.3.1", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Repository": "CRAN" - }, - "showtextdb": { - "Package": "showtextdb", - "Version": "3.0", - "Source": "Repository", - "Type": "Package", - "Title": "Font Files for the 'showtext' Package", - "Date": "2020-05-31", - "Author": "Yixuan Qiu and authors/contributors of the included fonts. See file AUTHORS for details.", - "Maintainer": "Yixuan Qiu ", - "Description": "Providing font files that can be used by the 'showtext' package.", - "Imports": [ - "sysfonts (>= 0.7)", - "utils" - ], - "Suggests": [ - "curl" - ], - "License": "Apache License (>= 2.0)", - "Copyright": "see file COPYRIGHTS", - "RoxygenNote": "7.1.0", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "snow": { - "Package": "snow", - "Version": "0.4-4", - "Source": "Repository", - "Title": "Simple Network of Workstations", - "Author": "Luke Tierney, A. J. Rossini, Na Li, H. Sevcikova", - "Description": "Support for simple parallel computing in R.", - "Maintainer": "Luke Tierney ", - "Suggests": [ - "rlecuyer" - ], - "Enhances": [ - "Rmpi" - ], - "License": "GPL", - "Depends": [ - "R (>= 2.13.1)", - "utils" - ], - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "sourcetools": { - "Package": "sourcetools", - "Version": "0.1.7-1", - "Source": "Repository", - "Type": "Package", - "Title": "Tools for Reading, Tokenizing and Parsing R Code", - "Author": "Kevin Ushey", - "Maintainer": "Kevin Ushey ", - "Description": "Tools for the reading and tokenization of R code. The 'sourcetools' package provides both an R and C++ interface for the tokenization of R code, and helpers for interacting with the tokenized representation of R code.", - "License": "MIT + file LICENSE", - "Depends": [ - "R (>= 3.0.2)" - ], - "Suggests": [ - "testthat" - ], - "RoxygenNote": "5.0.1", - "BugReports": "https://github.com/kevinushey/sourcetools/issues", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Repository": "CRAN" - }, - "stringi": { - "Package": "stringi", - "Version": "1.8.7", - "Source": "Repository", - "Date": "2025-03-27", - "Title": "Fast and Portable Character String Processing Facilities", - "Description": "A collection of character string/text/natural language processing tools for pattern searching (e.g., with 'Java'-like regular expressions or the 'Unicode' collation algorithm), random string generation, case mapping, string transliteration, concatenation, sorting, padding, wrapping, Unicode normalisation, date-time formatting and parsing, and many more. They are fast, consistent, convenient, and - thanks to 'ICU' (International Components for Unicode) - portable across all locales and platforms. Documentation about 'stringi' is provided via its website at and the paper by Gagolewski (2022, ).", - "URL": "https://stringi.gagolewski.com/, https://github.com/gagolews/stringi, https://icu.unicode.org/", - "BugReports": "https://github.com/gagolews/stringi/issues", - "SystemRequirements": "ICU4C (>= 61, optional)", - "Type": "Package", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ - "tools", - "utils", - "stats" - ], - "Biarch": "TRUE", - "License": "file LICENSE", - "Authors@R": "c(person(given = \"Marek\", family = \"Gagolewski\", role = c(\"aut\", \"cre\", \"cph\"), email = \"marek@gagolewski.com\", comment = c(ORCID = \"0000-0003-0637-6028\")), person(given = \"Bartek\", family = \"Tartanus\", role = \"ctb\"), person(\"Unicode, Inc. and others\", role=\"ctb\", comment = \"ICU4C source code, Unicode Character Database\") )", - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Marek Gagolewski [aut, cre, cph] (), Bartek Tartanus [ctb], Unicode, Inc. and others [ctb] (ICU4C source code, Unicode Character Database)", - "Maintainer": "Marek Gagolewski ", - "License_is_FOSS": "yes", - "Repository": "CRAN" - }, - "stringr": { - "Package": "stringr", - "Version": "1.5.1", - "Source": "Repository", - "Title": "Simple, Consistent Wrappers for Common String Operations", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\", \"cph\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A consistent, simple and easy to use set of wrappers around the fantastic 'stringi' package. All function and argument names (and positions) are consistent, all functions deal with \"NA\"'s and zero length vectors in the same way, and the output from one function is easy to feed into the input of another.", - "License": "MIT + file LICENSE", - "URL": "https://stringr.tidyverse.org, https://github.com/tidyverse/stringr", - "BugReports": "https://github.com/tidyverse/stringr/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "cli", - "glue (>= 1.6.1)", - "lifecycle (>= 1.0.3)", - "magrittr", - "rlang (>= 1.0.0)", - "stringi (>= 1.5.3)", - "vctrs (>= 0.4.0)" - ], - "Suggests": [ - "covr", - "dplyr", - "gt", - "htmltools", - "htmlwidgets", - "knitr", - "rmarkdown", - "testthat (>= 3.0.0)", - "tibble" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre, cph], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "sys": { - "Package": "sys", - "Version": "3.4.3", - "Source": "Repository", - "Type": "Package", - "Title": "Powerful and Reliable Tools for Running System Commands in R", - "Authors@R": "c(person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = \"ctb\"))", - "Description": "Drop-in replacements for the base system2() function with fine control and consistent behavior across platforms. Supports clean interruption, timeout, background tasks, and streaming STDIN / STDOUT / STDERR over binary or text connections. Arguments on Windows automatically get encoded and quoted to work on different locales.", - "License": "MIT + file LICENSE", - "URL": "https://jeroen.r-universe.dev/sys", - "BugReports": "https://github.com/jeroen/sys/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.1.1", - "Suggests": [ - "unix (>= 1.4)", - "spelling", - "testthat" - ], - "Language": "en-US", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (), Gábor Csárdi [ctb]", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "sysfonts": { - "Package": "sysfonts", - "Version": "0.8.9", - "Source": "Repository", - "Type": "Package", - "Title": "Loading Fonts into R", - "Date": "2024-03-02", - "Author": "Yixuan Qiu and authors/contributors of the included fonts. See file AUTHORS for details.", - "Maintainer": "Yixuan Qiu ", - "Description": "Loading system fonts and Google Fonts into R, in order to support other packages such as 'R2SWF' and 'showtext'.", - "Suggests": [ - "curl", - "jsonlite" - ], - "Copyright": "see file COPYRIGHTS", - "SystemRequirements": "zlib, libpng, FreeType", - "URL": "https://github.com/yixuan/sysfonts", - "BugReports": "https://github.com/yixuan/sysfonts/issues", - "License": "GPL-2", - "RoxygenNote": "7.3.1", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Repository": "CRAN" - }, - "systemfonts": { - "Package": "systemfonts", - "Version": "1.2.3", - "Source": "Repository", - "Type": "Package", - "Title": "System Native Font Finding", - "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Jeroen\", \"Ooms\", , \"jeroen@berkeley.edu\", role = \"aut\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Devon\", \"Govett\", role = \"aut\", comment = \"Author of font-manager\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Provides system native access to the font catalogue. As font handling varies between systems it is difficult to correctly locate installed fonts across different operating systems. The 'systemfonts' package provides bindings to the native libraries on Windows, macOS and Linux for finding font files that can then be used further by e.g. graphic devices. The main use is intended to be from compiled code but 'systemfonts' also provides access from R.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/systemfonts, https://systemfonts.r-lib.org", - "BugReports": "https://github.com/r-lib/systemfonts/issues", - "Depends": [ - "R (>= 3.2.0)" - ], - "Imports": [ - "base64enc", - "grid", - "jsonlite", - "lifecycle", - "tools", - "utils" - ], - "Suggests": [ - "covr", - "farver", - "graphics", - "knitr", - "rmarkdown", - "testthat (>= 2.1.0)" - ], - "LinkingTo": [ - "cpp11 (>= 0.2.1)" - ], - "VignetteBuilder": "knitr", - "Config/build/compilation-database": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/usethis/last-upkeep": "2025-04-23", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "SystemRequirements": "fontconfig, freetype2", - "NeedsCompilation": "yes", - "Author": "Thomas Lin Pedersen [aut, cre] (ORCID: ), Jeroen Ooms [aut] (ORCID: ), Devon Govett [aut] (Author of font-manager), Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" - }, - "testthat": { - "Package": "testthat", - "Version": "3.2.3", - "Source": "Repository", - "Title": "Unit Testing for R", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"R Core team\", role = \"ctb\", comment = \"Implementation of utils::recover()\") )", - "Description": "Software testing is important, but, in part because it is frustrating and boring, many of us avoid it. 'testthat' is a testing framework for R that is easy to learn and use, and integrates with your existing 'workflow'.", - "License": "MIT + file LICENSE", - "URL": "https://testthat.r-lib.org, https://github.com/r-lib/testthat", - "BugReports": "https://github.com/r-lib/testthat/issues", - "Depends": [ - "R (>= 3.6.0)" - ], - "Imports": [ - "brio (>= 1.1.3)", - "callr (>= 3.7.3)", - "cli (>= 3.6.1)", - "desc (>= 1.4.2)", - "digest (>= 0.6.33)", - "evaluate (>= 1.0.1)", - "jsonlite (>= 1.8.7)", - "lifecycle (>= 1.0.3)", - "magrittr (>= 2.0.3)", - "methods", - "pkgload (>= 1.3.2.1)", - "praise (>= 1.0.0)", - "processx (>= 3.8.2)", - "ps (>= 1.7.5)", - "R6 (>= 2.5.1)", - "rlang (>= 1.1.1)", - "utils", - "waldo (>= 0.6.0)", - "withr (>= 3.0.2)" - ], - "Suggests": [ - "covr", - "curl (>= 0.9.5)", - "diffviewer (>= 0.1.0)", - "knitr", - "rmarkdown", - "rstudioapi", - "S7", - "shiny", - "usethis", - "vctrs (>= 0.1.0)", - "xml2" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "watcher, parallel*", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd], R Core team [ctb] (Implementation of utils::recover())", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "textshaping": { - "Package": "textshaping", - "Version": "1.0.1", - "Source": "Repository", - "Title": "Bindings to the 'HarfBuzz' and 'Fribidi' Libraries for Text Shaping", - "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Provides access to the text shaping functionality in the 'HarfBuzz' library and the bidirectional algorithm in the 'Fribidi' library. 'textshaping' is a low-level utility package mainly for graphic devices that expands upon the font tool-set provided by the 'systemfonts' package.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/textshaping", - "BugReports": "https://github.com/r-lib/textshaping/issues", - "Depends": [ - "R (>= 3.2.0)" - ], - "Imports": [ - "lifecycle", - "stats", - "stringi", - "systemfonts (>= 1.1.0)", - "utils" - ], - "Suggests": [ - "covr", - "grDevices", - "grid", - "knitr", - "rmarkdown", - "testthat (>= 3.0.0)" - ], - "LinkingTo": [ - "cpp11 (>= 0.2.1)", - "systemfonts (>= 1.0.0)" - ], - "VignetteBuilder": "knitr", - "Config/build/compilation-database": "true", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-04-23", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "SystemRequirements": "freetype2, harfbuzz, fribidi", - "NeedsCompilation": "yes", - "Author": "Thomas Lin Pedersen [cre, aut] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" - }, - "tibble": { - "Package": "tibble", - "Version": "3.2.1", - "Source": "Repository", - "Title": "Simple Data Frames", - "Authors@R": "c(person(given = \"Kirill\", family = \"M\\u00fcller\", role = c(\"aut\", \"cre\"), email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(given = \"Hadley\", family = \"Wickham\", role = \"aut\", email = \"hadley@rstudio.com\"), person(given = \"Romain\", family = \"Francois\", role = \"ctb\", email = \"romain@r-enthusiasts.com\"), person(given = \"Jennifer\", family = \"Bryan\", role = \"ctb\", email = \"jenny@rstudio.com\"), person(given = \"RStudio\", role = c(\"cph\", \"fnd\")))", - "Description": "Provides a 'tbl_df' class (the 'tibble') with stricter checking and better formatting than the traditional data frame.", - "License": "MIT + file LICENSE", - "URL": "https://tibble.tidyverse.org/, https://github.com/tidyverse/tibble", - "BugReports": "https://github.com/tidyverse/tibble/issues", - "Depends": [ - "R (>= 3.4.0)" - ], - "Imports": [ - "fansi (>= 0.4.0)", - "lifecycle (>= 1.0.0)", - "magrittr", - "methods", - "pillar (>= 1.8.1)", - "pkgconfig", - "rlang (>= 1.0.2)", - "utils", - "vctrs (>= 0.4.2)" - ], - "Suggests": [ - "bench", - "bit64", - "blob", - "brio", - "callr", - "cli", - "covr", - "crayon (>= 1.3.4)", - "DiagrammeR", - "dplyr", - "evaluate", - "formattable", - "ggplot2", - "here", - "hms", - "htmltools", - "knitr", - "lubridate", - "mockr", - "nycflights13", - "pkgbuild", - "pkgload", - "purrr", - "rmarkdown", - "stringi", - "testthat (>= 3.0.2)", - "tidyr", - "withr" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "vignette-formats, as_tibble, add, invariants", - "Config/autostyle/scope": "line_breaks", - "Config/autostyle/strict": "true", - "Config/autostyle/rmd": "false", - "Config/Needs/website": "tidyverse/tidytemplate", - "NeedsCompilation": "yes", - "Author": "Kirill Müller [aut, cre] (), Hadley Wickham [aut], Romain Francois [ctb], Jennifer Bryan [ctb], RStudio [cph, fnd]", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" - }, - "tidyselect": { - "Package": "tidyselect", - "Version": "1.2.1", - "Source": "Repository", - "Title": "Select from a Set of Strings", - "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A backend for the selecting functions of the 'tidyverse'. It makes it easy to implement select-like functions in your own packages in a way that is consistent with other 'tidyverse' interfaces for selection.", - "License": "MIT + file LICENSE", - "URL": "https://tidyselect.r-lib.org, https://github.com/r-lib/tidyselect", - "BugReports": "https://github.com/r-lib/tidyselect/issues", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ - "cli (>= 3.3.0)", - "glue (>= 1.3.0)", - "lifecycle (>= 1.0.3)", - "rlang (>= 1.0.4)", - "vctrs (>= 0.5.2)", - "withr" - ], - "Suggests": [ - "covr", - "crayon", - "dplyr", - "knitr", - "magrittr", - "rmarkdown", - "stringr", - "testthat (>= 3.1.1)", - "tibble (>= 2.1.3)" - ], - "VignetteBuilder": "knitr", - "ByteCompile": "true", - "Config/testthat/edition": "3", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.0.9000", - "NeedsCompilation": "yes", - "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut], Posit Software, PBC [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" - }, - "timechange": { - "Package": "timechange", - "Version": "0.3.0", - "Source": "Repository", - "Title": "Efficient Manipulation of Date-Times", - "Authors@R": "c(person(\"Vitalie\", \"Spinu\", email = \"spinuvit@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Google Inc.\", role = c(\"ctb\", \"cph\")))", - "Description": "Efficient routines for manipulation of date-time objects while accounting for time-zones and daylight saving times. The package includes utilities for updating of date-time components (year, month, day etc.), modification of time-zones, rounding of date-times, period addition and subtraction etc. Parts of the 'CCTZ' source code, released under the Apache 2.0 License, are included in this package. See for more details.", - "Depends": [ - "R (>= 3.3)" - ], - "License": "GPL (>= 3)", - "Encoding": "UTF-8", - "LinkingTo": [ - "cpp11 (>= 0.2.7)" - ], - "Suggests": [ - "testthat (>= 0.7.1.99)", - "knitr" - ], - "SystemRequirements": "A system with zoneinfo data (e.g. /usr/share/zoneinfo) as well as a recent-enough C++11 compiler (such as g++-4.8 or later). On Windows the zoneinfo included with R is used.", - "BugReports": "https://github.com/vspinu/timechange/issues", - "URL": "https://github.com/vspinu/timechange/", - "RoxygenNote": "7.2.1", - "NeedsCompilation": "yes", - "Author": "Vitalie Spinu [aut, cre], Google Inc. [ctb, cph]", - "Maintainer": "Vitalie Spinu ", - "Repository": "CRAN" - }, - "tinytex": { - "Package": "tinytex", - "Version": "0.57", - "Source": "Repository", - "Type": "Package", - "Title": "Helper Functions to Install and Maintain TeX Live, and Compile LaTeX Documents", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"Christophe\", \"Dervieux\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Devon\", \"Ryan\", role = \"ctb\", email = \"dpryan79@gmail.com\", comment = c(ORCID = \"0000-0002-8549-0971\")), person(\"Ethan\", \"Heinzen\", role = \"ctb\"), person(\"Fernando\", \"Cagua\", role = \"ctb\"), person() )", - "Description": "Helper functions to install and maintain the 'LaTeX' distribution named 'TinyTeX' (), a lightweight, cross-platform, portable, and easy-to-maintain version of 'TeX Live'. This package also contains helper functions to compile 'LaTeX' documents, and install missing 'LaTeX' packages automatically.", - "Imports": [ - "xfun (>= 0.48)" - ], - "Suggests": [ - "testit", - "rstudioapi" - ], - "License": "MIT + file LICENSE", - "URL": "https://github.com/rstudio/tinytex", - "BugReports": "https://github.com/rstudio/tinytex/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre, cph] (), Posit Software, PBC [cph, fnd], Christophe Dervieux [ctb] (), Devon Ryan [ctb] (), Ethan Heinzen [ctb], Fernando Cagua [ctb]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "triangle": { - "Package": "triangle", - "Version": "1.0", - "Source": "Repository", - "Title": "Distribution Functions and Parameter Estimates for the Triangle Distribution", - "Authors@R": "person(given = \"Rob\", family = \"Carnell\", role = c(\"aut\", \"cre\"), email = \"bertcarnell@gmail.com\")", - "Description": "Provides the \"r, q, p, and d\" distribution functions for the triangle distribution. Also includes maximum likelihood estimation of parameters.", - "License": "GPL (>= 2)", - "URL": "https://bertcarnell.github.io/triangle/", - "BugReports": "https://github.com/bertcarnell/triangle/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.2", - "Depends": [ - "R (>= 2.14.1)" - ], - "Collate": "'cdfe.R' 'dtriangle.R' 'fit-plots.R' 'ltriangle.r' 'mle-utils.R' 'mle.R' 'mom.R' 'ptriangle.r' 'qtriangle.R' 'rtriangle.r'", - "Imports": [ - "assertthat", - "stats4", - "methods" - ], - "Suggests": [ - "testthat", - "knitr", - "rmarkdown", - "MASS" - ], - "VignetteBuilder": "knitr", - "NeedsCompilation": "no", - "Author": "Rob Carnell [aut, cre]", - "Maintainer": "Rob Carnell ", - "Repository": "CRAN" - }, - "tseries": { - "Package": "tseries", - "Version": "0.10-58", - "Source": "Repository", - "Title": "Time Series Analysis and Computational Finance", - "Authors@R": "c(person(\"Adrian\", \"Trapletti\", role = \"aut\", email = \"adrian@trapletti.org\"), person(\"Kurt\", \"Hornik\", role = c(\"aut\", \"cre\"), email = \"Kurt.Hornik@R-project.org\", comment = c(ORCID = \"0000-0003-4198-9911\")), person(\"Blake\", \"LeBaron\", role = \"ctb\", comment = \"BDS test code\"))", - "Description": "Time series analysis and computational finance.", - "Depends": [ - "R (>= 3.4.0)" - ], - "Imports": [ - "graphics", - "stats", - "utils", - "quadprog", - "zoo", - "quantmod (>= 0.4-9)", - "jsonlite" - ], - "License": "GPL-2 | GPL-3", - "NeedsCompilation": "yes", - "Author": "Adrian Trapletti [aut], Kurt Hornik [aut, cre] (), Blake LeBaron [ctb] (BDS test code)", - "Maintainer": "Kurt Hornik ", - "Repository": "CRAN" - }, - "urlchecker": { - "Package": "urlchecker", - "Version": "1.0.1", - "Source": "Repository", - "Title": "Run CRAN URL Checks from Older R Versions", - "Authors@R": "c( person(\"R Core team\", role = \"aut\", comment = \"The code in urltools.R adapted from the tools package\"), person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"RStudio\", role = c(\"cph\", \"fnd\")) )", - "Description": "Provide the URL checking tools available in R 4.1+ as a package for earlier versions of R. Also uses concurrent requests so can be much faster than the serial versions.", - "License": "GPL-3", - "URL": "https://github.com/r-lib/urlchecker", - "BugReports": "https://github.com/r-lib/urlchecker/issues", - "Depends": [ - "R (>= 3.3)" - ], - "Imports": [ - "cli", - "curl", - "tools", - "xml2" - ], - "Suggests": [ - "covr" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.1.2", - "NeedsCompilation": "no", - "Author": "R Core team [aut] (The code in urltools.R adapted from the tools package), Jim Hester [aut] (), Gábor Csárdi [aut, cre], RStudio [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "usethis": { - "Package": "usethis", - "Version": "3.1.0", - "Source": "Repository", - "Title": "Automate Package and Project Setup", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"Malcolm\", \"Barrett\", , \"malcolmbarrett@gmail.com\", role = \"aut\", comment = c(ORCID = \"0000-0003-0299-5825\")), person(\"Andy\", \"Teucher\", , \"andy.teucher@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-7840-692X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Automate package and project setup tasks that are otherwise performed manually. This includes setting up unit testing, test coverage, continuous integration, Git, 'GitHub', licenses, 'Rcpp', 'RStudio' projects, and more.", - "License": "MIT + file LICENSE", - "URL": "https://usethis.r-lib.org, https://github.com/r-lib/usethis", - "BugReports": "https://github.com/r-lib/usethis/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "cli (>= 3.0.1)", - "clipr (>= 0.3.0)", - "crayon", - "curl (>= 2.7)", - "desc (>= 1.4.2)", - "fs (>= 1.3.0)", - "gert (>= 1.4.1)", - "gh (>= 1.2.1)", - "glue (>= 1.3.0)", - "jsonlite", - "lifecycle (>= 1.0.0)", - "purrr", - "rappdirs", - "rlang (>= 1.1.0)", - "rprojroot (>= 1.2)", - "rstudioapi", - "stats", - "tools", - "utils", - "whisker", - "withr (>= 2.3.0)", - "yaml" - ], - "Suggests": [ - "covr", - "knitr", - "magick", - "pkgload (>= 1.3.2.1)", - "rmarkdown", - "roxygen2 (>= 7.1.2)", - "spelling (>= 1.2)", - "styler (>= 1.2.0)", - "testthat (>= 3.1.8)" - ], - "Config/Needs/website": "r-lib/asciicast, tidyverse/tidytemplate, xml2", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "TRUE", - "Config/testthat/start-first": "github-actions, release", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut] (), Jennifer Bryan [aut, cre] (), Malcolm Barrett [aut] (), Andy Teucher [aut] (), Posit Software, PBC [cph, fnd]", - "Maintainer": "Jennifer Bryan ", - "Repository": "RSPM" - }, - "utf8": { - "Package": "utf8", - "Version": "1.2.5", - "Source": "Repository", - "Title": "Unicode Text Processing", - "Authors@R": "c(person(given = c(\"Patrick\", \"O.\"), family = \"Perry\", role = c(\"aut\", \"cph\")), person(given = \"Kirill\", family = \"M\\u00fcller\", role = \"cre\", email = \"kirill@cynkra.com\"), person(given = \"Unicode, Inc.\", role = c(\"cph\", \"dtc\"), comment = \"Unicode Character Database\"))", - "Description": "Process and print 'UTF-8' encoded international text (Unicode). Input, validate, normalize, encode, format, and display.", - "License": "Apache License (== 2.0) | file LICENSE", - "URL": "https://ptrckprry.com/r-utf8/, https://github.com/patperry/r-utf8", - "BugReports": "https://github.com/patperry/r-utf8/issues", - "Depends": [ - "R (>= 2.10)" - ], - "Suggests": [ - "cli", - "covr", - "knitr", - "rlang", - "rmarkdown", - "testthat (>= 3.0.0)", - "withr" - ], - "VignetteBuilder": "knitr, rmarkdown", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2.9000", - "NeedsCompilation": "yes", - "Author": "Patrick O. Perry [aut, cph], Kirill Müller [cre], Unicode, Inc. [cph, dtc] (Unicode Character Database)", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" - }, - "vctrs": { - "Package": "vctrs", - "Version": "0.6.5", - "Source": "Repository", - "Title": "Vector Helpers", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = c(\"aut\", \"cre\")), person(\"data.table team\", role = \"cph\", comment = \"Radix sort based on data.table's forder() and their contribution to R's order()\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Defines new notions of prototype and size that are used to provide tools for consistent and well-founded type-coercion and size-recycling, and are in turn connected to ideas of type- and size-stability useful for analysing function interfaces.", - "License": "MIT + file LICENSE", - "URL": "https://vctrs.r-lib.org/, https://github.com/r-lib/vctrs", - "BugReports": "https://github.com/r-lib/vctrs/issues", - "Depends": [ - "R (>= 3.5.0)" - ], - "Imports": [ - "cli (>= 3.4.0)", - "glue", - "lifecycle (>= 1.0.3)", - "rlang (>= 1.1.0)" - ], - "Suggests": [ - "bit64", - "covr", - "crayon", - "dplyr (>= 0.8.5)", - "generics", - "knitr", - "pillar (>= 1.4.4)", - "pkgdown (>= 2.0.1)", - "rmarkdown", - "testthat (>= 3.0.0)", - "tibble (>= 3.1.3)", - "waldo (>= 0.2.0)", - "withr", - "xml2", - "zeallot" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "Language": "en-GB", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut], Lionel Henry [aut], Davis Vaughan [aut, cre], data.table team [cph] (Radix sort based on data.table's forder() and their contribution to R's order()), Posit Software, PBC [cph, fnd]", - "Maintainer": "Davis Vaughan ", - "Repository": "CRAN" - }, - "viridisLite": { - "Package": "viridisLite", - "Version": "0.4.2", - "Source": "Repository", - "Type": "Package", - "Title": "Colorblind-Friendly Color Maps (Lite Version)", - "Date": "2023-05-02", - "Authors@R": "c( person(\"Simon\", \"Garnier\", email = \"garnier@njit.edu\", role = c(\"aut\", \"cre\")), person(\"Noam\", \"Ross\", email = \"noam.ross@gmail.com\", role = c(\"ctb\", \"cph\")), person(\"Bob\", \"Rudis\", email = \"bob@rud.is\", role = c(\"ctb\", \"cph\")), person(\"Marco\", \"Sciaini\", email = \"sciaini.marco@gmail.com\", role = c(\"ctb\", \"cph\")), person(\"Antônio Pedro\", \"Camargo\", role = c(\"ctb\", \"cph\")), person(\"Cédric\", \"Scherer\", email = \"scherer@izw-berlin.de\", role = c(\"ctb\", \"cph\")) )", - "Maintainer": "Simon Garnier ", - "Description": "Color maps designed to improve graph readability for readers with common forms of color blindness and/or color vision deficiency. The color maps are also perceptually-uniform, both in regular form and also when converted to black-and-white for printing. This is the 'lite' version of the 'viridis' package that also contains 'ggplot2' bindings for discrete and continuous color and fill scales and can be found at .", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "Depends": [ - "R (>= 2.10)" - ], - "Suggests": [ - "hexbin (>= 1.27.0)", - "ggplot2 (>= 1.0.1)", - "testthat", - "covr" - ], - "URL": "https://sjmgarnier.github.io/viridisLite/, https://github.com/sjmgarnier/viridisLite/", - "BugReports": "https://github.com/sjmgarnier/viridisLite/issues/", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Author": "Simon Garnier [aut, cre], Noam Ross [ctb, cph], Bob Rudis [ctb, cph], Marco Sciaini [ctb, cph], Antônio Pedro Camargo [ctb, cph], Cédric Scherer [ctb, cph]", - "Repository": "CRAN" - }, - "waldo": { - "Package": "waldo", - "Version": "0.6.1", - "Source": "Repository", - "Title": "Find Differences Between R Objects", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Compare complex R objects and reveal the key differences. Designed particularly for use in testing packages where being able to quickly isolate key differences makes understanding test failures much easier.", - "License": "MIT + file LICENSE", - "URL": "https://waldo.r-lib.org, https://github.com/r-lib/waldo", - "BugReports": "https://github.com/r-lib/waldo/issues", - "Depends": [ - "R (>= 4.0)" - ], - "Imports": [ - "cli", - "diffobj (>= 0.3.4)", - "glue", - "methods", - "rlang (>= 1.1.0)" - ], - "Suggests": [ - "bit64", - "R6", - "S7", - "testthat (>= 3.0.0)", - "withr", - "xml2" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "whisker": { - "Package": "whisker", - "Version": "0.4.1", - "Source": "Repository", - "Maintainer": "Edwin de Jonge ", - "License": "GPL-3", - "Title": "{{mustache}} for R, Logicless Templating", - "Type": "Package", - "LazyLoad": "yes", - "Author": "Edwin de Jonge", - "Description": "Implements 'Mustache' logicless templating.", - "URL": "https://github.com/edwindj/whisker", - "Suggests": [ - "markdown" - ], - "RoxygenNote": "6.1.1", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "withr": { - "Package": "withr", - "Version": "3.0.2", - "Source": "Repository", - "Title": "Run Code 'With' Temporarily Modified Global State", - "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Kirill\", \"Müller\", , \"krlmlr+r@mailbox.org\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevinushey@gmail.com\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Jennifer\", \"Bryan\", role = \"ctb\"), person(\"Richard\", \"Cotton\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A set of functions to run code 'with' safely and temporarily modified global state. Many of these functions were originally a part of the 'devtools' package, this provides a simple package with limited dependencies to provide access to these functions.", - "License": "MIT + file LICENSE", - "URL": "https://withr.r-lib.org, https://github.com/r-lib/withr#readme", - "BugReports": "https://github.com/r-lib/withr/issues", - "Depends": [ - "R (>= 3.6.0)" - ], - "Imports": [ - "graphics", - "grDevices" - ], - "Suggests": [ - "callr", - "DBI", - "knitr", - "methods", - "rlang", - "rmarkdown (>= 2.12)", - "RSQLite", - "testthat (>= 3.0.0)" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "Collate": "'aaa.R' 'collate.R' 'connection.R' 'db.R' 'defer-exit.R' 'standalone-defer.R' 'defer.R' 'devices.R' 'local_.R' 'with_.R' 'dir.R' 'env.R' 'file.R' 'language.R' 'libpaths.R' 'locale.R' 'makevars.R' 'namespace.R' 'options.R' 'par.R' 'path.R' 'rng.R' 'seed.R' 'wrap.R' 'sink.R' 'tempfile.R' 'timezone.R' 'torture.R' 'utils.R' 'with.R'", - "NeedsCompilation": "no", - "Author": "Jim Hester [aut], Lionel Henry [aut, cre], Kirill Müller [aut], Kevin Ushey [aut], Hadley Wickham [aut], Winston Chang [aut], Jennifer Bryan [ctb], Richard Cotton [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "https://packagemanager.posit.co/cran/latest" - }, - "xfun": { - "Package": "xfun", - "Version": "0.52", - "Source": "Repository", - "Type": "Package", - "Title": "Supporting Functions for Packages Maintained by 'Yihui Xie'", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Wush\", \"Wu\", role = \"ctb\"), person(\"Daijiang\", \"Li\", role = \"ctb\"), person(\"Xianying\", \"Tan\", role = \"ctb\"), person(\"Salim\", \"Brüggemann\", role = \"ctb\", email = \"salim-b@pm.me\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Christophe\", \"Dervieux\", role = \"ctb\"), person() )", - "Description": "Miscellaneous functions commonly used in other packages maintained by 'Yihui Xie'.", - "Depends": [ - "R (>= 3.2.0)" - ], - "Imports": [ - "grDevices", - "stats", - "tools" - ], - "Suggests": [ - "testit", - "parallel", - "codetools", - "methods", - "rstudioapi", - "tinytex (>= 0.30)", - "mime", - "litedown (>= 0.4)", - "commonmark", - "knitr (>= 1.50)", - "remotes", - "pak", - "curl", - "xml2", - "jsonlite", - "magick", - "yaml", - "qs" - ], - "License": "MIT + file LICENSE", - "URL": "https://github.com/yihui/xfun", - "BugReports": "https://github.com/yihui/xfun/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "VignetteBuilder": "litedown", - "NeedsCompilation": "yes", - "Author": "Yihui Xie [aut, cre, cph] (, https://yihui.org), Wush Wu [ctb], Daijiang Li [ctb], Xianying Tan [ctb], Salim Brüggemann [ctb] (), Christophe Dervieux [ctb]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "xml2": { - "Package": "xml2", - "Version": "1.3.8", - "Source": "Repository", - "Title": "Parse XML", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Jeroen\", \"Ooms\", email = \"jeroenooms@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"R Foundation\", role = \"ctb\", comment = \"Copy of R-project homepage cached as example\") )", - "Description": "Bindings to 'libxml2' for working with XML data using a simple, consistent interface based on 'XPath' expressions. Also supports XML schema validation; for 'XSLT' transformations see the 'xslt' package.", - "License": "MIT + file LICENSE", - "URL": "https://xml2.r-lib.org, https://r-lib.r-universe.dev/xml2", - "BugReports": "https://github.com/r-lib/xml2/issues", - "Depends": [ - "R (>= 3.6.0)" - ], - "Imports": [ - "cli", - "methods", - "rlang (>= 1.1.0)" - ], - "Suggests": [ - "covr", - "curl", - "httr", - "knitr", - "magrittr", - "mockery", - "rmarkdown", - "testthat (>= 3.2.0)", - "xslt" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "SystemRequirements": "libxml2: libxml2-dev (deb), libxml2-devel (rpm)", - "Collate": "'S4.R' 'as_list.R' 'xml_parse.R' 'as_xml_document.R' 'classes.R' 'format.R' 'import-standalone-obj-type.R' 'import-standalone-purrr.R' 'import-standalone-types-check.R' 'init.R' 'nodeset_apply.R' 'paths.R' 'utils.R' 'xml2-package.R' 'xml_attr.R' 'xml_children.R' 'xml_document.R' 'xml_find.R' 'xml_missing.R' 'xml_modify.R' 'xml_name.R' 'xml_namespaces.R' 'xml_node.R' 'xml_nodeset.R' 'xml_path.R' 'xml_schema.R' 'xml_serialize.R' 'xml_structure.R' 'xml_text.R' 'xml_type.R' 'xml_url.R' 'xml_write.R' 'zzz.R'", - "Config/testthat/edition": "3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut], Jim Hester [aut], Jeroen Ooms [aut, cre], Posit Software, PBC [cph, fnd], R Foundation [ctb] (Copy of R-project homepage cached as example)", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "xopen": { - "Package": "xopen", - "Version": "1.0.1", - "Source": "Repository", - "Title": "Open System Files, 'URLs', Anything", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Fathi\", \"Boudra\", role = \"aut\"), person(\"Rex\", \"Dieter\", role = \"aut\"), person(\"Kevin\", \"Krammer\", role = \"aut\"), person(\"Jeremy\", \"White\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Cross platform solution to open files, directories or 'URLs' with their associated programs.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/xopen#readme, https://r-lib.github.io/xopen/", - "BugReports": "https://github.com/r-lib/xopen/issues", - "Depends": [ - "R (>= 3.1)" - ], - "Imports": [ - "processx" - ], - "Suggests": [ - "ps", - "testthat (>= 3.0.0)" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre], Fathi Boudra [aut], Rex Dieter [aut], Kevin Krammer [aut], Jeremy White [aut], Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "xtable": { - "Package": "xtable", - "Version": "1.8-4", - "Source": "Repository", - "Date": "2019-04-08", - "Title": "Export Tables to LaTeX or HTML", - "Authors@R": "c(person(\"David B.\", \"Dahl\", role=\"aut\"), person(\"David\", \"Scott\", role=c(\"aut\",\"cre\"), email=\"d.scott@auckland.ac.nz\"), person(\"Charles\", \"Roosen\", role=\"aut\"), person(\"Arni\", \"Magnusson\", role=\"aut\"), person(\"Jonathan\", \"Swinton\", role=\"aut\"), person(\"Ajay\", \"Shah\", role=\"ctb\"), person(\"Arne\", \"Henningsen\", role=\"ctb\"), person(\"Benno\", \"Puetz\", role=\"ctb\"), person(\"Bernhard\", \"Pfaff\", role=\"ctb\"), person(\"Claudio\", \"Agostinelli\", role=\"ctb\"), person(\"Claudius\", \"Loehnert\", role=\"ctb\"), person(\"David\", \"Mitchell\", role=\"ctb\"), person(\"David\", \"Whiting\", role=\"ctb\"), person(\"Fernando da\", \"Rosa\", role=\"ctb\"), person(\"Guido\", \"Gay\", role=\"ctb\"), person(\"Guido\", \"Schulz\", role=\"ctb\"), person(\"Ian\", \"Fellows\", role=\"ctb\"), person(\"Jeff\", \"Laake\", role=\"ctb\"), person(\"John\", \"Walker\", role=\"ctb\"), person(\"Jun\", \"Yan\", role=\"ctb\"), person(\"Liviu\", \"Andronic\", role=\"ctb\"), person(\"Markus\", \"Loecher\", role=\"ctb\"), person(\"Martin\", \"Gubri\", role=\"ctb\"), person(\"Matthieu\", \"Stigler\", role=\"ctb\"), person(\"Robert\", \"Castelo\", role=\"ctb\"), person(\"Seth\", \"Falcon\", role=\"ctb\"), person(\"Stefan\", \"Edwards\", role=\"ctb\"), person(\"Sven\", \"Garbade\", role=\"ctb\"), person(\"Uwe\", \"Ligges\", role=\"ctb\"))", - "Maintainer": "David Scott ", - "Imports": [ - "stats", - "utils" - ], - "Suggests": [ - "knitr", - "plm", - "zoo", - "survival" - ], - "VignetteBuilder": "knitr", - "Description": "Coerce data to LaTeX and HTML tables.", - "URL": "http://xtable.r-forge.r-project.org/", - "Depends": [ - "R (>= 2.10.0)" - ], - "License": "GPL (>= 2)", - "Repository": "CRAN", - "NeedsCompilation": "no", - "Author": "David B. Dahl [aut], David Scott [aut, cre], Charles Roosen [aut], Arni Magnusson [aut], Jonathan Swinton [aut], Ajay Shah [ctb], Arne Henningsen [ctb], Benno Puetz [ctb], Bernhard Pfaff [ctb], Claudio Agostinelli [ctb], Claudius Loehnert [ctb], David Mitchell [ctb], David Whiting [ctb], Fernando da Rosa [ctb], Guido Gay [ctb], Guido Schulz [ctb], Ian Fellows [ctb], Jeff Laake [ctb], John Walker [ctb], Jun Yan [ctb], Liviu Andronic [ctb], Markus Loecher [ctb], Martin Gubri [ctb], Matthieu Stigler [ctb], Robert Castelo [ctb], Seth Falcon [ctb], Stefan Edwards [ctb], Sven Garbade [ctb], Uwe Ligges [ctb]" - }, - "xts": { - "Package": "xts", - "Version": "0.14.1", - "Source": "Repository", - "Type": "Package", - "Title": "eXtensible Time Series", - "Authors@R": "c( person(given=c(\"Jeffrey\",\"A.\"), family=\"Ryan\", role=c(\"aut\",\"cph\")), person(given=c(\"Joshua\",\"M.\"), family=\"Ulrich\", role=c(\"cre\",\"aut\"), email=\"josh.m.ulrich@gmail.com\"), person(given=\"Ross\", family=\"Bennett\", role=\"ctb\"), person(given=\"Corwin\", family=\"Joy\", role=\"ctb\") )", - "Depends": [ - "R (>= 3.6.0)", - "zoo (>= 1.7-12)" - ], - "Imports": [ - "methods" - ], - "LinkingTo": [ - "zoo" - ], - "Suggests": [ - "timeSeries", - "timeDate", - "tseries", - "chron", - "tinytest" - ], - "LazyLoad": "yes", - "Description": "Provide for uniform handling of R's different time-based data classes by extending zoo, maximizing native format information preservation and allowing for user level customization and extension, while simplifying cross-class interoperability.", - "License": "GPL (>= 2)", - "URL": "https://joshuaulrich.github.io/xts/, https://github.com/joshuaulrich/xts", - "BugReports": "https://github.com/joshuaulrich/xts/issues", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Jeffrey A. Ryan [aut, cph], Joshua M. Ulrich [cre, aut], Ross Bennett [ctb], Corwin Joy [ctb]", - "Maintainer": "Joshua M. Ulrich ", - "Repository": "CRAN" - }, - "yaml": { - "Package": "yaml", - "Version": "2.3.10", - "Source": "Repository", - "Type": "Package", - "Title": "Methods to Convert R Data to YAML and Back", - "Date": "2024-07-22", - "Suggests": [ - "RUnit" - ], - "Author": "Shawn P Garbett [aut], Jeremy Stephens [aut, cre], Kirill Simonov [aut], Yihui Xie [ctb], Zhuoer Dong [ctb], Hadley Wickham [ctb], Jeffrey Horner [ctb], reikoch [ctb], Will Beasley [ctb], Brendan O'Connor [ctb], Gregory R. Warnes [ctb], Michael Quinn [ctb], Zhian N. Kamvar [ctb], Charlie Gao [ctb]", - "Maintainer": "Shawn Garbett ", - "License": "BSD_3_clause + file LICENSE", - "Description": "Implements the 'libyaml' 'YAML' 1.1 parser and emitter () for R.", - "URL": "https://github.com/vubiostat/r-yaml/", - "BugReports": "https://github.com/vubiostat/r-yaml/issues", - "NeedsCompilation": "yes", - "Repository": "CRAN" - }, - "yulab.utils": { - "Package": "yulab.utils", - "Version": "0.2.0", - "Source": "Repository", - "Title": "Supporting Functions for Packages Maintained by 'YuLab-SMU'", - "Authors@R": "c(person(\"Guangchuang\", \"Yu\", email = \"guangchuangyu@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6485-8781\")))", - "Description": "Miscellaneous functions commonly used by 'YuLab-SMU'.", - "Depends": [ - "R (>= 4.2.0)" - ], - "Imports": [ - "cli", - "digest", - "fs", - "rlang", - "tools", - "utils" - ], - "Suggests": [ - "httr2", - "jsonlite", - "openssl", - "rappdirs" - ], - "ByteCompile": "true", - "License": "Artistic-2.0", - "URL": "https://yulab-smu.top/", - "BugReports": "https://github.com/YuLab-SMU/yulab.utils/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Guangchuang Yu [aut, cre] ()", - "Maintainer": "Guangchuang Yu ", - "Repository": "CRAN" - }, - "zip": { - "Package": "zip", - "Version": "2.3.3", - "Source": "Repository", - "Title": "Cross-Platform 'zip' Compression", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Kuba\", \"Podgórski\", role = \"ctb\"), person(\"Rich\", \"Geldreich\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Cross-Platform 'zip' Compression Library. A replacement for the 'zip' function, that does not require any additional external tools on any platform.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/zip, https://r-lib.github.io/zip/", - "BugReports": "https://github.com/r-lib/zip/issues", - "Suggests": [ - "covr", - "pillar", - "processx", - "R6", - "testthat", - "withr" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-05-07", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2.9000", - "NeedsCompilation": "yes", - "Author": "Gábor Csárdi [aut, cre], Kuba Podgórski [ctb], Rich Geldreich [ctb], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "zoo": { - "Package": "zoo", - "Version": "1.8-14", - "Source": "Repository", - "Date": "2025-04-09", - "Title": "S3 Infrastructure for Regular and Irregular Time Series (Z's Ordered Observations)", - "Authors@R": "c(person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")), person(given = \"Gabor\", family = \"Grothendieck\", role = \"aut\", email = \"ggrothendieck@gmail.com\"), person(given = c(\"Jeffrey\", \"A.\"), family = \"Ryan\", role = \"aut\", email = \"jeff.a.ryan@gmail.com\"), person(given = c(\"Joshua\", \"M.\"), family = \"Ulrich\", role = \"ctb\", email = \"josh.m.ulrich@gmail.com\"), person(given = \"Felix\", family = \"Andrews\", role = \"ctb\", email = \"felix@nfrac.org\"))", - "Description": "An S3 class with methods for totally ordered indexed observations. It is particularly aimed at irregular time series of numeric vectors/matrices and factors. zoo's key design goals are independence of a particular index/date/time class and consistency with ts and base R by providing methods to extend standard generics.", - "Depends": [ - "R (>= 3.1.0)", - "stats" - ], - "Suggests": [ - "AER", - "coda", - "chron", - "ggplot2 (>= 3.5.0)", - "mondate", - "scales", - "stinepack", - "strucchange", - "timeDate", - "timeSeries", - "tinyplot", - "tis", - "tseries", - "xts" - ], - "Imports": [ - "utils", - "graphics", - "grDevices", - "lattice (>= 0.20-27)" - ], - "License": "GPL-2 | GPL-3", - "URL": "https://zoo.R-Forge.R-project.org/", - "NeedsCompilation": "yes", - "Author": "Achim Zeileis [aut, cre] (), Gabor Grothendieck [aut], Jeffrey A. Ryan [aut], Joshua M. Ulrich [ctb], Felix Andrews [ctb]", - "Maintainer": "Achim Zeileis ", - "Repository": "CRAN" - } - } -} diff --git a/renv/.gitignore b/renv/.gitignore deleted file mode 100644 index 22a0d01d..00000000 --- a/renv/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -sandbox/ -library/ -local/ -cellar/ -lock/ -python/ -staging/ diff --git a/renv/activate.R b/renv/activate.R deleted file mode 100644 index 90b251ca..00000000 --- a/renv/activate.R +++ /dev/null @@ -1,1334 +0,0 @@ - -local({ - - # the requested version of renv - version <- "1.1.4" - attr(version, "sha") <- NULL - - # the project directory - project <- Sys.getenv("RENV_PROJECT") - if (!nzchar(project)) - project <- getwd() - - # use start-up diagnostics if enabled - diagnostics <- Sys.getenv("RENV_STARTUP_DIAGNOSTICS", unset = "FALSE") - if (diagnostics) { - start <- Sys.time() - profile <- tempfile("renv-startup-", fileext = ".Rprof") - utils::Rprof(profile) - on.exit({ - utils::Rprof(NULL) - elapsed <- signif(difftime(Sys.time(), start, units = "auto"), digits = 2L) - writeLines(sprintf("- renv took %s to run the autoloader.", format(elapsed))) - writeLines(sprintf("- Profile: %s", profile)) - print(utils::summaryRprof(profile)) - }, add = TRUE) - } - - # figure out whether the autoloader is enabled - enabled <- local({ - - # first, check config option - override <- getOption("renv.config.autoloader.enabled") - if (!is.null(override)) - return(override) - - # if we're being run in a context where R_LIBS is already set, - # don't load -- presumably we're being run as a sub-process and - # the parent process has already set up library paths for us - rcmd <- Sys.getenv("R_CMD", unset = NA) - rlibs <- Sys.getenv("R_LIBS", unset = NA) - if (!is.na(rlibs) && !is.na(rcmd)) - return(FALSE) - - # next, check environment variables - # prefer using the configuration one in the future - envvars <- c( - "RENV_CONFIG_AUTOLOADER_ENABLED", - "RENV_AUTOLOADER_ENABLED", - "RENV_ACTIVATE_PROJECT" - ) - - for (envvar in envvars) { - envval <- Sys.getenv(envvar, unset = NA) - if (!is.na(envval)) - return(tolower(envval) %in% c("true", "t", "1")) - } - - # enable by default - TRUE - - }) - - # bail if we're not enabled - if (!enabled) { - - # if we're not enabled, we might still need to manually load - # the user profile here - profile <- Sys.getenv("R_PROFILE_USER", unset = "~/.Rprofile") - if (file.exists(profile)) { - cfg <- Sys.getenv("RENV_CONFIG_USER_PROFILE", unset = "TRUE") - if (tolower(cfg) %in% c("true", "t", "1")) - sys.source(profile, envir = globalenv()) - } - - return(FALSE) - - } - - # avoid recursion - if (identical(getOption("renv.autoloader.running"), TRUE)) { - warning("ignoring recursive attempt to run renv autoloader") - return(invisible(TRUE)) - } - - # signal that we're loading renv during R startup - options(renv.autoloader.running = TRUE) - on.exit(options(renv.autoloader.running = NULL), add = TRUE) - - # signal that we've consented to use renv - options(renv.consent = TRUE) - - # load the 'utils' package eagerly -- this ensures that renv shims, which - # mask 'utils' packages, will come first on the search path - library(utils, lib.loc = .Library) - - # unload renv if it's already been loaded - if ("renv" %in% loadedNamespaces()) - unloadNamespace("renv") - - # load bootstrap tools - ansify <- function(text) { - if (renv_ansify_enabled()) - renv_ansify_enhanced(text) - else - renv_ansify_default(text) - } - - renv_ansify_enabled <- function() { - - override <- Sys.getenv("RENV_ANSIFY_ENABLED", unset = NA) - if (!is.na(override)) - return(as.logical(override)) - - pane <- Sys.getenv("RSTUDIO_CHILD_PROCESS_PANE", unset = NA) - if (identical(pane, "build")) - return(FALSE) - - testthat <- Sys.getenv("TESTTHAT", unset = "false") - if (tolower(testthat) %in% "true") - return(FALSE) - - iderun <- Sys.getenv("R_CLI_HAS_HYPERLINK_IDE_RUN", unset = "false") - if (tolower(iderun) %in% "false") - return(FALSE) - - TRUE - - } - - renv_ansify_default <- function(text) { - text - } - - renv_ansify_enhanced <- function(text) { - - # R help links - pattern <- "`\\?(renv::(?:[^`])+)`" - replacement <- "`\033]8;;x-r-help:\\1\a?\\1\033]8;;\a`" - text <- gsub(pattern, replacement, text, perl = TRUE) - - # runnable code - pattern <- "`(renv::(?:[^`])+)`" - replacement <- "`\033]8;;x-r-run:\\1\a\\1\033]8;;\a`" - text <- gsub(pattern, replacement, text, perl = TRUE) - - # return ansified text - text - - } - - renv_ansify_init <- function() { - - envir <- renv_envir_self() - if (renv_ansify_enabled()) - assign("ansify", renv_ansify_enhanced, envir = envir) - else - assign("ansify", renv_ansify_default, envir = envir) - - } - - `%||%` <- function(x, y) { - if (is.null(x)) y else x - } - - catf <- function(fmt, ..., appendLF = TRUE) { - - quiet <- getOption("renv.bootstrap.quiet", default = FALSE) - if (quiet) - return(invisible()) - - msg <- sprintf(fmt, ...) - cat(msg, file = stdout(), sep = if (appendLF) "\n" else "") - - invisible(msg) - - } - - header <- function(label, - ..., - prefix = "#", - suffix = "-", - n = min(getOption("width"), 78)) - { - label <- sprintf(label, ...) - n <- max(n - nchar(label) - nchar(prefix) - 2L, 8L) - if (n <= 0) - return(paste(prefix, label)) - - tail <- paste(rep.int(suffix, n), collapse = "") - paste0(prefix, " ", label, " ", tail) - - } - - heredoc <- function(text, leave = 0) { - - # remove leading, trailing whitespace - trimmed <- gsub("^\\s*\\n|\\n\\s*$", "", text) - - # split into lines - lines <- strsplit(trimmed, "\n", fixed = TRUE)[[1L]] - - # compute common indent - indent <- regexpr("[^[:space:]]", lines) - common <- min(setdiff(indent, -1L)) - leave - text <- paste(substring(lines, common), collapse = "\n") - - # substitute in ANSI links for executable renv code - ansify(text) - - } - - bootstrap <- function(version, library) { - - friendly <- renv_bootstrap_version_friendly(version) - section <- header(sprintf("Bootstrapping renv %s", friendly)) - catf(section) - - # attempt to download renv - catf("- Downloading renv ... ", appendLF = FALSE) - withCallingHandlers( - tarball <- renv_bootstrap_download(version), - error = function(err) { - catf("FAILED") - stop("failed to download:\n", conditionMessage(err)) - } - ) - catf("OK") - on.exit(unlink(tarball), add = TRUE) - - # now attempt to install - catf("- Installing renv ... ", appendLF = FALSE) - withCallingHandlers( - status <- renv_bootstrap_install(version, tarball, library), - error = function(err) { - catf("FAILED") - stop("failed to install:\n", conditionMessage(err)) - } - ) - catf("OK") - - # add empty line to break up bootstrapping from normal output - catf("") - - return(invisible()) - } - - renv_bootstrap_tests_running <- function() { - getOption("renv.tests.running", default = FALSE) - } - - renv_bootstrap_repos <- function() { - - # get CRAN repository - cran <- getOption("renv.repos.cran", "https://cloud.r-project.org") - - # check for repos override - repos <- Sys.getenv("RENV_CONFIG_REPOS_OVERRIDE", unset = NA) - if (!is.na(repos)) { - - # check for RSPM; if set, use a fallback repository for renv - rspm <- Sys.getenv("RSPM", unset = NA) - if (identical(rspm, repos)) - repos <- c(RSPM = rspm, CRAN = cran) - - return(repos) - - } - - # check for lockfile repositories - repos <- tryCatch(renv_bootstrap_repos_lockfile(), error = identity) - if (!inherits(repos, "error") && length(repos)) - return(repos) - - # retrieve current repos - repos <- getOption("repos") - - # ensure @CRAN@ entries are resolved - repos[repos == "@CRAN@"] <- cran - - # add in renv.bootstrap.repos if set - default <- c(FALLBACK = "https://cloud.r-project.org") - extra <- getOption("renv.bootstrap.repos", default = default) - repos <- c(repos, extra) - - # remove duplicates that might've snuck in - dupes <- duplicated(repos) | duplicated(names(repos)) - repos[!dupes] - - } - - renv_bootstrap_repos_lockfile <- function() { - - lockpath <- Sys.getenv("RENV_PATHS_LOCKFILE", unset = "renv.lock") - if (!file.exists(lockpath)) - return(NULL) - - lockfile <- tryCatch(renv_json_read(lockpath), error = identity) - if (inherits(lockfile, "error")) { - warning(lockfile) - return(NULL) - } - - repos <- lockfile$R$Repositories - if (length(repos) == 0) - return(NULL) - - keys <- vapply(repos, `[[`, "Name", FUN.VALUE = character(1)) - vals <- vapply(repos, `[[`, "URL", FUN.VALUE = character(1)) - names(vals) <- keys - - return(vals) - - } - - renv_bootstrap_download <- function(version) { - - sha <- attr(version, "sha", exact = TRUE) - - methods <- if (!is.null(sha)) { - - # attempting to bootstrap a development version of renv - c( - function() renv_bootstrap_download_tarball(sha), - function() renv_bootstrap_download_github(sha) - ) - - } else { - - # attempting to bootstrap a release version of renv - c( - function() renv_bootstrap_download_tarball(version), - function() renv_bootstrap_download_cran_latest(version), - function() renv_bootstrap_download_cran_archive(version) - ) - - } - - for (method in methods) { - path <- tryCatch(method(), error = identity) - if (is.character(path) && file.exists(path)) - return(path) - } - - stop("All download methods failed") - - } - - renv_bootstrap_download_impl <- function(url, destfile) { - - mode <- "wb" - - # https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17715 - fixup <- - Sys.info()[["sysname"]] == "Windows" && - substring(url, 1L, 5L) == "file:" - - if (fixup) - mode <- "w+b" - - args <- list( - url = url, - destfile = destfile, - mode = mode, - quiet = TRUE - ) - - if ("headers" %in% names(formals(utils::download.file))) { - headers <- renv_bootstrap_download_custom_headers(url) - if (length(headers) && is.character(headers)) - args$headers <- headers - } - - do.call(utils::download.file, args) - - } - - renv_bootstrap_download_custom_headers <- function(url) { - - headers <- getOption("renv.download.headers") - if (is.null(headers)) - return(character()) - - if (!is.function(headers)) - stopf("'renv.download.headers' is not a function") - - headers <- headers(url) - if (length(headers) == 0L) - return(character()) - - if (is.list(headers)) - headers <- unlist(headers, recursive = FALSE, use.names = TRUE) - - ok <- - is.character(headers) && - is.character(names(headers)) && - all(nzchar(names(headers))) - - if (!ok) - stop("invocation of 'renv.download.headers' did not return a named character vector") - - headers - - } - - renv_bootstrap_download_cran_latest <- function(version) { - - spec <- renv_bootstrap_download_cran_latest_find(version) - type <- spec$type - repos <- spec$repos - - baseurl <- utils::contrib.url(repos = repos, type = type) - ext <- if (identical(type, "source")) - ".tar.gz" - else if (Sys.info()[["sysname"]] == "Windows") - ".zip" - else - ".tgz" - name <- sprintf("renv_%s%s", version, ext) - url <- paste(baseurl, name, sep = "/") - - destfile <- file.path(tempdir(), name) - status <- tryCatch( - renv_bootstrap_download_impl(url, destfile), - condition = identity - ) - - if (inherits(status, "condition")) - return(FALSE) - - # report success and return - destfile - - } - - renv_bootstrap_download_cran_latest_find <- function(version) { - - # check whether binaries are supported on this system - binary <- - getOption("renv.bootstrap.binary", default = TRUE) && - !identical(.Platform$pkgType, "source") && - !identical(getOption("pkgType"), "source") && - Sys.info()[["sysname"]] %in% c("Darwin", "Windows") - - types <- c(if (binary) "binary", "source") - - # iterate over types + repositories - for (type in types) { - for (repos in renv_bootstrap_repos()) { - - # build arguments for utils::available.packages() call - args <- list(type = type, repos = repos) - - # add custom headers if available -- note that - # utils::available.packages() will pass this to download.file() - if ("headers" %in% names(formals(utils::download.file))) { - headers <- renv_bootstrap_download_custom_headers(repos) - if (length(headers) && is.character(headers)) - args$headers <- headers - } - - # retrieve package database - db <- tryCatch( - as.data.frame( - do.call(utils::available.packages, args), - stringsAsFactors = FALSE - ), - error = identity - ) - - if (inherits(db, "error")) - next - - # check for compatible entry - entry <- db[db$Package %in% "renv" & db$Version %in% version, ] - if (nrow(entry) == 0) - next - - # found it; return spec to caller - spec <- list(entry = entry, type = type, repos = repos) - return(spec) - - } - } - - # if we got here, we failed to find renv - fmt <- "renv %s is not available from your declared package repositories" - stop(sprintf(fmt, version)) - - } - - renv_bootstrap_download_cran_archive <- function(version) { - - name <- sprintf("renv_%s.tar.gz", version) - repos <- renv_bootstrap_repos() - urls <- file.path(repos, "src/contrib/Archive/renv", name) - destfile <- file.path(tempdir(), name) - - for (url in urls) { - - status <- tryCatch( - renv_bootstrap_download_impl(url, destfile), - condition = identity - ) - - if (identical(status, 0L)) - return(destfile) - - } - - return(FALSE) - - } - - renv_bootstrap_download_tarball <- function(version) { - - # if the user has provided the path to a tarball via - # an environment variable, then use it - tarball <- Sys.getenv("RENV_BOOTSTRAP_TARBALL", unset = NA) - if (is.na(tarball)) - return() - - # allow directories - if (dir.exists(tarball)) { - name <- sprintf("renv_%s.tar.gz", version) - tarball <- file.path(tarball, name) - } - - # bail if it doesn't exist - if (!file.exists(tarball)) { - - # let the user know we weren't able to honour their request - fmt <- "- RENV_BOOTSTRAP_TARBALL is set (%s) but does not exist." - msg <- sprintf(fmt, tarball) - warning(msg) - - # bail - return() - - } - - catf("- Using local tarball '%s'.", tarball) - tarball - - } - - renv_bootstrap_github_token <- function() { - for (envvar in c("GITHUB_TOKEN", "GITHUB_PAT", "GH_TOKEN")) { - envval <- Sys.getenv(envvar, unset = NA) - if (!is.na(envval)) - return(envval) - } - } - - renv_bootstrap_download_github <- function(version) { - - enabled <- Sys.getenv("RENV_BOOTSTRAP_FROM_GITHUB", unset = "TRUE") - if (!identical(enabled, "TRUE")) - return(FALSE) - - # prepare download options - token <- renv_bootstrap_github_token() - if (is.null(token)) - token <- "" - - if (nzchar(Sys.which("curl")) && nzchar(token)) { - fmt <- "--location --fail --header \"Authorization: token %s\"" - extra <- sprintf(fmt, token) - saved <- options("download.file.method", "download.file.extra") - options(download.file.method = "curl", download.file.extra = extra) - on.exit(do.call(base::options, saved), add = TRUE) - } else if (nzchar(Sys.which("wget")) && nzchar(token)) { - fmt <- "--header=\"Authorization: token %s\"" - extra <- sprintf(fmt, token) - saved <- options("download.file.method", "download.file.extra") - options(download.file.method = "wget", download.file.extra = extra) - on.exit(do.call(base::options, saved), add = TRUE) - } - - url <- file.path("https://api.github.com/repos/rstudio/renv/tarball", version) - name <- sprintf("renv_%s.tar.gz", version) - destfile <- file.path(tempdir(), name) - - status <- tryCatch( - renv_bootstrap_download_impl(url, destfile), - condition = identity - ) - - if (!identical(status, 0L)) - return(FALSE) - - renv_bootstrap_download_augment(destfile) - - return(destfile) - - } - - # Add Sha to DESCRIPTION. This is stop gap until #890, after which we - # can use renv::install() to fully capture metadata. - renv_bootstrap_download_augment <- function(destfile) { - sha <- renv_bootstrap_git_extract_sha1_tar(destfile) - if (is.null(sha)) { - return() - } - - # Untar - tempdir <- tempfile("renv-github-") - on.exit(unlink(tempdir, recursive = TRUE), add = TRUE) - untar(destfile, exdir = tempdir) - pkgdir <- dir(tempdir, full.names = TRUE)[[1]] - - # Modify description - desc_path <- file.path(pkgdir, "DESCRIPTION") - desc_lines <- readLines(desc_path) - remotes_fields <- c( - "RemoteType: github", - "RemoteHost: api.github.com", - "RemoteRepo: renv", - "RemoteUsername: rstudio", - "RemotePkgRef: rstudio/renv", - paste("RemoteRef: ", sha), - paste("RemoteSha: ", sha) - ) - writeLines(c(desc_lines[desc_lines != ""], remotes_fields), con = desc_path) - - # Re-tar - local({ - old <- setwd(tempdir) - on.exit(setwd(old), add = TRUE) - - tar(destfile, compression = "gzip") - }) - invisible() - } - - # Extract the commit hash from a git archive. Git archives include the SHA1 - # hash as the comment field of the tarball pax extended header - # (see https://www.kernel.org/pub/software/scm/git/docs/git-archive.html) - # For GitHub archives this should be the first header after the default one - # (512 byte) header. - renv_bootstrap_git_extract_sha1_tar <- function(bundle) { - - # open the bundle for reading - # We use gzcon for everything because (from ?gzcon) - # > Reading from a connection which does not supply a 'gzip' magic - # > header is equivalent to reading from the original connection - conn <- gzcon(file(bundle, open = "rb", raw = TRUE)) - on.exit(close(conn)) - - # The default pax header is 512 bytes long and the first pax extended header - # with the comment should be 51 bytes long - # `52 comment=` (11 chars) + 40 byte SHA1 hash - len <- 0x200 + 0x33 - res <- rawToChar(readBin(conn, "raw", n = len)[0x201:len]) - - if (grepl("^52 comment=", res)) { - sub("52 comment=", "", res) - } else { - NULL - } - } - - renv_bootstrap_install <- function(version, tarball, library) { - - # attempt to install it into project library - dir.create(library, showWarnings = FALSE, recursive = TRUE) - output <- renv_bootstrap_install_impl(library, tarball) - - # check for successful install - status <- attr(output, "status") - if (is.null(status) || identical(status, 0L)) - return(status) - - # an error occurred; report it - header <- "installation of renv failed" - lines <- paste(rep.int("=", nchar(header)), collapse = "") - text <- paste(c(header, lines, output), collapse = "\n") - stop(text) - - } - - renv_bootstrap_install_impl <- function(library, tarball) { - - # invoke using system2 so we can capture and report output - bin <- R.home("bin") - exe <- if (Sys.info()[["sysname"]] == "Windows") "R.exe" else "R" - R <- file.path(bin, exe) - - args <- c( - "--vanilla", "CMD", "INSTALL", "--no-multiarch", - "-l", shQuote(path.expand(library)), - shQuote(path.expand(tarball)) - ) - - system2(R, args, stdout = TRUE, stderr = TRUE) - - } - - renv_bootstrap_platform_prefix_default <- function() { - - # read version component - version <- Sys.getenv("RENV_PATHS_VERSION", unset = "R-%v") - - # expand placeholders - placeholders <- list( - list("%v", format(getRversion()[1, 1:2])), - list("%V", format(getRversion()[1, 1:3])) - ) - - for (placeholder in placeholders) - version <- gsub(placeholder[[1L]], placeholder[[2L]], version, fixed = TRUE) - - # include SVN revision for development versions of R - # (to avoid sharing platform-specific artefacts with released versions of R) - devel <- - identical(R.version[["status"]], "Under development (unstable)") || - identical(R.version[["nickname"]], "Unsuffered Consequences") - - if (devel) - version <- paste(version, R.version[["svn rev"]], sep = "-r") - - version - - } - - renv_bootstrap_platform_prefix <- function() { - - # construct version prefix - version <- renv_bootstrap_platform_prefix_default() - - # build list of path components - components <- c(version, R.version$platform) - - # include prefix if provided by user - prefix <- renv_bootstrap_platform_prefix_impl() - if (!is.na(prefix) && nzchar(prefix)) - components <- c(prefix, components) - - # build prefix - paste(components, collapse = "/") - - } - - renv_bootstrap_platform_prefix_impl <- function() { - - # if an explicit prefix has been supplied, use it - prefix <- Sys.getenv("RENV_PATHS_PREFIX", unset = NA) - if (!is.na(prefix)) - return(prefix) - - # if the user has requested an automatic prefix, generate it - auto <- Sys.getenv("RENV_PATHS_PREFIX_AUTO", unset = NA) - if (is.na(auto) && getRversion() >= "4.4.0") - auto <- "TRUE" - - if (auto %in% c("TRUE", "True", "true", "1")) - return(renv_bootstrap_platform_prefix_auto()) - - # empty string on failure - "" - - } - - renv_bootstrap_platform_prefix_auto <- function() { - - prefix <- tryCatch(renv_bootstrap_platform_os(), error = identity) - if (inherits(prefix, "error") || prefix %in% "unknown") { - - msg <- paste( - "failed to infer current operating system", - "please file a bug report at https://github.com/rstudio/renv/issues", - sep = "; " - ) - - warning(msg) - - } - - prefix - - } - - renv_bootstrap_platform_os <- function() { - - sysinfo <- Sys.info() - sysname <- sysinfo[["sysname"]] - - # handle Windows + macOS up front - if (sysname == "Windows") - return("windows") - else if (sysname == "Darwin") - return("macos") - - # check for os-release files - for (file in c("/etc/os-release", "/usr/lib/os-release")) - if (file.exists(file)) - return(renv_bootstrap_platform_os_via_os_release(file, sysinfo)) - - # check for redhat-release files - if (file.exists("/etc/redhat-release")) - return(renv_bootstrap_platform_os_via_redhat_release()) - - "unknown" - - } - - renv_bootstrap_platform_os_via_os_release <- function(file, sysinfo) { - - # read /etc/os-release - release <- utils::read.table( - file = file, - sep = "=", - quote = c("\"", "'"), - col.names = c("Key", "Value"), - comment.char = "#", - stringsAsFactors = FALSE - ) - - vars <- as.list(release$Value) - names(vars) <- release$Key - - # get os name - os <- tolower(sysinfo[["sysname"]]) - - # read id - id <- "unknown" - for (field in c("ID", "ID_LIKE")) { - if (field %in% names(vars) && nzchar(vars[[field]])) { - id <- vars[[field]] - break - } - } - - # read version - version <- "unknown" - for (field in c("UBUNTU_CODENAME", "VERSION_CODENAME", "VERSION_ID", "BUILD_ID")) { - if (field %in% names(vars) && nzchar(vars[[field]])) { - version <- vars[[field]] - break - } - } - - # join together - paste(c(os, id, version), collapse = "-") - - } - - renv_bootstrap_platform_os_via_redhat_release <- function() { - - # read /etc/redhat-release - contents <- readLines("/etc/redhat-release", warn = FALSE) - - # infer id - id <- if (grepl("centos", contents, ignore.case = TRUE)) - "centos" - else if (grepl("redhat", contents, ignore.case = TRUE)) - "redhat" - else - "unknown" - - # try to find a version component (very hacky) - version <- "unknown" - - parts <- strsplit(contents, "[[:space:]]")[[1L]] - for (part in parts) { - - nv <- tryCatch(numeric_version(part), error = identity) - if (inherits(nv, "error")) - next - - version <- nv[1, 1] - break - - } - - paste(c("linux", id, version), collapse = "-") - - } - - renv_bootstrap_library_root_name <- function(project) { - - # use project name as-is if requested - asis <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT_ASIS", unset = "FALSE") - if (asis) - return(basename(project)) - - # otherwise, disambiguate based on project's path - id <- substring(renv_bootstrap_hash_text(project), 1L, 8L) - paste(basename(project), id, sep = "-") - - } - - renv_bootstrap_library_root <- function(project) { - - prefix <- renv_bootstrap_profile_prefix() - - path <- Sys.getenv("RENV_PATHS_LIBRARY", unset = NA) - if (!is.na(path)) - return(paste(c(path, prefix), collapse = "/")) - - path <- renv_bootstrap_library_root_impl(project) - if (!is.null(path)) { - name <- renv_bootstrap_library_root_name(project) - return(paste(c(path, prefix, name), collapse = "/")) - } - - renv_bootstrap_paths_renv("library", project = project) - - } - - renv_bootstrap_library_root_impl <- function(project) { - - root <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT", unset = NA) - if (!is.na(root)) - return(root) - - type <- renv_bootstrap_project_type(project) - if (identical(type, "package")) { - userdir <- renv_bootstrap_user_dir() - return(file.path(userdir, "library")) - } - - } - - renv_bootstrap_validate_version <- function(version, description = NULL) { - - # resolve description file - # - # avoid passing lib.loc to `packageDescription()` below, since R will - # use the loaded version of the package by default anyhow. note that - # this function should only be called after 'renv' is loaded - # https://github.com/rstudio/renv/issues/1625 - description <- description %||% packageDescription("renv") - - # check whether requested version 'version' matches loaded version of renv - sha <- attr(version, "sha", exact = TRUE) - valid <- if (!is.null(sha)) - renv_bootstrap_validate_version_dev(sha, description) - else - renv_bootstrap_validate_version_release(version, description) - - if (valid) - return(TRUE) - - # the loaded version of renv doesn't match the requested version; - # give the user instructions on how to proceed - dev <- identical(description[["RemoteType"]], "github") - remote <- if (dev) - paste("rstudio/renv", description[["RemoteSha"]], sep = "@") - else - paste("renv", description[["Version"]], sep = "@") - - # display both loaded version + sha if available - friendly <- renv_bootstrap_version_friendly( - version = description[["Version"]], - sha = if (dev) description[["RemoteSha"]] - ) - - fmt <- heredoc(" - renv %1$s was loaded from project library, but this project is configured to use renv %2$s. - - Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile. - - Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library. - ") - catf(fmt, friendly, renv_bootstrap_version_friendly(version), remote) - - FALSE - - } - - renv_bootstrap_validate_version_dev <- function(version, description) { - - expected <- description[["RemoteSha"]] - if (!is.character(expected)) - return(FALSE) - - pattern <- sprintf("^\\Q%s\\E", version) - grepl(pattern, expected, perl = TRUE) - - } - - renv_bootstrap_validate_version_release <- function(version, description) { - expected <- description[["Version"]] - is.character(expected) && identical(expected, version) - } - - renv_bootstrap_hash_text <- function(text) { - - hashfile <- tempfile("renv-hash-") - on.exit(unlink(hashfile), add = TRUE) - - writeLines(text, con = hashfile) - tools::md5sum(hashfile) - - } - - renv_bootstrap_load <- function(project, libpath, version) { - - # try to load renv from the project library - if (!requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) - return(FALSE) - - # warn if the version of renv loaded does not match - renv_bootstrap_validate_version(version) - - # execute renv load hooks, if any - hooks <- getHook("renv::autoload") - for (hook in hooks) - if (is.function(hook)) - tryCatch(hook(), error = warnify) - - # load the project - renv::load(project) - - TRUE - - } - - renv_bootstrap_profile_load <- function(project) { - - # if RENV_PROFILE is already set, just use that - profile <- Sys.getenv("RENV_PROFILE", unset = NA) - if (!is.na(profile) && nzchar(profile)) - return(profile) - - # check for a profile file (nothing to do if it doesn't exist) - path <- renv_bootstrap_paths_renv("profile", profile = FALSE, project = project) - if (!file.exists(path)) - return(NULL) - - # read the profile, and set it if it exists - contents <- readLines(path, warn = FALSE) - if (length(contents) == 0L) - return(NULL) - - # set RENV_PROFILE - profile <- contents[[1L]] - if (!profile %in% c("", "default")) - Sys.setenv(RENV_PROFILE = profile) - - profile - - } - - renv_bootstrap_profile_prefix <- function() { - profile <- renv_bootstrap_profile_get() - if (!is.null(profile)) - return(file.path("profiles", profile, "renv")) - } - - renv_bootstrap_profile_get <- function() { - profile <- Sys.getenv("RENV_PROFILE", unset = "") - renv_bootstrap_profile_normalize(profile) - } - - renv_bootstrap_profile_set <- function(profile) { - profile <- renv_bootstrap_profile_normalize(profile) - if (is.null(profile)) - Sys.unsetenv("RENV_PROFILE") - else - Sys.setenv(RENV_PROFILE = profile) - } - - renv_bootstrap_profile_normalize <- function(profile) { - - if (is.null(profile) || profile %in% c("", "default")) - return(NULL) - - profile - - } - - renv_bootstrap_path_absolute <- function(path) { - - substr(path, 1L, 1L) %in% c("~", "/", "\\") || ( - substr(path, 1L, 1L) %in% c(letters, LETTERS) && - substr(path, 2L, 3L) %in% c(":/", ":\\") - ) - - } - - renv_bootstrap_paths_renv <- function(..., profile = TRUE, project = NULL) { - renv <- Sys.getenv("RENV_PATHS_RENV", unset = "renv") - root <- if (renv_bootstrap_path_absolute(renv)) NULL else project - prefix <- if (profile) renv_bootstrap_profile_prefix() - components <- c(root, renv, prefix, ...) - paste(components, collapse = "/") - } - - renv_bootstrap_project_type <- function(path) { - - descpath <- file.path(path, "DESCRIPTION") - if (!file.exists(descpath)) - return("unknown") - - desc <- tryCatch( - read.dcf(descpath, all = TRUE), - error = identity - ) - - if (inherits(desc, "error")) - return("unknown") - - type <- desc$Type - if (!is.null(type)) - return(tolower(type)) - - package <- desc$Package - if (!is.null(package)) - return("package") - - "unknown" - - } - - renv_bootstrap_user_dir <- function() { - dir <- renv_bootstrap_user_dir_impl() - path.expand(chartr("\\", "/", dir)) - } - - renv_bootstrap_user_dir_impl <- function() { - - # use local override if set - override <- getOption("renv.userdir.override") - if (!is.null(override)) - return(override) - - # use R_user_dir if available - tools <- asNamespace("tools") - if (is.function(tools$R_user_dir)) - return(tools$R_user_dir("renv", "cache")) - - # try using our own backfill for older versions of R - envvars <- c("R_USER_CACHE_DIR", "XDG_CACHE_HOME") - for (envvar in envvars) { - root <- Sys.getenv(envvar, unset = NA) - if (!is.na(root)) - return(file.path(root, "R/renv")) - } - - # use platform-specific default fallbacks - if (Sys.info()[["sysname"]] == "Windows") - file.path(Sys.getenv("LOCALAPPDATA"), "R/cache/R/renv") - else if (Sys.info()[["sysname"]] == "Darwin") - "~/Library/Caches/org.R-project.R/R/renv" - else - "~/.cache/R/renv" - - } - - renv_bootstrap_version_friendly <- function(version, shafmt = NULL, sha = NULL) { - sha <- sha %||% attr(version, "sha", exact = TRUE) - parts <- c(version, sprintf(shafmt %||% " [sha: %s]", substring(sha, 1L, 7L))) - paste(parts, collapse = "") - } - - renv_bootstrap_exec <- function(project, libpath, version) { - if (!renv_bootstrap_load(project, libpath, version)) - renv_bootstrap_run(project, libpath, version) - } - - renv_bootstrap_run <- function(project, libpath, version) { - - # perform bootstrap - bootstrap(version, libpath) - - # exit early if we're just testing bootstrap - if (!is.na(Sys.getenv("RENV_BOOTSTRAP_INSTALL_ONLY", unset = NA))) - return(TRUE) - - # try again to load - if (requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) { - return(renv::load(project = project)) - } - - # failed to download or load renv; warn the user - msg <- c( - "Failed to find an renv installation: the project will not be loaded.", - "Use `renv::activate()` to re-initialize the project." - ) - - warning(paste(msg, collapse = "\n"), call. = FALSE) - - } - - renv_json_read <- function(file = NULL, text = NULL) { - - jlerr <- NULL - - # if jsonlite is loaded, use that instead - if ("jsonlite" %in% loadedNamespaces()) { - - json <- tryCatch(renv_json_read_jsonlite(file, text), error = identity) - if (!inherits(json, "error")) - return(json) - - jlerr <- json - - } - - # otherwise, fall back to the default JSON reader - json <- tryCatch(renv_json_read_default(file, text), error = identity) - if (!inherits(json, "error")) - return(json) - - # report an error - if (!is.null(jlerr)) - stop(jlerr) - else - stop(json) - - } - - renv_json_read_jsonlite <- function(file = NULL, text = NULL) { - text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n") - jsonlite::fromJSON(txt = text, simplifyVector = FALSE) - } - - renv_json_read_patterns <- function() { - - list( - - # objects - list("{", "\t\n\tobject(\t\n\t", TRUE), - list("}", "\t\n\t)\t\n\t", TRUE), - - # arrays - list("[", "\t\n\tarray(\t\n\t", TRUE), - list("]", "\n\t\n)\n\t\n", TRUE), - - # maps - list(":", "\t\n\t=\t\n\t", TRUE), - - # newlines - list("\\u000a", "\n", FALSE) - - ) - - } - - renv_json_read_envir <- function() { - - envir <- new.env(parent = emptyenv()) - - envir[["+"]] <- `+` - envir[["-"]] <- `-` - - envir[["object"]] <- function(...) { - result <- list(...) - names(result) <- as.character(names(result)) - result - } - - envir[["array"]] <- list - - envir[["true"]] <- TRUE - envir[["false"]] <- FALSE - envir[["null"]] <- NULL - - envir - - } - - renv_json_read_remap <- function(object, patterns) { - - # repair names if necessary - if (!is.null(names(object))) { - - nms <- names(object) - for (pattern in patterns) - nms <- gsub(pattern[[2L]], pattern[[1L]], nms, fixed = TRUE) - names(object) <- nms - - } - - # repair strings if necessary - if (is.character(object)) { - for (pattern in patterns) - object <- gsub(pattern[[2L]], pattern[[1L]], object, fixed = TRUE) - } - - # recurse for other objects - if (is.recursive(object)) - for (i in seq_along(object)) - object[i] <- list(renv_json_read_remap(object[[i]], patterns)) - - # return remapped object - object - - } - - renv_json_read_default <- function(file = NULL, text = NULL) { - - # read json text - text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n") - - # convert into something the R parser will understand - patterns <- renv_json_read_patterns() - transformed <- text - for (pattern in patterns) - transformed <- gsub(pattern[[1L]], pattern[[2L]], transformed, fixed = TRUE) - - # parse it - rfile <- tempfile("renv-json-", fileext = ".R") - on.exit(unlink(rfile), add = TRUE) - writeLines(transformed, con = rfile) - json <- parse(rfile, keep.source = FALSE, srcfile = NULL)[[1L]] - - # evaluate in safe environment - result <- eval(json, envir = renv_json_read_envir()) - - # fix up strings if necessary -- do so only with reversible patterns - patterns <- Filter(function(pattern) pattern[[3L]], patterns) - renv_json_read_remap(result, patterns) - - } - - - # load the renv profile, if any - renv_bootstrap_profile_load(project) - - # construct path to library root - root <- renv_bootstrap_library_root(project) - - # construct library prefix for platform - prefix <- renv_bootstrap_platform_prefix() - - # construct full libpath - libpath <- file.path(root, prefix) - - # run bootstrap code - renv_bootstrap_exec(project, libpath, version) - - invisible() - -}) diff --git a/src/RcppExports.o b/src/RcppExports.o index e7b7b227..c45eb19c 100644 Binary files a/src/RcppExports.o and b/src/RcppExports.o differ diff --git a/src/fHMM.dll b/src/fHMM.dll index 7abbe1bb..e26d18e2 100644 Binary files a/src/fHMM.dll and b/src/fHMM.dll differ diff --git a/src/ll.cpp b/src/ll.cpp index 49c7396f..e8c1c5f1 100644 --- a/src/ll.cpp +++ b/src/ll.cpp @@ -27,7 +27,10 @@ double LL_HMM_Rcpp( // 'c' is a neutral constant for numerical stability c = max(phi.col(t - 1)); for (i = 0; i < N; i++) { - phi(i, t) = log(sum(exp(phi.col(t - 1) + log(Gamma.col(i)) - c))) + c + log(allprobs(i,t)); + phi(i, t) = + log(sum(exp(phi.col(t - 1) + log(Gamma.col(i)) - c))) + + c + + log(allprobs(i, t)); } } @@ -63,7 +66,11 @@ double LL_HHMM_Rcpp( // 'c' is a neutral constant for numerical stability c = max(phi.col(t - 1)); for (i = 0; i < M; i++) { - phi(i, t) = log(sum(exp(phi.col(t - 1) + log(Gamma.col(i)) - c))) + c + log_likelihoods(i, t) + log(allprobs(i, t)); + phi(i, t) = + log(sum(exp(phi.col(t - 1) + log(Gamma.col(i)) - c))) + + c + + log_likelihoods(i, t) + + log(allprobs(i, t)); } } diff --git a/src/ll.o b/src/ll.o index f8b07477..7736859f 100644 Binary files a/src/ll.o and b/src/ll.o differ diff --git a/tests/testthat/test-compute_T_star.R b/tests/testthat/test-compute_T_star.R index c0490aba..93f75950 100644 --- a/tests/testthat/test-compute_T_star.R +++ b/tests/testthat/test-compute_T_star.R @@ -20,23 +20,38 @@ test_that("computation of T_star works", { c(236L, 232L, 238L, 226L, 233L, 242L, 243L) ) expect_equal( - compute_T_star(horizon = c(5, 2), period = NA, dates = (as.Date("2022-01-01") - 1:10), seed = 1), + compute_T_star( + horizon = c(5, 2), period = NA, + dates = (as.Date("2022-01-01") - 1:10), seed = 1 + ), c(2L, 2L, 2L, 2L, 2L) ) expect_equal( - compute_T_star(horizon = c(4, NA), period = "w", dates = (as.Date("2022-01-01") - 1:20), seed = 1), + compute_T_star( + horizon = c(4, NA), period = "w", + dates = (as.Date("2022-01-01") - 1:20), seed = 1 + ), c(1L, 7L, 7L, 5L) ) expect_equal( - compute_T_star(horizon = c(6, NA), period = "m", dates = (as.Date("2022-01-01") - 1:100), seed = 1), + compute_T_star( + horizon = c(6, NA), period = "m", + dates = (as.Date("2022-01-01") - 1:100), seed = 1 + ), c(8L, 31L, 30L, 31L) ) expect_equal( - compute_T_star(horizon = c(100, NA), period = "q", dates = (as.Date("2022-01-01") - 1:300), seed = 1), + compute_T_star( + horizon = c(100, NA), period = "q", + dates = (as.Date("2022-01-01") - 1:300), seed = 1 + ), c(25L, 91L, 92L, 92L) ) expect_equal( - compute_T_star(horizon = c(100, NA), period = "y", dates = (as.Date("2022-01-01") - 1:3000), seed = 1), + compute_T_star( + horizon = c(100, NA), period = "y", + dates = (as.Date("2022-01-01") - 1:3000), seed = 1 + ), c(78L, 365L, 365L, 366L, 365L, 365L, 365L, 366L, 365L) ) }) diff --git a/tests/testthat/test-fHMM_parameters.R b/tests/testthat/test-fHMM_parameters.R index 22474363..0b9dee9d 100644 --- a/tests/testthat/test-fHMM_parameters.R +++ b/tests/testthat/test-fHMM_parameters.R @@ -28,11 +28,14 @@ test_that("input checks for parameter transformations work", { "'mu' must be a positive numeric vector of length 2" ) expect_error( - fHMM_parameters(hierarchy = TRUE, Gamma_star = matrix(1:4,2,2)), + fHMM_parameters(hierarchy = TRUE, Gamma_star = matrix(1:4, 2, 2)), "'Gamma_star' must be a list of length 2" ) expect_error( - fHMM_parameters(hierarchy = TRUE, Gamma_star = list(matrix(1:4,2,2), matrix(1:4,2,2))), + fHMM_parameters( + hierarchy = TRUE, + Gamma_star = list(matrix(1:4, 2, 2), matrix(1:4, 2, 2)) + ), "Must have values between 0 and 1." ) expect_error( @@ -52,15 +55,25 @@ test_that("input checks for parameter transformations work", { "Element 1 in 'sigma_star' must be a positive numeric vector of length 2" ) expect_error( - fHMM_parameters(hierarchy = TRUE, sdds = c("t", "t"), df_star = c(-1, -2)), + fHMM_parameters( + hierarchy = TRUE, sdds = c("t", "t"), df_star = c(-1, -2) + ), "'df_star' must be a list of length 2" ) expect_error( - fHMM_parameters(hierarchy = TRUE, sdds = c("t", "t"), df_star = list(c(1, 1), c(1,-1))), + fHMM_parameters( + hierarchy = TRUE, + sdds = c("t", "t"), + df_star = list(c(1, 1), c(1, -1)) + ), "Element 2 in 'df_star' must be a positive numeric vector of length 2" ) expect_error( - fHMM_parameters(hierarchy = TRUE, sdds = c("gamma", "gamma"), mu_star = list(c(1, 1), c(1,-1))), + fHMM_parameters( + hierarchy = TRUE, + sdds = c("gamma", "gamma"), + mu_star = list(c(1, 1), c(1, -1)) + ), "Element 2 in 'mu_star' must be a positive numeric vector of length 2" ) @@ -81,19 +94,43 @@ test_that("parameter transformations for HMM work", { parCon <- parUncon2parCon(parUncon, controls) par2 <- parCon2par(parCon, controls) expect_equal(par, par2) - expect_equal(par, parUncon2par(parCon2parUncon(par2parCon(par, controls), controls), controls)) + expect_equal( + par, + parUncon2par( + parCon2parUncon(par2parCon(par, controls), controls), + controls + ) + ) ### fixed mu controls <- set_controls(list("sdds" = "t(mu = 1)")) par <- fHMM_parameters(controls, seed = 1) - expect_equal(par, parUncon2par(parCon2parUncon(par2parCon(par, controls), controls), controls)) + expect_equal( + par, + parUncon2par( + parCon2parUncon(par2parCon(par, controls), controls), + controls + ) + ) ### fixed sigma controls <- set_controls(list("sdds" = "gamma(sigma = 1)")) par <- fHMM_parameters(controls, seed = 1) - expect_equal(par, parUncon2par(parCon2parUncon(par2parCon(par, controls), controls), controls)) + expect_equal( + par, + parUncon2par( + parCon2parUncon(par2parCon(par, controls), controls), + controls + ) + ) ### fixed df controls <- set_controls(list("sdds" = "t(df = Inf)")) par <- fHMM_parameters(controls, seed = 1) - expect_equal(par, parUncon2par(parCon2parUncon(par2parCon(par, controls), controls), controls)) + expect_equal( + par, + parUncon2par( + parCon2parUncon(par2parCon(par, controls), controls), + controls + ) + ) }) test_that("parameter transformations for HHMM work", { @@ -104,7 +141,13 @@ test_that("parameter transformations for HHMM work", { parCon <- parUncon2parCon(parUncon, controls) par2 <- parCon2par(parCon, controls) expect_equal(par, par2) - expect_equal(par, parUncon2par(parCon2parUncon(par2parCon(par, controls), controls), controls)) + expect_equal( + par, + parUncon2par( + parCon2parUncon(par2parCon(par, controls), controls), + controls + ) + ) ### fixed mu controls <- set_controls(list( "hierarchy" = TRUE, @@ -199,15 +242,59 @@ test_that("Gamma transformations work", { Gamma, prefix = "gammasCon_", exclude_diagonal = TRUE ) colnames(Gamma) <- rownames(Gamma) <- paste0("state_", 1:dim) - expect_equal(Gamma, gammasCon2Gamma(Gamma2gammasCon(Gamma), dim = dim)) - expect_equal(gammasCon, Gamma2gammasCon(gammasCon2Gamma(gammasCon, dim = dim))) - expect_equal(Gamma, gammasUncon2Gamma(Gamma2gammasUncon(Gamma), dim = dim)) - expect_equal(gammasUncon, Gamma2gammasUncon(gammasUncon2Gamma(gammasUncon, dim = dim))) - expect_equal(gammasCon, gammasUncon2gammasCon(gammasCon2gammasUncon(gammasCon, dim = dim), dim = dim)) - expect_equal(gammasUncon, gammasCon2gammasUncon(gammasUncon2gammasCon(gammasUncon, dim = dim), dim = dim)) - expect_equal(Gamma, gammasUncon2Gamma(gammasCon2gammasUncon(Gamma2gammasCon(Gamma), dim = dim), dim = dim)) - expect_equal(gammasCon, Gamma2gammasCon(gammasUncon2Gamma(gammasCon2gammasUncon(gammasCon, dim = dim), dim = dim))) - expect_equal(gammasUncon, gammasCon2gammasUncon(Gamma2gammasCon(gammasUncon2Gamma(gammasUncon, dim = dim)), dim = dim)) + expect_equal( + Gamma, + gammasCon2Gamma(Gamma2gammasCon(Gamma), dim = dim) + ) + expect_equal( + gammasCon, + Gamma2gammasCon(gammasCon2Gamma(gammasCon, dim = dim)) + ) + expect_equal( + Gamma, + gammasUncon2Gamma(Gamma2gammasUncon(Gamma), dim = dim) + ) + expect_equal( + gammasUncon, + Gamma2gammasUncon(gammasUncon2Gamma(gammasUncon, dim = dim)) + ) + expect_equal( + gammasCon, + gammasUncon2gammasCon( + gammasCon2gammasUncon(gammasCon, dim = dim), + dim = dim + ) + ) + expect_equal( + gammasUncon, + gammasCon2gammasUncon( + gammasUncon2gammasCon(gammasUncon, dim = dim), + dim = dim + ) + ) + expect_equal( + Gamma, + gammasUncon2Gamma( + gammasCon2gammasUncon(Gamma2gammasCon(Gamma), dim = dim), + dim = dim + ) + ) + expect_equal( + gammasCon, + Gamma2gammasCon( + gammasUncon2Gamma( + gammasCon2gammasUncon(gammasCon, dim = dim), + dim = dim + ) + ) + ) + expect_equal( + gammasUncon, + gammasCon2gammasUncon( + Gamma2gammasCon(gammasUncon2Gamma(gammasUncon, dim = dim)), + dim = dim + ) + ) delta <- oeli::stationary_distribution(Gamma) expect_equal(unname(delta), as.numeric(delta %*% Gamma)) }) diff --git a/vignettes/fHMM-decoded-ts-1.png b/vignettes/fHMM-decoded-ts-1.png deleted file mode 100644 index f5437153..00000000 Binary files a/vignettes/fHMM-decoded-ts-1.png and /dev/null differ diff --git a/vignettes/fHMM-events-1.png b/vignettes/fHMM-events-1.png deleted file mode 100644 index 392401c8..00000000 Binary files a/vignettes/fHMM-events-1.png and /dev/null differ diff --git a/vignettes/fHMM-plot-lls-1.png b/vignettes/fHMM-plot-lls-1.png deleted file mode 100644 index 81da7040..00000000 Binary files a/vignettes/fHMM-plot-lls-1.png and /dev/null differ diff --git a/vignettes/fHMM-plot-res-1.png b/vignettes/fHMM-plot-res-1.png deleted file mode 100644 index d26adb99..00000000 Binary files a/vignettes/fHMM-plot-res-1.png and /dev/null differ diff --git a/vignettes/fHMM-plot-sdds-1.png b/vignettes/fHMM-plot-sdds-1.png deleted file mode 100644 index e8be873e..00000000 Binary files a/vignettes/fHMM-plot-sdds-1.png and /dev/null differ diff --git a/vignettes/v01_model_definition.Rmd b/vignettes/v01_model_definition.Rmd index abc1d812..6a8cf547 100644 --- a/vignettes/v01_model_definition.Rmd +++ b/vignettes/v01_model_definition.Rmd @@ -17,11 +17,11 @@ knitr::opts_chunk$set( ) ``` -The `{fHMM}` package is an implementation of the hidden Markov model with a focus on applications to financial time series data. This vignette^[This vignette was build using R `r paste(R.Version()[c("major", "minor")], collapse = ".")` with the `{fHMM}` `r utils::packageVersion("fHMM")` package.] introduces the model and its hierarchical extension. It closely follows @oel21. +The `{fHMM}` package is an implementation of the hidden Markov model with a focus on applications to financial time series data. This vignette^[This vignette was built using R `r paste(R.Version()[c("major", "minor")], collapse = ".")` with the `{fHMM}` `r utils::packageVersion("fHMM")` package.] introduces the model and its hierarchical extension. It closely follows @oel21. ## The Hidden Markov Model -Hidden Markov models (HMMs) are a modeling framework for time series data where a sequence of observation is assumed to depend on a latent state process. The peculiarity is that, instead of the observation process, the state process cannot be directly observed. However, the latent states comprise information about the environment the model is applied on. +Hidden Markov models (HMMs) are a modeling framework for time series data where a sequence of observations is assumed to depend on a latent state process. The peculiarity is that, instead of the observation process, the state process cannot be directly observed. However, the latent states comprise information about the environment to which the model is applied. The connection between hidden state process and observed state-dependent process arises by the following: Let $N$ be the number of possible states. We assume that for each point in time $t = 1, \ldots, T$, an underlying process $(S_t)_{t = 1, \ldots, T}$ selects one of those $N$ states. Then, depending on the active state $S_t \in \{ 1, \ldots, N \}$, the observation $X_t$ from the state-dependent process $(X_t)_{t = 1, \ldots, T}$ is generated by one of $N$ distributions $f^{(1)},\dots,f^{(N)}.$^[The package includes the normal- and t-distribution for modeling log-returns and the gamma distribution for modeling absolute quantities like trading volume. Additionally, log-normal distributions can be specified.] @@ -36,11 +36,11 @@ additionally the Markov process is aperiodic, its state distribution converges t ## Adding a Hierarchical Structure -The hierarchical hidden Markov model (HMMM) is a flexible extension of the HMM that can jointly model data observed on two different time scales. The two time series, one on a coarser and one on a finer scale, differ in the number of observations, e.g. monthly observations on the coarser scale and daily or weekly observations on the finer scale. +The hierarchical hidden Markov model (HHMM) is a flexible extension of the HMM that can jointly model data observed on two different time scales. The two time series, one on a coarser and one on a finer scale, differ in the number of observations, e.g. monthly observations on the coarser scale and daily or weekly observations on the finer scale. Following the concept of HMMs, we can model both state-dependent time series jointly. First, we treat the time series on the coarser scale as stemming from an ordinary HMM, which we refer to as the coarse-scale HMM: At each time point $t$ of the coarse-scale time space $\{1,\dots,T\}$, an underlying process $(S_t)_t$ selects one state from the coarse-scale state space $\{1,\dots,N\}$. We call $(S_t)_t$ the hidden coarse-scale state process. Depending on which state is active at $t$, one of $N$ distributions $f^{(1)},\dots,f^{(N)}$ realizes the observation $X_t$. The process $(X_t)_t$ is called the observed coarse-scale state-dependent process. The processes $(S_t)_t$ and $(X_t)_t$ have the same properties as before, namely $(S_t)_t$ is a first-order Markov process and $(X_t)_t$ satisfies the conditional independence assumption. -Subsequently, we segment the observations of the fine-scale time series into $T$ distinct chunks, each of which contains all data points that correspond to the $t$-th coarse-scale time point. Assuming that we have $T^*$ fine-scale observations on every coarse-scale time point, we face $T$ chunks comprising of $T^*$ fine-scale observations each. +Subsequently, we segment the observations of the fine-scale time series into $T$ distinct chunks, each of which contains all data points that correspond to the $t$-th coarse-scale time point. Assuming that we have $T^*$ fine-scale observations on every coarse-scale time point, we face $T$ chunks comprising $T^*$ fine-scale observations each. The hierarchical structure now evinces itself as we model each of the chunks by one of $N$ possible fine-scale HMMs. Each of the fine-scale HMMs has its own t.p.m.\ $\Gamma^{*(i)}$, initial distribution $\delta^{*(i)}$, stationary distribution $\pi^{*(i)}$, and state-dependent distributions $f^{*(i,1)},\dots,f^{*(i,N^*)}$. Which fine-scale HMM is selected to explain the $t$-th chunk of fine-scale observations depends on the hidden coarse-scale state $S_t$. The $i$-th fine-scale HMM explaining the $t$-th chunk of fine-scale observations consists of the following two stochastic processes: At each time point $t^*$ of the fine-scale time space $\{1,\dots,T^*\}$, the process $(S^*_{t,t^*})_{t^*}$ selects one state from the fine-scale state space $\{1,\dots,N^*\}$. We call $(S^*_{t,t^*})_{t^*}$ the hidden fine-scale state process. Depending on which state is active at $t^*$, one of $N^*$ distributions $f^{*(i,1)},\dots,f^{*(i,N^*)}$ realizes the observation $X^*_{t,t^*}$. The process $(X^*_{t,t^*})_{t^*}$ is called the observed fine-scale state-dependent process. diff --git a/vignettes/v02_controls.Rmd b/vignettes/v02_controls.Rmd index 3fcb4089..c5d5afe6 100644 --- a/vignettes/v02_controls.Rmd +++ b/vignettes/v02_controls.Rmd @@ -17,7 +17,7 @@ knitr::opts_chunk$set( ) ``` -The `{fHMM}` package allows for multiple hidden Markov model specifications, including different data transformations, state-dependent distributions, and a hierarchical model structure. This vignette^[This vignette was build using R `r paste(R.Version()[c("major", "minor")], collapse = ".")` with the `{fHMM}` `r utils::packageVersion("fHMM")` package.] outlines what and how specifications are possible. +The `{fHMM}` package allows for multiple hidden Markov model specifications, including different data transformations, state-dependent distributions, and a hierarchical model structure. This vignette^[This vignette was built using R `r paste(R.Version()[c("major", "minor")], collapse = ".")` with the `{fHMM}` `r utils::packageVersion("fHMM")` package.] outlines what and how specifications are possible. We first load the package via the familiar `library()` call: diff --git a/vignettes/v03_data_management.Rmd b/vignettes/v03_data_management.Rmd index 92e2081e..f90d2653 100644 --- a/vignettes/v03_data_management.Rmd +++ b/vignettes/v03_data_management.Rmd @@ -21,11 +21,11 @@ knitr::opts_chunk$set( library("fHMM") ``` -This vignette^[This vignette was build using R `r paste(R.Version()[c("major", "minor")], collapse = ".")` with the `{fHMM}` `r utils::packageVersion("fHMM")` package.] explains how to prepare or simulate data in `{fHMM}` for estimation. +This vignette^[This vignette was built using R `r paste(R.Version()[c("major", "minor")], collapse = ".")` with the `{fHMM}` `r utils::packageVersion("fHMM")` package.] explains how to prepare or simulate data in `{fHMM}` for estimation. ## Empirical data -Empirical data can be provided either as a `data.frame` or as a comma-separated values (.csv) file, see [the vignette on specifying the controls](https://loelschlaeger.de/fHMM/articles/v02_controls.html) for details.^[The `download_data()` function explained below provides a convenient tool for downloading stock data from .] The `{fHMM}` package comes with a dataset of the Deutscher Aktienindex for demonstration purpose that can be accessed as follows: +Empirical data can be provided either as a `data.frame` or as a comma-separated values (.csv) file, see [the vignette on specifying the controls](https://loelschlaeger.de/fHMM/articles/v02_controls.html) for details.^[The `download_data()` function explained below provides a convenient tool for downloading stock data from .] The `{fHMM}` package comes with a dataset of the Deutscher Aktienindex for demonstration purposes that can be accessed as follows: ```{r, head dax, results = FALSE} system.file("extdata", "dax.csv", package = "fHMM") @@ -37,10 +37,12 @@ The `prepare_data()` function prepares the data based on the `data` controls spe controls <- list( states = 3, sdds = "t", - data = list(file = system.file("extdata", "dax.csv", package = "fHMM"), - date_column = "Date", - data_column = "Close", - logreturns = TRUE) + data = list( + file = system.file("extdata", "dax.csv", package = "fHMM"), + date_column = "Date", + data_column = "Close", + logreturns = TRUE + ) ) controls <- set_controls(controls) data <- prepare_data(controls) @@ -77,10 +79,14 @@ Historical events can be highlighted by specifying a named list `events` with el ```{r, events} events <- fHMM:::fHMM_events( list( - dates = c("2001-09-11","2008-09-15","2020-01-27"), - labels = c("9/11 terrorist attack","Bankruptcy of Lehman Brothers","First COVID-19 case in Germany") + dates = c("2001-09-11", "2008-09-15", "2020-01-27"), + labels = c( + "9/11 terrorist attack", + "Bankruptcy of Lehman Brothers", + "First COVID-19 case in Germany" ) ) +) print(events) plot(data, events = events) ``` diff --git a/vignettes/v04_model_estimation.Rmd b/vignettes/v04_model_estimation.Rmd index 8f72f364..3fad180a 100644 --- a/vignettes/v04_model_estimation.Rmd +++ b/vignettes/v04_model_estimation.Rmd @@ -21,11 +21,11 @@ knitr::opts_chunk$set( library("fHMM") ``` -The `{fHMM}` package fits a hidden Markov model via the maximum-likelihood method, i.e. by numerically maximizing the likelihood function. This vignette^[This vignette was build using R `r paste(R.Version()[c("major", "minor")], collapse = ".")` with the `{fHMM}` `r utils::packageVersion("fHMM")` package.] derives the likelihood formula, discusses challenges associated with the likelihood maximization and presents the model estimation workflow. +The `{fHMM}` package fits a hidden Markov model via the maximum-likelihood method, i.e. by numerically maximizing the likelihood function. This vignette^[This vignette was built using R `r paste(R.Version()[c("major", "minor")], collapse = ".")` with the `{fHMM}` `r utils::packageVersion("fHMM")` package.] derives the likelihood formula, discusses challenges associated with the likelihood maximization and presents the model estimation workflow. ## Likelihood evaluation using the forward algorithm -Deriving the likelihood function of an hidden Markov model is part of the hierarchical case, hence the following only discusses the general case. +Deriving the likelihood function of a hidden Markov model is part of the hierarchical case; hence, the following only discusses the general case. An HHMM can be treated as an HMM with two conditionally independent data streams; the coarse-scale observations on the one hand and the corresponding chunk of fine-scale observations connected to a fine-scale HMM on the other hand. To derive the likelihood of an HHMM, we start by computing the likelihood of each chunk of fine-scale observations being generated by each fine-scale HMM. @@ -81,12 +81,14 @@ For illustration, we fit a 3-state HMM with state-dependent t-distributions to t controls <- list( states = 3, sdds = "t", - data = list(file = system.file("extdata", "dax.csv", package = "fHMM"), - date_column = "Date", - data_column = "Close", - from = "2000-01-01", - to = "2021-12-31", - logreturns = TRUE), + data = list( + file = system.file("extdata", "dax.csv", package = "fHMM"), + date_column = "Date", + data_column = "Close", + from = "2000-01-01", + to = "2021-12-31", + logreturns = TRUE + ), fit = list("runs" = 100) ) controls <- set_controls(controls) diff --git a/vignettes/v05_state_decoding_and_prediction.Rmd b/vignettes/v05_state_decoding_and_prediction.Rmd index 90aade7c..3bdfe06a 100644 --- a/vignettes/v05_state_decoding_and_prediction.Rmd +++ b/vignettes/v05_state_decoding_and_prediction.Rmd @@ -21,11 +21,11 @@ knitr::opts_chunk$set( library("fHMM") ``` -This vignette^[This vignette was build using R `r paste(R.Version()[c("major", "minor")], collapse = ".")` with the `{fHMM}` `r utils::packageVersion("fHMM")` package.] introduces the Viterbi algorithm for state decoding. The decoded state sequence in combination with the estimated model parameters can be used for forecasting. +This vignette^[This vignette was built using R `r paste(R.Version()[c("major", "minor")], collapse = ".")` with the `{fHMM}` `r utils::packageVersion("fHMM")` package.] introduces the Viterbi algorithm for state decoding. The decoded state sequence in combination with the estimated model parameters can be used for forecasting. ## State decoding using the Viterbi algorithm -For financial markets, it is of special interest to infer the underlying (hidden) states in order to gain insight about the actual market situation. Decoding a full time series $S_1, \ldots, S_T$ is called *global decoding*. Hereby, we aim to find the most likely trajectory of hidden states under the estimated model. +For financial markets, it is of special interest to infer the underlying (hidden) states in order to gain insight about the actual market situation. Decoding a full time series $S_1, \ldots, S_T$ is called *global decoding*. Here, we aim to find the most likely trajectory of hidden states under the estimated model. Global decoding can be accomplished by using the so-called Viterbi algorithm which is a recursive scheme enabling to find the global maximum without being confronted with huge computational costs. To this end, we follow @zuc16 and define $$\zeta_{1i} = Pr(S_1 = i, X_1 = x_1) = \delta_i p_i(x_1)$$ for $i = 1, \ldots, N$ and for the following $t = 2, \ldots, T$ @@ -33,7 +33,7 @@ $$\zeta_{ti} = \operatorname*{max}_{s_1, \ldots, s_{t-1}} Pr(S_{t-1} = s_{t-1}, Then, the trajectory of most likely states $i_1, \ldots, i_T$ can be calculated recursively from $$i_T = \operatorname*{argmax}_{i = 1, \ldots, N} \zeta_{Ti}$$ and for the following $t = T-1, \ldots, 1$ from $$i_t = \operatorname*{argmax}_{i = 1, \ldots, N} (\zeta_{ti} \gamma_{i, i_{t+1}}).$$ -Transferring the state decoding to HHMMs is straightforward: at first the coarse-scale state process must be decoded. Afterwards, by using this information the fine-scale state process can be decoded, see @ada19. +Transferring the state decoding to HHMMs is straightforward: first, the coarse-scale state process must be decoded. Afterwards, this information can be used to decode the fine-scale state process, see @ada19. ## The `decode_states()` function @@ -55,7 +55,7 @@ We now can visualize the decoded time series: plot(dax_model_3t) ``` -## Invariance towards state labelling +## Invariance Toward State Labeling Mind that the model is invariant to permutations of the state labels. Therefore, `{fHMM}` provides the option to switch labels after decoding via the `reorder_states()` function, for example: diff --git a/vignettes/v06_model_checking.Rmd b/vignettes/v06_model_checking.Rmd index 4a27a491..ebb1a59f 100644 --- a/vignettes/v06_model_checking.Rmd +++ b/vignettes/v06_model_checking.Rmd @@ -21,7 +21,7 @@ knitr::opts_chunk$set( library("fHMM") ``` -This vignette^[This vignette was build using R `r paste(R.Version()[c("major", "minor")], collapse = ".")` with the `{fHMM}` `r utils::packageVersion("fHMM")` package.] discusses model checking in `{fHMM}`, that means the task of verifying whether the fitted model describes the data well. +This vignette^[This vignette was built using R `r paste(R.Version()[c("major", "minor")], collapse = ".")` with the `{fHMM}` `r utils::packageVersion("fHMM")` package.] discusses model checking in `{fHMM}`, that means the task of verifying whether the fitted model describes the data well. ## Model checking using pseudo-residuals @@ -57,7 +57,7 @@ The residuals can be visualized as follows: plot(dax_model_3t, plot_type = "pr") ``` -For additional normality tests, the residuals can be extracted from the `model` object via the `residuals()` method. The following lines exemplary perform a [Jarque–Bera test](https://en.wikipedia.org/wiki/Jarque%E2%80%93Bera_test) [@jar87]: +For additional normality tests, the residuals can be extracted from the `model` object via the `residuals()` method. The following lines perform a [Jarque–Bera test](https://en.wikipedia.org/wiki/Jarque%E2%80%93Bera_test) as an example [@jar87]: ```{r, message=FALSE} tseries::jarque.bera.test(residuals(dax_model_3t)) diff --git a/vignettes/v07_model_selection.Rmd b/vignettes/v07_model_selection.Rmd index a91552f3..8cf6b290 100644 --- a/vignettes/v07_model_selection.Rmd +++ b/vignettes/v07_model_selection.Rmd @@ -21,7 +21,7 @@ knitr::opts_chunk$set( library("fHMM") ``` -Model selection involves the choice of a family for the state-dependent distribution and the selection of the number of states. This vignette^[This vignette was build using R `r paste(R.Version()[c("major", "minor")], collapse = ".")` with the `{fHMM}` `r utils::packageVersion("fHMM")` package.] introduces model selection in `{fHMM}`. +Model selection involves the choice of a family for the state-dependent distribution and the selection of the number of states. This vignette^[This vignette was built using R `r paste(R.Version()[c("major", "minor")], collapse = ".")` with the `{fHMM}` `r utils::packageVersion("fHMM")` package.] introduces model selection in `{fHMM}`. ## Information criteria @@ -39,7 +39,7 @@ where $T$ is the total number of observations. ## Challenges associated with model selection -In practice, however, information criteria often favor overly complex models. Real data typically exhibit more structure than can actually be captured by the model. This can be the case if the true state-dependent distributions are too complex to be fully modeled by some (rather simple) parametric distribution, or if certain temporal patterns are neglected in the model formulation. Additional states may be able to capture this structure, which can lead to an increased goodness of fit that outweighs the higher model complexity. However, as models with too many states are difficult to interpret and are therefore often not desired, information criteria should be treaten with some caution and only considered as a rough guidance. For an in-depth discussion of pitfalls, practical challenges, and pragmatic solutions regarding model selection, see @poh17. +In practice, however, information criteria often favor overly complex models. Real data typically exhibit more structure than can actually be captured by the model. This can be the case if the true state-dependent distributions are too complex to be fully modeled by some (rather simple) parametric distribution, or if certain temporal patterns are neglected in the model formulation. Additional states may be able to capture this structure, which can lead to an increased goodness of fit that outweighs the higher model complexity. However, as models with too many states are difficult to interpret and are therefore often not desired, information criteria should be treated with some caution and only considered as a rough guidance. For an in-depth discussion of pitfalls, practical challenges, and pragmatic solutions regarding model selection, see @poh17. ## The `compare_models()` function