---
title: "chk Families"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{chk Families}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

The `chk_` functions (and their `vld_` equivalents) can be divided into the following families.
For reasons of space, the `x_name = NULL` argument is not shown.

## Check Logical

Function | Code
:- | :-
`chk_true(x)` | `is.logical(x) && length(x) == 1L && !anyNA(x) && x`
`chk_false(x)` | `is.logical(x) && length(x) == 1L && !anyNA(x) && !x`
`chk_flag(x)` | `is.logical(x) && length(x) == 1L && !anyNA(x)`
`chk_lgl(x)` | `is.logical(x) && length(x) == 1L`

## Check Scalars

Function | Code
:- | :------
`chk_scalar(x)` | `length(x) == 1L`
`chk_number(x)` | `is.numeric(x) && length(x) == 1L && !anyNA(x)`
`chk_whole_number(x)` | `vld_number(x) && (is.integer(x) || vld_true(all.equal(x, trunc(x))))`
`chk_string(x)` | `is.character(x) && length(x) == 1L && !anyNA(x)`
`chk_date(x)` | `inherits(x, "Date") && length(x) == 1L && !anyNA(x)`
`chk_datetime(x)` | `inherits(x, "POSIXct") && length(x) == 1L && !anyNA(x)`
`chk_tz(x)` | `is.character(x) && length(x) == 1L && !anyNA(x) && x %in% OlsonNames()`

## Check Ranges

Function  | Code
:- | :---
`chk_range(x, range = c(0, 1))` | `all(x[!is.na(x)] >= range[1] & x[!is.na(x)] <= range[2])`
`chk_lt(x, value = 0)` | `all(x[!is.na(x)] < value)`
`chk_lte(x, value = 0)` | `all(x[!is.na(x)] <= value)`
`chk_gt(x, value = 0)` | `all(x[!is.na(x)] > value)`
`chk_gte(x, value = 0)` | `all(x[!is.na(x)] >= value)`

## Check Equals

Function | Code
:-- | :-
`chk_identical(x, y)` | `identical(x, y)`
`chk_equal(x, y, tolerance = sqrt(.Machine$double.eps))` | `vld_true(all.equal(x, y, tolerance))`
`chk_equivalent(x, y, tolerance = sqrt(.Machine$double.eps))` | `vld_true(all.equal(x, y, tolerance, check.attributes = FALSE))`

## Check Alls

Function |  Code
:- | :---
`chk_all(x, chk_fun, ...)` | `all(vapply(x, chk_fun, TRUE, ...))`
`chk_all_identical(x)` | `length(x) < 2L || all(vapply(x, vld_identical, TRUE, y = x[[1]]))`
`chk_all_equal(x, tolerance = sqrt(.Machine$double.eps))` | `length(x) < 2L || all(vapply(x, vld_equal, TRUE, y = x[[1]], tolerance = tolerance))`
`chk_all_equivalent(x, tolerance = sqrt(.Machine$double.eps))` | `length(x) < 2L || all(vapply(x, vld_equivalent, TRUE, y = x[[1]], tolerance = tolerance))`

## Check Set

Function | Code
:- | :---
`chk_setequal(x, values)` | `setequal(x, values)`
`chk_subset(x, values)` | `all(x %in% values)`
`chk_superset(x, values)` | `all(values %in% x)`
`chk_join(x, y, by)` | `identical(nrow(x), nrow(merge(x, unique(y[if (is.null(names(by))) by else names(by)]), by = by)))`

## Check Is

Function | Code
:- | :---
`chk_atomic(x)` | `is.atomic(x)`
`chk_function(x, formals = NULL)` | `is.function(x) && (is.null(formals) || length(formals(x)) == formals)`
`chk_numeric(x)` | `is.numeric(x)`
`chk_s3_class(x, class)` | `!isS4(x) && inherits(x, class)`
`chk_s4_class(x, class)` | `isS4(x) && methods::is(x, class)`
`chk_vector(x)` | `is.vector(x)`
`chk_whole_numeric(x)` | `is.integer(x) || (is.double(x) && vld_true(all.equal(x, as.integer(x))))`
`chk_array(x)` | `is.array(x)`
`chk_matrix(x)` | `is.matrix(x)`
`chk_data(x)` | `inherits(x, "data.frame")`

## Check Typeof

Function | Code
:- | :---
`chk_environment(x)` | `is.environment(x)`
`chk_list(x)` | `is.list(x)`
`chk_logical(x)` | `is.logical(x)`
`chk_double(x)` | `is.double(x)`
`chk_integer(x)` | `is.integer(x)`
`chk_character(x)` | `is.character(x)`

## Check NULLs

Function | Code
:- | :---
`chk_null(x)` | `is.null(x)`
`chk_not_null(x)` | `!is.null(x)`

## Check Ellipsis

Function | Code
:- | :---
`chk_used(...)` | `length(list(...)) != 0L`
`chk_unused(...)` | `length(list(...)) == 0L`

## Check Files

Function |  Code
:- | :---
`chk_file(x)` | `vld_string(x) && file.exists(x) && !dir.exists(x)`
`chk_ext(x, ext)` | `vld_string(x) && vld_subset(tools::file_ext(x), ext)`
`chk_dir(x)` | `vld_string(x) && dir.exists(x)`

## Check Miscellaneous

Function | Code
:- | :--
`chk_match(x, regexp = ".+")` | `all(grepl(regexp, x[!is.na(x)]))`
`chk_named(x)` |  `!is.null(names(x))`
`chk_not_empty(x)` |  `length(x) != 0L`
`chk_not_any_na(x)` |  `!anyNA(x)`
`chk_unique(x, incomparables = FALSE)` | `!anyDuplicated(x, incomparables = incomparables)`
`chk_sorted(x)` | `is.unsorted(x)`

## Check

**Function**    
`check_data(x, values = NULL, exclusive = FALSE, order = FALSE, nrow = numeric(0), key = character(0))`   

`check_dim(x, dim = length, values = numeric(0), dim_name = NULL)`   

`check_key(x, key = character(0), na_distinct = FALSE)`   

`check_names(x, names = character(0), exclusive = FALSE, order = FALSE)`    

`check_values(x, values)`    
