mirror of
https://github.com/agdamsbo/FreesearchR.git
synced 2025-09-12 09:59:39 +02:00
modifications to ui and using DT for tables
This commit is contained in:
parent
c06d887c24
commit
15fe4ca188
16 changed files with 567 additions and 128 deletions
|
@ -26,7 +26,10 @@ Imports:
|
||||||
REDCapCAST,
|
REDCapCAST,
|
||||||
purrr,
|
purrr,
|
||||||
broom,
|
broom,
|
||||||
broom.helpers
|
broom.helpers,
|
||||||
|
cardx,
|
||||||
|
parameters,
|
||||||
|
DT
|
||||||
Suggests:
|
Suggests:
|
||||||
styler,
|
styler,
|
||||||
devtools,
|
devtools,
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# Generated by roxygen2: do not edit by hand
|
# Generated by roxygen2: do not edit by hand
|
||||||
|
|
||||||
|
S3method(regression_table,list)
|
||||||
|
S3method(regression_table,webresearch_model)
|
||||||
export(argsstring2list)
|
export(argsstring2list)
|
||||||
export(baseline_table)
|
export(baseline_table)
|
||||||
export(default_format_arguments)
|
export(default_format_arguments)
|
||||||
|
@ -8,11 +10,12 @@ export(format_writer)
|
||||||
export(getfun)
|
export(getfun)
|
||||||
export(index_embed)
|
export(index_embed)
|
||||||
export(modify_qmd)
|
export(modify_qmd)
|
||||||
export(panel_space)
|
|
||||||
export(read_input)
|
export(read_input)
|
||||||
export(regression_model)
|
export(regression_model)
|
||||||
|
export(regression_model_uv)
|
||||||
export(regression_table)
|
export(regression_table)
|
||||||
export(shiny_webResearch)
|
export(shiny_webResearch)
|
||||||
export(specify_qmd_format)
|
export(specify_qmd_format)
|
||||||
|
export(tbl_merge)
|
||||||
export(write_quarto)
|
export(write_quarto)
|
||||||
importFrom(stats,as.formula)
|
importFrom(stats,as.formula)
|
||||||
|
|
|
@ -118,7 +118,11 @@ dummy_Imports <- function() {
|
||||||
MASS::as.fractions(),
|
MASS::as.fractions(),
|
||||||
broom::augment(),
|
broom::augment(),
|
||||||
broom.helpers::all_categorical(),
|
broom.helpers::all_categorical(),
|
||||||
here::here()
|
here::here(),
|
||||||
|
cardx::all_of(),
|
||||||
|
parameters::ci(),
|
||||||
|
DT::addRow(),
|
||||||
|
bslib::accordion()
|
||||||
)
|
)
|
||||||
#https://github.com/hadley/r-pkgs/issues/828
|
#https://github.com/hadley/r-pkgs/issues/828
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#' Print a flexible baseline characteristics table
|
#' Create a regression model programatically
|
||||||
#'
|
#'
|
||||||
#' @param data data set
|
#' @param data data set
|
||||||
#' @param fun Name of function as character vector or function to use for model creation.
|
#' @param fun Name of function as character vector or function to use for model creation.
|
||||||
|
@ -7,6 +7,7 @@
|
||||||
#' @param auto.mode Make assumptions on function dependent on outcome data format. Overwrites other arguments.
|
#' @param auto.mode Make assumptions on function dependent on outcome data format. Overwrites other arguments.
|
||||||
#' @param formula.str Formula as string. Passed through 'glue::glue'. If given, 'outcome.str' and 'vars' are ignored. Optional.
|
#' @param formula.str Formula as string. Passed through 'glue::glue'. If given, 'outcome.str' and 'vars' are ignored. Optional.
|
||||||
#' @param args.list List of arguments passed to 'fun' with 'do.call'.
|
#' @param args.list List of arguments passed to 'fun' with 'do.call'.
|
||||||
|
#' @param ... ignored for now
|
||||||
#'
|
#'
|
||||||
#' @importFrom stats as.formula
|
#' @importFrom stats as.formula
|
||||||
#'
|
#'
|
||||||
|
@ -36,7 +37,8 @@ regression_model <- function(data,
|
||||||
formula.str = NULL,
|
formula.str = NULL,
|
||||||
args.list = NULL,
|
args.list = NULL,
|
||||||
fun = NULL,
|
fun = NULL,
|
||||||
vars = NULL) {
|
vars = NULL,
|
||||||
|
...) {
|
||||||
if (!is.null(formula.str)) {
|
if (!is.null(formula.str)) {
|
||||||
if (formula.str == "") {
|
if (formula.str == "") {
|
||||||
formula.str <- NULL
|
formula.str <- NULL
|
||||||
|
@ -61,9 +63,18 @@ regression_model <- function(data,
|
||||||
|
|
||||||
# Formatting character variables as factor
|
# Formatting character variables as factor
|
||||||
# Improvement should add a missing vector to format as NA
|
# Improvement should add a missing vector to format as NA
|
||||||
data <- data |> dplyr::mutate(dplyr::across(dplyr::where(is.character), as.factor))
|
data <- data |>
|
||||||
|
purrr::map(\(.x){
|
||||||
|
if (is.character(.x)) {
|
||||||
|
suppressWarnings(REDCapCAST::as_factor(.x))
|
||||||
|
} else {
|
||||||
|
.x
|
||||||
|
}
|
||||||
|
}) |>
|
||||||
|
dplyr::bind_cols()
|
||||||
|
|
||||||
|
if (is.null(fun)) auto.mode <- TRUE
|
||||||
|
|
||||||
# browser()
|
|
||||||
if (auto.mode) {
|
if (auto.mode) {
|
||||||
if (is.numeric(data[[outcome.str]])) {
|
if (is.numeric(data[[outcome.str]])) {
|
||||||
fun <- "stats::lm"
|
fun <- "stats::lm"
|
||||||
|
@ -101,5 +112,93 @@ regression_model <- function(data,
|
||||||
# Recreating the call
|
# Recreating the call
|
||||||
# out$call <- match.call(definition=eval(parse(text=fun)), call(fun, data = 'data',formula = as.formula(formula.str),args.list))
|
# out$call <- match.call(definition=eval(parse(text=fun)), call(fun, data = 'data',formula = as.formula(formula.str),args.list))
|
||||||
|
|
||||||
|
class(out) <- c("webresearch_model", class(out))
|
||||||
|
return(out)
|
||||||
|
}
|
||||||
|
|
||||||
|
#' Create a regression model programatically
|
||||||
|
#'
|
||||||
|
#' @param data data set
|
||||||
|
#' @param fun Name of function as character vector or function to use for model creation.
|
||||||
|
#' @param vars character vector of variables to include
|
||||||
|
#' @param outcome.str Name of outcome variable. Character vector.
|
||||||
|
#' @param args.list List of arguments passed to 'fun' with 'do.call'.
|
||||||
|
#' @param ... ignored for now
|
||||||
|
#'
|
||||||
|
#' @importFrom stats as.formula
|
||||||
|
#'
|
||||||
|
#' @return object of standard class for fun
|
||||||
|
#' @export
|
||||||
|
#'
|
||||||
|
#' @examples
|
||||||
|
#' \dontrun{
|
||||||
|
#' gtsummary::trial |>
|
||||||
|
#' regression_model_uv(outcome.str = "age")
|
||||||
|
#' gtsummary::trial |>
|
||||||
|
#' regression_model_uv(
|
||||||
|
#' outcome.str = "age",
|
||||||
|
#' fun = "stats::lm",
|
||||||
|
#' args.list = NULL
|
||||||
|
#' )
|
||||||
|
#' gtsummary::trial |> regression_model_uv(
|
||||||
|
#' outcome.str = "trt",
|
||||||
|
#' fun = "stats::glm",
|
||||||
|
#' args.list = list(family = stats::binomial(link = "logit"))
|
||||||
|
#' )
|
||||||
|
#' }
|
||||||
|
regression_model_uv <- function(data,
|
||||||
|
outcome.str,
|
||||||
|
args.list = NULL,
|
||||||
|
fun = NULL,
|
||||||
|
vars = NULL,
|
||||||
|
...) {
|
||||||
|
if (!is.null(vars)) {
|
||||||
|
data <- data |>
|
||||||
|
dplyr::select(dplyr::all_of(
|
||||||
|
unique(c(outcome.str, vars))
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is.null(args.list)) {
|
||||||
|
args.list <- list()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is.null(fun)) {
|
||||||
|
if (is.numeric(data[[outcome.str]])) {
|
||||||
|
fun <- "stats::lm"
|
||||||
|
} else if (is.factor(data[[outcome.str]])) {
|
||||||
|
if (length(levels(data[[outcome.str]])) == 2) {
|
||||||
|
fun <- "stats::glm"
|
||||||
|
args.list <- list(family = stats::binomial(link = "logit"))
|
||||||
|
} else if (length(levels(data[[outcome.str]])) > 2) {
|
||||||
|
fun <- "MASS::polr"
|
||||||
|
args.list <- list(
|
||||||
|
Hess = TRUE,
|
||||||
|
method = "logistic"
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
stop("The provided output variable only has one level")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
stop("Output variable should be either numeric or factor for auto.mode")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
assertthat::assert_that("character" %in% class(fun),
|
||||||
|
msg = "Please provide the function as a character vector."
|
||||||
|
)
|
||||||
|
|
||||||
|
out <- names(data)[!names(data) %in% outcome.str] |>
|
||||||
|
purrr::map(\(.var){
|
||||||
|
do.call(
|
||||||
|
regression_model,
|
||||||
|
c(
|
||||||
|
list(data = data[match(c(outcome.str,.var),names(data))]),
|
||||||
|
list(outcome.str=outcome.str),
|
||||||
|
list(args.list=args.list)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
return(out)
|
return(out)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,16 @@
|
||||||
#' Create table of regression model
|
#' Create table of regression model
|
||||||
#'
|
#'
|
||||||
#' @param data regression model
|
#' @param x regression model
|
||||||
#' @param args.list list of arguments passed to 'fun'.
|
#' @param args.list list of arguments passed to 'fun'.
|
||||||
#' @param fun function to use for table creation. Default is "gtsummary::tbl_regression".
|
#' @param fun function to use for table creation. Default is "gtsummary::tbl_regression".
|
||||||
|
#' @param ... passed to methods
|
||||||
#'
|
#'
|
||||||
#' @return object of standard class for fun
|
#' @return object of standard class for fun
|
||||||
#' @export
|
#' @export
|
||||||
|
#' @name regression_table
|
||||||
#'
|
#'
|
||||||
#' @examples
|
#' @examples
|
||||||
|
#' \dontrun{
|
||||||
#' gtsummary::trial |>
|
#' gtsummary::trial |>
|
||||||
#' regression_model(
|
#' regression_model(
|
||||||
#' outcome.str = "stage",
|
#' outcome.str = "stage",
|
||||||
|
@ -29,14 +32,82 @@
|
||||||
#' args.list = list(family = binomial(link = "logit"))
|
#' args.list = list(family = binomial(link = "logit"))
|
||||||
#' ) |>
|
#' ) |>
|
||||||
#' regression_table()
|
#' regression_table()
|
||||||
regression_table <- function(data, args.list = NULL, fun = "gtsummary::tbl_regression") {
|
#' gtsummary::trial |>
|
||||||
|
#' regression_model_uv(
|
||||||
|
#' outcome.str = "trt",
|
||||||
|
#' fun = "stats::glm",
|
||||||
|
#' args.list = list(family = stats::binomial(link = "logit"))
|
||||||
|
#' ) |>
|
||||||
|
#' regression_table()
|
||||||
|
#' gtsummary::trial |>
|
||||||
|
#' regression_model_uv(
|
||||||
|
#' outcome.str = "stage",
|
||||||
|
#' args.list = list(family = stats::binomial(link = "logit"))
|
||||||
|
#' ) |>
|
||||||
|
#' regression_table()
|
||||||
|
#'
|
||||||
|
#' list(
|
||||||
|
#' "Univariable" = regression_model_uv,
|
||||||
|
#' "Multivariable" = regression_model
|
||||||
|
#' ) |>
|
||||||
|
#' lapply(\(.fun){
|
||||||
|
#' do.call(
|
||||||
|
#' .fun,
|
||||||
|
#' c(
|
||||||
|
#' list(data = gtsummary::trial),
|
||||||
|
#' list(outcome.str = "stage")
|
||||||
|
#' )
|
||||||
|
#' )
|
||||||
|
#' }) |>
|
||||||
|
#' purrr::map(regression_table) |>
|
||||||
|
#' tbl_merge()
|
||||||
|
#' }
|
||||||
|
regression_table <- function(x, ...) {
|
||||||
|
UseMethod("regression_table")
|
||||||
|
}
|
||||||
|
|
||||||
if (any(c(length(class(data))!=1, class(data)!="lm"))){
|
#' @rdname regression_table
|
||||||
if (!"exponentiate" %in% names(args.list)){
|
#' @export
|
||||||
args.list <- c(args.list,list(exponentiate=TRUE))
|
regression_table.list <- function(x, ...) {
|
||||||
|
x |>
|
||||||
|
purrr::map(\(.m){
|
||||||
|
regression_table(x = .m, ...) |>
|
||||||
|
gtsummary::add_n()
|
||||||
|
}) |>
|
||||||
|
gtsummary::tbl_stack()
|
||||||
|
}
|
||||||
|
|
||||||
|
#' @rdname regression_table
|
||||||
|
#' @export
|
||||||
|
regression_table.webresearch_model <- function(x, ..., args.list = NULL, fun = "gtsummary::tbl_regression") {
|
||||||
|
# Stripping custom class
|
||||||
|
class(x) <- class(x)[class(x) != "webresearch_model"]
|
||||||
|
|
||||||
|
if (any(c(length(class(x)) != 1, class(x) != "lm"))) {
|
||||||
|
if (!"exponentiate" %in% names(args.list)) {
|
||||||
|
args.list <- c(args.list, list(exponentiate = TRUE))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
out <- do.call(getfun(fun), c(list(x = data), args.list))
|
out <- do.call(getfun(fun), c(list(x = x), args.list))
|
||||||
out |> gtsummary::add_glance_source_note()
|
out |>
|
||||||
|
gtsummary::add_glance_source_note() # |>
|
||||||
|
# gtsummary::bold_p()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#' A substitue to gtsummary::tbl_merge, that will use list names for the tab
|
||||||
|
#' spanner names.
|
||||||
|
#'
|
||||||
|
#' @param data gtsummary list object
|
||||||
|
#'
|
||||||
|
#' @return gt summary list object
|
||||||
|
#' @export
|
||||||
|
#'
|
||||||
|
tbl_merge <- function(data) {
|
||||||
|
if (is.null(names(data))) {
|
||||||
|
data |> gtsummary::tbl_merge()
|
||||||
|
} else {
|
||||||
|
data |> gtsummary::tbl_merge(tab_spanner = names(data))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
shiny_webResearch <- function(data = NULL, ...) {
|
shiny_webResearch <- function(data = NULL, ...) {
|
||||||
appDir <- system.file("apps", "data_analysis", package = "webResearch")
|
appDir <- system.file("apps", "data_analysis", package = "webResearch")
|
||||||
if (appDir == "") {
|
if (appDir == "") {
|
||||||
stop("Could not find example directory. Try re-installing `webResearch`.", call. = FALSE)
|
stop("Could not find the app directory. Try re-installing `webResearch`.", call. = FALSE)
|
||||||
}
|
}
|
||||||
|
|
||||||
G <- .GlobalEnv
|
G <- .GlobalEnv
|
||||||
|
@ -22,13 +22,3 @@ shiny_webResearch <- function(data = NULL, ...) {
|
||||||
a <- shiny::runApp(appDir = appDir, ...)
|
a <- shiny::runApp(appDir = appDir, ...)
|
||||||
return(invisible(a))
|
return(invisible(a))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#' Wrapping nav_spacer to avoid errors on dependencies when packaging
|
|
||||||
#'
|
|
||||||
#' @return bslib object
|
|
||||||
#' @export
|
|
||||||
#'
|
|
||||||
panel_space <- function() {
|
|
||||||
bslib::nav_spacer()
|
|
||||||
}
|
|
|
@ -5,6 +5,6 @@ account: agdamsbo
|
||||||
server: shinyapps.io
|
server: shinyapps.io
|
||||||
hostUrl: https://api.shinyapps.io/v1
|
hostUrl: https://api.shinyapps.io/v1
|
||||||
appId: 13276335
|
appId: 13276335
|
||||||
bundleId: 9425248
|
bundleId: 9426438
|
||||||
url: https://agdamsbo.shinyapps.io/webResearch/
|
url: https://agdamsbo.shinyapps.io/webResearch/
|
||||||
version: 1
|
version: 1
|
||||||
|
|
|
@ -53,7 +53,7 @@ server <- function(input, output, session) {
|
||||||
# or all rows if selected, will be shown.
|
# or all rows if selected, will be shown.
|
||||||
if (v$input) {
|
if (v$input) {
|
||||||
out <- webResearch_data
|
out <- webResearch_data
|
||||||
} else if (v$test=="test") {
|
} else if (v$test == "test") {
|
||||||
out <- gtsummary::trial
|
out <- gtsummary::trial
|
||||||
} else {
|
} else {
|
||||||
shiny::req(input$file)
|
shiny::req(input$file)
|
||||||
|
@ -61,6 +61,15 @@ server <- function(input, output, session) {
|
||||||
}
|
}
|
||||||
|
|
||||||
v$ds <- "present"
|
v$ds <- "present"
|
||||||
|
if (input$factorize == "yes") {
|
||||||
|
out <- out |>
|
||||||
|
(\(.x){
|
||||||
|
suppressWarnings(
|
||||||
|
REDCapCAST::numchar2fct(.x)
|
||||||
|
)
|
||||||
|
})()
|
||||||
|
|
||||||
|
}
|
||||||
return(out)
|
return(out)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -69,7 +78,7 @@ server <- function(input, output, session) {
|
||||||
inputId = "include_vars",
|
inputId = "include_vars",
|
||||||
selected = NULL,
|
selected = NULL,
|
||||||
label = "Covariables to include",
|
label = "Covariables to include",
|
||||||
choices = colnames(ds())[-match(input$outcome_var, colnames(ds()))],
|
choices = colnames(ds()),
|
||||||
multiple = TRUE
|
multiple = TRUE
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
@ -89,7 +98,7 @@ server <- function(input, output, session) {
|
||||||
inputId = "strat_var",
|
inputId = "strat_var",
|
||||||
selected = "none",
|
selected = "none",
|
||||||
label = "Select variable to stratify baseline",
|
label = "Select variable to stratify baseline",
|
||||||
choices = c("none" ,colnames(ds())),
|
choices = c("none", colnames(ds()[base_vars()])),
|
||||||
multiple = FALSE
|
multiple = FALSE
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
@ -99,21 +108,39 @@ server <- function(input, output, session) {
|
||||||
inputId = "factor_vars",
|
inputId = "factor_vars",
|
||||||
selected = colnames(ds())[sapply(ds(), is.factor)],
|
selected = colnames(ds())[sapply(ds(), is.factor)],
|
||||||
label = "Covariables to format as categorical",
|
label = "Covariables to format as categorical",
|
||||||
choices = colnames(ds())[sapply(ds(), is.character)],
|
choices = colnames(ds()),
|
||||||
multiple = TRUE
|
multiple = TRUE
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
output$data.input <- shiny::renderTable({
|
base_vars <- shiny::reactive({
|
||||||
utils::head(ds(),20)
|
if (is.null(input$include_vars)) {
|
||||||
|
out <- colnames(ds())
|
||||||
|
} else {
|
||||||
|
out <- unique(c(input$include_vars, input$outcome_var))
|
||||||
|
}
|
||||||
|
return(out)
|
||||||
})
|
})
|
||||||
|
|
||||||
output$data.classes <- shiny::renderTable({
|
# output$data.input <- shiny::renderTable({
|
||||||
shiny::req(input$file)
|
# utils::head(ds(), 20)
|
||||||
data.frame(matrix(sapply(ds(),\(.x){class(.x)[1]}),nrow=1)) |>
|
# })
|
||||||
stats::setNames(names(ds()))
|
|
||||||
|
output$data.input <- DT::renderDT({
|
||||||
|
ds()[base_vars()]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
output$data.classes <- gt::render_gt({
|
||||||
|
shiny::req(input$file)
|
||||||
|
data.frame(matrix(sapply(ds(), \(.x){
|
||||||
|
class(.x)[1]
|
||||||
|
}), nrow = 1)) |>
|
||||||
|
stats::setNames(names(ds())) |>
|
||||||
|
gt::gt()
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
shiny::observeEvent(
|
shiny::observeEvent(
|
||||||
{
|
{
|
||||||
input$load
|
input$load
|
||||||
|
@ -127,28 +154,45 @@ server <- function(input, output, session) {
|
||||||
|
|
||||||
data <- data |> factorize(vars = input$factor_vars)
|
data <- data |> factorize(vars = input$factor_vars)
|
||||||
|
|
||||||
if (is.factor(data[[input$strat_var]])) {
|
# if (is.factor(data[[input$strat_var]])) {
|
||||||
by.var <- input$strat_var
|
# by.var <- input$strat_var
|
||||||
} else {
|
# } else {
|
||||||
|
# by.var <- NULL
|
||||||
|
# }
|
||||||
|
|
||||||
|
if (input$strat_var == "none") {
|
||||||
by.var <- NULL
|
by.var <- NULL
|
||||||
}
|
|
||||||
|
|
||||||
if (is.null(input$include_vars)) {
|
|
||||||
base_vars <- colnames(data)
|
|
||||||
} else {
|
} else {
|
||||||
base_vars <- c(input$include_vars, input$outcome_var)
|
by.var <- input$strat_var
|
||||||
}
|
}
|
||||||
|
|
||||||
data <- dplyr::select(data, dplyr::all_of(base_vars))
|
data <- data[base_vars()]
|
||||||
|
|
||||||
model <- data |>
|
# model <- data |>
|
||||||
regression_model(
|
# regression_model(
|
||||||
outcome.str = input$outcome_var,
|
# outcome.str = input$outcome_var,
|
||||||
auto.mode = input$regression_auto == 1,
|
# auto.mode = input$regression_auto == 1,
|
||||||
formula.str = input$regression_formula,
|
# formula.str = input$regression_formula,
|
||||||
fun = input$regression_fun,
|
# fun = input$regression_fun,
|
||||||
args.list = eval(parse(text = paste0("list(", input$regression_args, ")")))
|
# args.list = eval(parse(text = paste0("list(", input$regression_args, ")")))
|
||||||
)
|
# )
|
||||||
|
|
||||||
|
models <- list(
|
||||||
|
"Univariable" = regression_model_uv,
|
||||||
|
"Multivariable" = regression_model
|
||||||
|
) |>
|
||||||
|
lapply(\(.fun){
|
||||||
|
do.call(
|
||||||
|
.fun,
|
||||||
|
c(
|
||||||
|
list(data = data),
|
||||||
|
list(outcome.str = input$outcome_var),
|
||||||
|
list(formula.str = input$regression_formula),
|
||||||
|
list(fun = input$regression_fun),
|
||||||
|
list(args.list = eval(parse(text = paste0("list(", input$regression_args, ")"))))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
v$list <- list(
|
v$list <- list(
|
||||||
|
@ -161,14 +205,24 @@ server <- function(input, output, session) {
|
||||||
)
|
)
|
||||||
) |>
|
) |>
|
||||||
(\(.x){
|
(\(.x){
|
||||||
if (!is.null(by.var)){
|
if (!is.null(by.var)) {
|
||||||
.x |> gtsummary::add_overall()
|
.x |> gtsummary::add_overall()
|
||||||
} else {
|
} else {
|
||||||
.x
|
.x
|
||||||
}
|
}
|
||||||
|
})() |>
|
||||||
|
(\(.x){
|
||||||
|
if (input$add_p == "yes") {
|
||||||
|
.x |>
|
||||||
|
gtsummary::add_p() |>
|
||||||
|
gtsummary::bold_p()
|
||||||
|
} else {
|
||||||
|
.x
|
||||||
|
}
|
||||||
})(),
|
})(),
|
||||||
table2 = model |>
|
table2 = models |>
|
||||||
regression_table()
|
purrr::map(regression_table) |>
|
||||||
|
tbl_merge()
|
||||||
)
|
)
|
||||||
|
|
||||||
output$table1 <- gt::render_gt(
|
output$table1 <- gt::render_gt(
|
||||||
|
@ -180,7 +234,6 @@ server <- function(input, output, session) {
|
||||||
v$list$table2 |>
|
v$list$table2 |>
|
||||||
gtsummary::as_gt()
|
gtsummary::as_gt()
|
||||||
)
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -229,5 +282,4 @@ server <- function(input, output, session) {
|
||||||
print(paste(.x, "deleted"))
|
print(paste(.x, "deleted"))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,39 +1,16 @@
|
||||||
library(shiny)
|
library(shiny)
|
||||||
library(bslib)
|
library(bslib)
|
||||||
requireNamespace("gt")
|
requireNamespace("gt")
|
||||||
# require(ggplot2)
|
|
||||||
# source("https://raw.githubusercontent.com/agdamsbo/cognitive.index.lookup/main/R/index_from_raw.R")
|
|
||||||
# source("https://raw.githubusercontent.com/agdamsbo/cognitive.index.lookup/main/R/plot_index.R")
|
|
||||||
# source(here::here("R/index_from_raw.R"))
|
|
||||||
# source(here::here("R/plot_index.R"))
|
|
||||||
|
|
||||||
# ui <- fluidPage(
|
|
||||||
|
|
||||||
cards <- list(
|
|
||||||
bslib::card(
|
|
||||||
max_height = "200px",
|
|
||||||
full_screen = TRUE,
|
|
||||||
bslib::card_header("Data overview"),
|
|
||||||
shiny::uiOutput("data.input")
|
|
||||||
),
|
|
||||||
bslib::card(
|
|
||||||
# max_height = "200px",
|
|
||||||
full_screen = TRUE,
|
|
||||||
bslib::card_header("Baseline characteristics"),
|
|
||||||
gt::gt_output(outputId = "table1")
|
|
||||||
),
|
|
||||||
bslib::card(
|
|
||||||
full_screen = TRUE,
|
|
||||||
bslib::card_header("Multivariable regression table"),
|
|
||||||
gt::gt_output(outputId = "table2")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
panels <- list(
|
panels <- list(
|
||||||
bslib::nav_panel(
|
bslib::nav_panel(
|
||||||
title = "Data overview",
|
title = "Data overview",
|
||||||
shiny::uiOutput("data.classes"),
|
# shiny::uiOutput("data.classes"),
|
||||||
shiny::uiOutput("data.input")
|
# shiny::uiOutput("data.input"),
|
||||||
|
shiny::p("Classes of uploaded data"),
|
||||||
|
gt::gt_output("data.classes"),
|
||||||
|
shiny::p("Subset data"),
|
||||||
|
DT::DTOutput("data.input")
|
||||||
),
|
),
|
||||||
bslib::nav_panel(
|
bslib::nav_panel(
|
||||||
title = "Baseline characteristics",
|
title = "Baseline characteristics",
|
||||||
|
@ -47,25 +24,15 @@ panels <- list(
|
||||||
|
|
||||||
|
|
||||||
ui <- bslib::page(
|
ui <- bslib::page(
|
||||||
theme = bslib::bs_theme(bootswatch = "minty",
|
theme = bslib::bs_theme(
|
||||||
base_font = font_google("Inter"),
|
bootswatch = "minty",
|
||||||
code_font = font_google("JetBrains Mono")
|
base_font = font_google("Inter"),
|
||||||
),
|
code_font = font_google("JetBrains Mono")
|
||||||
# theme = bslib::bs_theme(
|
),
|
||||||
# bg = "#101010",
|
|
||||||
# fg = "#FFF",
|
|
||||||
# primary = "#E69F00",
|
|
||||||
# secondary = "#0072B2",
|
|
||||||
# success = "#009E73",
|
|
||||||
# base_font = font_google("Inter"),
|
|
||||||
# code_font = font_google("JetBrains Mono")
|
|
||||||
# ),
|
|
||||||
title = "webResearcher for easy data analysis",
|
title = "webResearcher for easy data analysis",
|
||||||
bslib::page_navbar(
|
bslib::page_navbar(
|
||||||
title = "webResearcher",
|
title = "webResearcher",
|
||||||
header = h6("Welcome to the webResearcher tool. This is an early alpha version to act as a proof-of-concept and in no way intended for wider public use."),
|
header = h6("Welcome to the webResearcher tool. This is an early alpha version to act as a proof-of-concept and in no way intended for wider public use."),
|
||||||
|
|
||||||
# sidebarPanel(
|
|
||||||
sidebar = bslib::sidebar(
|
sidebar = bslib::sidebar(
|
||||||
width = 300,
|
width = 300,
|
||||||
open = "open",
|
open = "open",
|
||||||
|
@ -92,12 +59,22 @@ ui <- bslib::page(
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
# Does not work??
|
# Does not work??
|
||||||
# shiny::actionButton(inputId = "test_data",
|
# shiny::actionButton(inputId = "test_data",
|
||||||
# label = "Load test data", class = "btn-primary")
|
# label = "Load test data", class = "btn-primary")
|
||||||
),
|
),
|
||||||
shiny::conditionalPanel(
|
shiny::conditionalPanel(
|
||||||
condition = "output.uploaded=='yes'",
|
condition = "output.uploaded=='yes'",
|
||||||
shiny::h4("Parameter specifications"),
|
shiny::h4("Parameter specifications"),
|
||||||
|
shiny::radioButtons(
|
||||||
|
inputId = "factorize",
|
||||||
|
label = "Factorize variables with few levels?",
|
||||||
|
selected = "yes",
|
||||||
|
inline = TRUE,
|
||||||
|
choices = list(
|
||||||
|
"Yes" = "yes",
|
||||||
|
"No" = "no"
|
||||||
|
)
|
||||||
|
),
|
||||||
shiny::radioButtons(
|
shiny::radioButtons(
|
||||||
inputId = "regression_auto",
|
inputId = "regression_auto",
|
||||||
label = "Automatically choose function",
|
label = "Automatically choose function",
|
||||||
|
@ -126,9 +103,23 @@ ui <- bslib::page(
|
||||||
value = ""
|
value = ""
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
shiny::helpText(em("Please specify relevant columns from your data, and press 'Load data'")),
|
shiny::helpText(em("Please specify relevant settings for your data, and press 'Analyse'")),
|
||||||
shiny::uiOutput("outcome_var"),
|
shiny::uiOutput("outcome_var"),
|
||||||
shiny::uiOutput("strat_var"),
|
shiny::uiOutput("strat_var"),
|
||||||
|
shiny::conditionalPanel(
|
||||||
|
condition = "input.strat_var!='none'",
|
||||||
|
shiny::radioButtons(
|
||||||
|
inputId = "add_p",
|
||||||
|
label = "Compare strata?",
|
||||||
|
selected = "no",
|
||||||
|
inline = TRUE,
|
||||||
|
choices = list(
|
||||||
|
"No" = "no",
|
||||||
|
"Yes" = "yes"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
shiny::helpText("Option to perform statistical comparisons between strata in baseline table.")
|
||||||
|
),
|
||||||
shiny::radioButtons(
|
shiny::radioButtons(
|
||||||
inputId = "all",
|
inputId = "all",
|
||||||
label = "Specify covariables",
|
label = "Specify covariables",
|
||||||
|
@ -149,15 +140,27 @@ ui <- bslib::page(
|
||||||
selected = "no",
|
selected = "no",
|
||||||
inline = TRUE,
|
inline = TRUE,
|
||||||
choices = list(
|
choices = list(
|
||||||
"No" = "no",
|
"Yes" = "yes",
|
||||||
"Yes" = "yes"
|
"No" = "no"
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
shiny::conditionalPanel(
|
shiny::conditionalPanel(
|
||||||
condition = "input.specify_factors=='yes'",
|
condition = "input.specify_factors=='yes'",
|
||||||
shiny::uiOutput("factor_vars")
|
shiny::uiOutput("factor_vars")
|
||||||
),
|
),
|
||||||
shiny::actionButton("load", "Analyse", class = "btn-primary"),
|
bslib::input_task_button(
|
||||||
|
id = "load",
|
||||||
|
label = "Analyse",
|
||||||
|
icon = shiny::icon("pencil", lib = "glyphicon"),
|
||||||
|
label_busy = "Working...",
|
||||||
|
icon_busy = fontawesome::fa_i("arrows-rotate",
|
||||||
|
class = "fa-spin",
|
||||||
|
"aria-hidden" = "true"),
|
||||||
|
type = "primary",
|
||||||
|
auto_reset = TRUE
|
||||||
|
),
|
||||||
|
shiny::helpText("If you change the parameters, press 'Analyse' again to update the tables"),
|
||||||
|
# shiny::actionButton("load", "Analyse", class = "btn-primary"),
|
||||||
#
|
#
|
||||||
# # Horizontal line ----
|
# # Horizontal line ----
|
||||||
tags$hr(),
|
tags$hr(),
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
% Generated by roxygen2: do not edit by hand
|
|
||||||
% Please edit documentation in R/app.R
|
|
||||||
\name{panel_space}
|
|
||||||
\alias{panel_space}
|
|
||||||
\title{Wrapping nav_spacer to avoid errors on dependencies when packaging}
|
|
||||||
\usage{
|
|
||||||
panel_space()
|
|
||||||
}
|
|
||||||
\value{
|
|
||||||
bslib object
|
|
||||||
}
|
|
||||||
\description{
|
|
||||||
Wrapping nav_spacer to avoid errors on dependencies when packaging
|
|
||||||
}
|
|
|
@ -2,7 +2,7 @@
|
||||||
% Please edit documentation in R/regression_model.R
|
% Please edit documentation in R/regression_model.R
|
||||||
\name{regression_model}
|
\name{regression_model}
|
||||||
\alias{regression_model}
|
\alias{regression_model}
|
||||||
\title{Print a flexible baseline characteristics table}
|
\title{Create a regression model programatically}
|
||||||
\usage{
|
\usage{
|
||||||
regression_model(
|
regression_model(
|
||||||
data,
|
data,
|
||||||
|
@ -11,7 +11,8 @@ regression_model(
|
||||||
formula.str = NULL,
|
formula.str = NULL,
|
||||||
args.list = NULL,
|
args.list = NULL,
|
||||||
fun = NULL,
|
fun = NULL,
|
||||||
vars = NULL
|
vars = NULL,
|
||||||
|
...
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
\arguments{
|
\arguments{
|
||||||
|
@ -28,12 +29,14 @@ regression_model(
|
||||||
\item{fun}{Name of function as character vector or function to use for model creation.}
|
\item{fun}{Name of function as character vector or function to use for model creation.}
|
||||||
|
|
||||||
\item{vars}{character vector of variables to include}
|
\item{vars}{character vector of variables to include}
|
||||||
|
|
||||||
|
\item{...}{ignored for now}
|
||||||
}
|
}
|
||||||
\value{
|
\value{
|
||||||
object of standard class for fun
|
object of standard class for fun
|
||||||
}
|
}
|
||||||
\description{
|
\description{
|
||||||
Print a flexible baseline characteristics table
|
Create a regression model programatically
|
||||||
}
|
}
|
||||||
\examples{
|
\examples{
|
||||||
gtsummary::trial |>
|
gtsummary::trial |>
|
||||||
|
|
51
man/regression_model_uv.Rd
Normal file
51
man/regression_model_uv.Rd
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
% Generated by roxygen2: do not edit by hand
|
||||||
|
% Please edit documentation in R/regression_model.R
|
||||||
|
\name{regression_model_uv}
|
||||||
|
\alias{regression_model_uv}
|
||||||
|
\title{Create a regression model programatically}
|
||||||
|
\usage{
|
||||||
|
regression_model_uv(
|
||||||
|
data,
|
||||||
|
outcome.str,
|
||||||
|
args.list = NULL,
|
||||||
|
fun = NULL,
|
||||||
|
vars = NULL,
|
||||||
|
...
|
||||||
|
)
|
||||||
|
}
|
||||||
|
\arguments{
|
||||||
|
\item{data}{data set}
|
||||||
|
|
||||||
|
\item{outcome.str}{Name of outcome variable. Character vector.}
|
||||||
|
|
||||||
|
\item{args.list}{List of arguments passed to 'fun' with 'do.call'.}
|
||||||
|
|
||||||
|
\item{fun}{Name of function as character vector or function to use for model creation.}
|
||||||
|
|
||||||
|
\item{vars}{character vector of variables to include}
|
||||||
|
|
||||||
|
\item{...}{ignored for now}
|
||||||
|
}
|
||||||
|
\value{
|
||||||
|
object of standard class for fun
|
||||||
|
}
|
||||||
|
\description{
|
||||||
|
Create a regression model programatically
|
||||||
|
}
|
||||||
|
\examples{
|
||||||
|
\dontrun{
|
||||||
|
gtsummary::trial |>
|
||||||
|
regression_model_uv(outcome.str = "age")
|
||||||
|
gtsummary::trial |>
|
||||||
|
regression_model_uv(
|
||||||
|
outcome.str = "age",
|
||||||
|
fun = "stats::lm",
|
||||||
|
args.list = NULL
|
||||||
|
)
|
||||||
|
gtsummary::trial |> regression_model_uv(
|
||||||
|
outcome.str = "trt",
|
||||||
|
fun = "stats::glm",
|
||||||
|
args.list = list(family = stats::binomial(link = "logit"))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,12 +2,20 @@
|
||||||
% Please edit documentation in R/regression_table.R
|
% Please edit documentation in R/regression_table.R
|
||||||
\name{regression_table}
|
\name{regression_table}
|
||||||
\alias{regression_table}
|
\alias{regression_table}
|
||||||
|
\alias{regression_table.list}
|
||||||
|
\alias{regression_table.webresearch_model}
|
||||||
\title{Create table of regression model}
|
\title{Create table of regression model}
|
||||||
\usage{
|
\usage{
|
||||||
regression_table(data, args.list = NULL, fun = "gtsummary::tbl_regression")
|
regression_table(x, ...)
|
||||||
|
|
||||||
|
\method{regression_table}{list}(x, ...)
|
||||||
|
|
||||||
|
\method{regression_table}{webresearch_model}(x, ..., args.list = NULL, fun = "gtsummary::tbl_regression")
|
||||||
}
|
}
|
||||||
\arguments{
|
\arguments{
|
||||||
\item{data}{regression model}
|
\item{x}{regression model}
|
||||||
|
|
||||||
|
\item{...}{passed to methods}
|
||||||
|
|
||||||
\item{args.list}{list of arguments passed to 'fun'.}
|
\item{args.list}{list of arguments passed to 'fun'.}
|
||||||
|
|
||||||
|
@ -20,6 +28,7 @@ object of standard class for fun
|
||||||
Create table of regression model
|
Create table of regression model
|
||||||
}
|
}
|
||||||
\examples{
|
\examples{
|
||||||
|
\dontrun{
|
||||||
gtsummary::trial |>
|
gtsummary::trial |>
|
||||||
regression_model(
|
regression_model(
|
||||||
outcome.str = "stage",
|
outcome.str = "stage",
|
||||||
|
@ -41,4 +50,34 @@ gtsummary::trial |>
|
||||||
args.list = list(family = binomial(link = "logit"))
|
args.list = list(family = binomial(link = "logit"))
|
||||||
) |>
|
) |>
|
||||||
regression_table()
|
regression_table()
|
||||||
|
gtsummary::trial |>
|
||||||
|
regression_model_uv(
|
||||||
|
outcome.str = "trt",
|
||||||
|
fun = "stats::glm",
|
||||||
|
args.list = list(family = stats::binomial(link = "logit"))
|
||||||
|
) |>
|
||||||
|
regression_table()
|
||||||
|
gtsummary::trial |>
|
||||||
|
regression_model_uv(
|
||||||
|
outcome.str = "stage",
|
||||||
|
args.list = list(family = stats::binomial(link = "logit"))
|
||||||
|
) |>
|
||||||
|
regression_table()
|
||||||
|
|
||||||
|
list(
|
||||||
|
"Univariable" = regression_model_uv,
|
||||||
|
"Multivariable" = regression_model
|
||||||
|
) |>
|
||||||
|
lapply(\(.fun){
|
||||||
|
do.call(
|
||||||
|
.fun,
|
||||||
|
c(
|
||||||
|
list(data = gtsummary::trial),
|
||||||
|
list(outcome.str = "stage")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}) |>
|
||||||
|
purrr::map(regression_table) |>
|
||||||
|
tbl_merge()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
% Generated by roxygen2: do not edit by hand
|
% Generated by roxygen2: do not edit by hand
|
||||||
% Please edit documentation in R/app.R
|
% Please edit documentation in R/shiny_webResearch.R
|
||||||
\name{shiny_webResearch}
|
\name{shiny_webResearch}
|
||||||
\alias{shiny_webResearch}
|
\alias{shiny_webResearch}
|
||||||
\title{Test version of the shiny_cast function to launch the app with a data set in
|
\title{Test version of the shiny_cast function to launch the app with a data set in
|
||||||
|
|
19
man/tbl_merge.Rd
Normal file
19
man/tbl_merge.Rd
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
% Generated by roxygen2: do not edit by hand
|
||||||
|
% Please edit documentation in R/regression_table.R
|
||||||
|
\name{tbl_merge}
|
||||||
|
\alias{tbl_merge}
|
||||||
|
\title{A substitue to gtsummary::tbl_merge, that will use list names for the tab
|
||||||
|
spanner names.}
|
||||||
|
\usage{
|
||||||
|
tbl_merge(data)
|
||||||
|
}
|
||||||
|
\arguments{
|
||||||
|
\item{data}{gtsummary list object}
|
||||||
|
}
|
||||||
|
\value{
|
||||||
|
gt summary list object
|
||||||
|
}
|
||||||
|
\description{
|
||||||
|
A substitue to gtsummary::tbl_merge, that will use list names for the tab
|
||||||
|
spanner names.
|
||||||
|
}
|
116
renv.lock
116
renv.lock
|
@ -9,6 +9,23 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"Packages": {
|
"Packages": {
|
||||||
|
"DT": {
|
||||||
|
"Package": "DT",
|
||||||
|
"Version": "0.33",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Repository": "CRAN",
|
||||||
|
"Requirements": [
|
||||||
|
"crosstalk",
|
||||||
|
"htmltools",
|
||||||
|
"htmlwidgets",
|
||||||
|
"httpuv",
|
||||||
|
"jquerylib",
|
||||||
|
"jsonlite",
|
||||||
|
"magrittr",
|
||||||
|
"promises"
|
||||||
|
],
|
||||||
|
"Hash": "64ff3427f559ce3f2597a4fe13255cb6"
|
||||||
|
},
|
||||||
"MASS": {
|
"MASS": {
|
||||||
"Package": "MASS",
|
"Package": "MASS",
|
||||||
"Version": "7.3-61",
|
"Version": "7.3-61",
|
||||||
|
@ -169,6 +186,22 @@
|
||||||
],
|
],
|
||||||
"Hash": "543776ae6848fde2f48ff3816d0628bc"
|
"Hash": "543776ae6848fde2f48ff3816d0628bc"
|
||||||
},
|
},
|
||||||
|
"bayestestR": {
|
||||||
|
"Package": "bayestestR",
|
||||||
|
"Version": "0.15.0",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Repository": "CRAN",
|
||||||
|
"Requirements": [
|
||||||
|
"R",
|
||||||
|
"datawizard",
|
||||||
|
"graphics",
|
||||||
|
"insight",
|
||||||
|
"methods",
|
||||||
|
"stats",
|
||||||
|
"utils"
|
||||||
|
],
|
||||||
|
"Hash": "d7c05ccb9d60d87dbbe8b4042c385f01"
|
||||||
|
},
|
||||||
"bigD": {
|
"bigD": {
|
||||||
"Package": "bigD",
|
"Package": "bigD",
|
||||||
"Version": "0.3.0",
|
"Version": "0.3.0",
|
||||||
|
@ -301,6 +334,23 @@
|
||||||
],
|
],
|
||||||
"Hash": "2147e8448f4eb87197520fc1710855c7"
|
"Hash": "2147e8448f4eb87197520fc1710855c7"
|
||||||
},
|
},
|
||||||
|
"cardx": {
|
||||||
|
"Package": "cardx",
|
||||||
|
"Version": "0.2.1",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Repository": "CRAN",
|
||||||
|
"Requirements": [
|
||||||
|
"R",
|
||||||
|
"cards",
|
||||||
|
"cli",
|
||||||
|
"dplyr",
|
||||||
|
"glue",
|
||||||
|
"lifecycle",
|
||||||
|
"rlang",
|
||||||
|
"tidyr"
|
||||||
|
],
|
||||||
|
"Hash": "e5458dd65b0602136b16aed802d3bd50"
|
||||||
|
},
|
||||||
"cellranger": {
|
"cellranger": {
|
||||||
"Package": "cellranger",
|
"Package": "cellranger",
|
||||||
"Version": "1.1.0",
|
"Version": "1.1.0",
|
||||||
|
@ -389,6 +439,19 @@
|
||||||
],
|
],
|
||||||
"Hash": "859d96e65ef198fd43e82b9628d593ef"
|
"Hash": "859d96e65ef198fd43e82b9628d593ef"
|
||||||
},
|
},
|
||||||
|
"crosstalk": {
|
||||||
|
"Package": "crosstalk",
|
||||||
|
"Version": "1.2.1",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Repository": "CRAN",
|
||||||
|
"Requirements": [
|
||||||
|
"R6",
|
||||||
|
"htmltools",
|
||||||
|
"jsonlite",
|
||||||
|
"lazyeval"
|
||||||
|
],
|
||||||
|
"Hash": "ab12c7b080a57475248a30f4db6298c0"
|
||||||
|
},
|
||||||
"curl": {
|
"curl": {
|
||||||
"Package": "curl",
|
"Package": "curl",
|
||||||
"Version": "6.0.1",
|
"Version": "6.0.1",
|
||||||
|
@ -399,6 +462,19 @@
|
||||||
],
|
],
|
||||||
"Hash": "e8ba62486230951fcd2b881c5be23f96"
|
"Hash": "e8ba62486230951fcd2b881c5be23f96"
|
||||||
},
|
},
|
||||||
|
"datawizard": {
|
||||||
|
"Package": "datawizard",
|
||||||
|
"Version": "0.13.0",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Repository": "CRAN",
|
||||||
|
"Requirements": [
|
||||||
|
"R",
|
||||||
|
"insight",
|
||||||
|
"stats",
|
||||||
|
"utils"
|
||||||
|
],
|
||||||
|
"Hash": "303aeace6f3554ce2d62e5d1df6fcd6e"
|
||||||
|
},
|
||||||
"digest": {
|
"digest": {
|
||||||
"Package": "digest",
|
"Package": "digest",
|
||||||
"Version": "0.6.37",
|
"Version": "0.6.37",
|
||||||
|
@ -706,6 +782,19 @@
|
||||||
],
|
],
|
||||||
"Hash": "ac107251d9d9fd72f0ca8049988f1d7f"
|
"Hash": "ac107251d9d9fd72f0ca8049988f1d7f"
|
||||||
},
|
},
|
||||||
|
"insight": {
|
||||||
|
"Package": "insight",
|
||||||
|
"Version": "1.0.0",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Repository": "CRAN",
|
||||||
|
"Requirements": [
|
||||||
|
"R",
|
||||||
|
"methods",
|
||||||
|
"stats",
|
||||||
|
"utils"
|
||||||
|
],
|
||||||
|
"Hash": "bee0c3abb5eea6c4170ea2a7c334893f"
|
||||||
|
},
|
||||||
"jquerylib": {
|
"jquerylib": {
|
||||||
"Package": "jquerylib",
|
"Package": "jquerylib",
|
||||||
"Version": "0.1.4",
|
"Version": "0.1.4",
|
||||||
|
@ -812,6 +901,16 @@
|
||||||
],
|
],
|
||||||
"Hash": "a3e051d405326b8b0012377434c62b37"
|
"Hash": "a3e051d405326b8b0012377434c62b37"
|
||||||
},
|
},
|
||||||
|
"lazyeval": {
|
||||||
|
"Package": "lazyeval",
|
||||||
|
"Version": "0.2.2",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Repository": "CRAN",
|
||||||
|
"Requirements": [
|
||||||
|
"R"
|
||||||
|
],
|
||||||
|
"Hash": "d908914ae53b04d4c0c0fd72ecc35370"
|
||||||
|
},
|
||||||
"lifecycle": {
|
"lifecycle": {
|
||||||
"Package": "lifecycle",
|
"Package": "lifecycle",
|
||||||
"Version": "1.0.4",
|
"Version": "1.0.4",
|
||||||
|
@ -931,6 +1030,23 @@
|
||||||
],
|
],
|
||||||
"Hash": "55ddd2d4a1959535f18393478b0c14a6"
|
"Hash": "55ddd2d4a1959535f18393478b0c14a6"
|
||||||
},
|
},
|
||||||
|
"parameters": {
|
||||||
|
"Package": "parameters",
|
||||||
|
"Version": "0.23.0",
|
||||||
|
"Source": "Repository",
|
||||||
|
"Repository": "CRAN",
|
||||||
|
"Requirements": [
|
||||||
|
"R",
|
||||||
|
"bayestestR",
|
||||||
|
"datawizard",
|
||||||
|
"graphics",
|
||||||
|
"insight",
|
||||||
|
"methods",
|
||||||
|
"stats",
|
||||||
|
"utils"
|
||||||
|
],
|
||||||
|
"Hash": "518970426f8042a2b27c3415da881674"
|
||||||
|
},
|
||||||
"pillar": {
|
"pillar": {
|
||||||
"Package": "pillar",
|
"Package": "pillar",
|
||||||
"Version": "1.9.0",
|
"Version": "1.9.0",
|
||||||
|
|
Loading…
Add table
Reference in a new issue