FreesearchR/man/validation.Rd

169 lines
3.9 KiB
R

% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/validation.R
\name{validation_ui}
\alias{validation_ui}
\alias{validation_server}
\title{Validation module}
\usage{
validation_ui(id, max_height = NULL, ...)
validation_server(id, data)
}
\arguments{
\item{id}{Module's ID.}
\item{max_height}{Maximum height for validation results element, useful if you have many rules.}
\item{...}{Arguments passed to \code{actionButton} or \code{uiOutput} depending on display mode,
you cannot use \code{inputId}/\code{outputId}, \code{label} or \code{icon} (button only).}
\item{data}{a \code{reactive} function returning a \code{data.frame}.}
}
\value{
\itemize{
\item UI: HTML tags that can be included in shiny's UI
\item Server: a \code{list} with two slots:
\itemize{
\item \strong{status}: a \code{reactive} function returning the best status available between \code{"OK"}, \code{"Failed"} or \code{"Error"}.
\item \strong{details}: a \code{reactive} function returning a \code{list} with validation details.
}
}
}
\description{
Check that a dataset respect some validation expectations.
}
\examples{
#' Data and analyses validation demo
#'
#' @returns
#' @export
#'
#' @examples
#' \dontrun{
#' validation_demo_app()
#' }
validation_demo_app <- function() {
ui <- shiny::fluidPage(
shiny::tags$h2("Validation"),
IDEAFilter::IDEAFilter_ui("data_filter"),
shiny::br(),
DT::DTOutput("data_final"),
shiny::br(),
validation_ui("validation_demo_2")
)
server <- function(input, output, session) {
rv <- shiny::reactiveValues(
data_original = shiny::reactive(mtcars),
data_filtered = NULL
)
rv_validation <- shiny::reactiveValues(
obs_filter = NULL,
vars_filter = NULL
)
data_filter <- IDEAFilter::IDEAFilter(
id = "data_filter",
data = mtcars,
verbose = TRUE
)
shiny::observeEvent(
data_filter(),
{
rv$data_filtered <- data_filter()
}
)
output$data_final <- DT::renderDT(
data_filter()
)
shiny::observeEvent(
list(
data_filter()
),
{
to_make_validation <- data_filter()
## Validation
if (!is.null(to_make_validation)) {
validation <-
make_validation(
ls = validation_lib("obs_filter"),
list(
x = mtcars,
y = to_make_validation
)
)
rv_validation$vars_filter <- validation
validation_server(id = "validation_demo_2", data = rv_validation$vars_filter)
}
}
)
# shiny::observeEvent(
# list(
# shiny::reactive(rv_validation$vars_filter)(),
# data_filter()
# ),
# {
# # browser()
# # to_make_alert <- shiny::isolate(rv_validation$vars_filter)
# to_make_alert <- shiny::reactive(rv_validation$vars_filter)()
# if (!is.null(rv_validation$vars_filter)) {
# validation_server(id = "validation_demo_2", data = to_make_alert)
# }
# }
# )
}
shiny::shinyApp(ui, server)
}
#' Title
#'
#' @returns
#' @export
#'
#' @examples
#' validation_nr_demo_app()
validation_nr_demo_app <- function() {
ui <- shiny::fluidPage(
shiny::tags$h2("Validation"),
shiny::br(),
validation_ui("validation_demo_1", max_height = "30px"),
shiny::br(),
validation_ui("validation_demo_2")
)
server <- function(input, output, session) {
df_original <- mtcars
df_obs <- mtcars |> dplyr::filter(mpg > 20)
df_vars <- df_obs[1:6]
val1 <- purrr::map2(
.x = validation_lib()[1],
.y = list(list(x = df_original, y = df_obs)),
make_validation
)
val2 <- make_validation(
ls = validation_lib()[[2]],
list(x = df_original, y = df_vars)
)
validation_server(id = "validation_demo_1", data = val1)
validation_server(id = "validation_demo_2", data = val2)
}
shiny::shinyApp(ui, server)
}
}