library (rlang)
get_chunk_width <- function (options) {
options$ out.width %||% paste0 ((options$ fig.width / (options$ fig.retina %||% 1 )), 'px' )
}
# Standalone file: do not edit by hand
# Source: <https://github.com/r-lib/rlang/blob/main/R/standalone-types-check.R>
# ----------------------------------------------------------------------
#
# ---
# repo: r-lib/rlang
# file: standalone-types-check.R
# last-updated: 2023-03-13
# license: https://unlicense.org
# dependencies: standalone-obj-type.R
# imports: rlang (>= 1.1.0)
# ---
#
# ## Changelog
#
# 2023-03-13:
# - Improved error messages of number checkers (@teunbrand)
# - Added `allow_infinite` argument to `check_number_whole()` (@mgirlich).
# - Added `check_data_frame()` (@mgirlich).
#
# 2023-03-07:
# - Added dependency on rlang (>= 1.1.0).
#
# 2023-02-15:
# - Added `check_logical()`.
#
# - `check_bool()`, `check_number_whole()`, and
# `check_number_decimal()` are now implemented in C.
#
# - For efficiency, `check_number_whole()` and
# `check_number_decimal()` now take a `NULL` default for `min` and
# `max`. This makes it possible to bypass unnecessary type-checking
# and comparisons in the default case of no bounds checks.
#
# 2022-10-07:
# - `check_number_whole()` and `_decimal()` no longer treat
# non-numeric types such as factors or dates as numbers. Numeric
# types are detected with `is.numeric()`.
#
# 2022-10-04:
# - Added `check_name()` that forbids the empty string.
# `check_string()` allows the empty string by default.
#
# 2022-09-28:
# - Removed `what` arguments.
# - Added `allow_na` and `allow_null` arguments.
# - Added `allow_decimal` and `allow_infinite` arguments.
# - Improved errors with absent arguments.
#
#
# 2022-09-16:
# - Unprefixed usage of rlang functions with `rlang::` to
# avoid onLoad issues when called from rlang (#1482).
#
# 2022-08-11:
# - Added changelog.
#
# nocov start
# Scalars -----------------------------------------------------------------
.standalone_types_check_dot_call <- .Call
check_bool <- function (x,
...,
allow_na = FALSE ,
allow_null = FALSE ,
arg = caller_arg (x),
call = caller_env ()) {
if (! missing (x) && .standalone_types_check_dot_call (ffi_standalone_is_bool_1.0.7 , x, allow_na, allow_null)) {
return (invisible (NULL ))
}
stop_input_type (
x,
c ("`TRUE`" , "`FALSE`" ),
...,
allow_na = allow_na,
allow_null = allow_null,
arg = arg,
call = call
)
}
check_string <- function (x,
...,
allow_empty = TRUE ,
allow_na = FALSE ,
allow_null = FALSE ,
arg = caller_arg (x),
call = caller_env ()) {
if (! missing (x)) {
is_string <- .rlang_check_is_string (
x,
allow_empty = allow_empty,
allow_na = allow_na,
allow_null = allow_null
)
if (is_string) {
return (invisible (NULL ))
}
}
stop_input_type (
x,
"a single string" ,
...,
allow_na = allow_na,
allow_null = allow_null,
arg = arg,
call = call
)
}
.rlang_check_is_string <- function (x,
allow_empty,
allow_na,
allow_null) {
if (is_string (x)) {
if (allow_empty || ! is_string (x, "" )) {
return (TRUE )
}
}
if (allow_null && is_null (x)) {
return (TRUE )
}
if (allow_na && (identical (x, NA ) || identical (x, na_chr))) {
return (TRUE )
}
FALSE
}
check_name <- function (x,
...,
allow_null = FALSE ,
arg = caller_arg (x),
call = caller_env ()) {
if (! missing (x)) {
is_string <- .rlang_check_is_string (
x,
allow_empty = FALSE ,
allow_na = FALSE ,
allow_null = allow_null
)
if (is_string) {
return (invisible (NULL ))
}
}
stop_input_type (
x,
"a valid name" ,
...,
allow_na = FALSE ,
allow_null = allow_null,
arg = arg,
call = call
)
}
IS_NUMBER_true <- 0
IS_NUMBER_false <- 1
IS_NUMBER_oob <- 2
check_number_decimal <- function (x,
...,
min = NULL ,
max = NULL ,
allow_infinite = TRUE ,
allow_na = FALSE ,
allow_null = FALSE ,
arg = caller_arg (x),
call = caller_env ()) {
if (missing (x)) {
exit_code <- IS_NUMBER_false
} else if (0 == (exit_code <- .standalone_types_check_dot_call (
ffi_standalone_check_number_1.0.7 ,
x,
allow_decimal = TRUE ,
min,
max,
allow_infinite,
allow_na,
allow_null
))) {
return (invisible (NULL ))
}
.stop_not_number (
x,
...,
exit_code = exit_code,
allow_decimal = TRUE ,
min = min,
max = max,
allow_na = allow_na,
allow_null = allow_null,
arg = arg,
call = call
)
}
check_number_whole <- function (x,
...,
min = NULL ,
max = NULL ,
allow_infinite = FALSE ,
allow_na = FALSE ,
allow_null = FALSE ,
arg = caller_arg (x),
call = caller_env ()) {
if (missing (x)) {
exit_code <- IS_NUMBER_false
} else if (0 == (exit_code <- .standalone_types_check_dot_call (
ffi_standalone_check_number_1.0.7 ,
x,
allow_decimal = FALSE ,
min,
max,
allow_infinite,
allow_na,
allow_null
))) {
return (invisible (NULL ))
}
.stop_not_number (
x,
...,
exit_code = exit_code,
allow_decimal = FALSE ,
min = min,
max = max,
allow_na = allow_na,
allow_null = allow_null,
arg = arg,
call = call
)
}
.stop_not_number <- function (x,
...,
exit_code,
allow_decimal,
min,
max,
allow_na,
allow_null,
arg,
call) {
if (allow_decimal) {
what <- "a number"
} else {
what <- "a whole number"
}
if (exit_code == IS_NUMBER_oob) {
min <- min %||% - Inf
max <- max %||% Inf
if (min > - Inf && max < Inf ) {
what <- sprintf ("%s between %s and %s" , what, min, max)
} else if (x < min) {
what <- sprintf ("%s larger than or equal to %s" , what, min)
} else if (x > max) {
what <- sprintf ("%s smaller than or equal to %s" , what, max)
} else {
abort ("Unexpected state in OOB check" , .internal = TRUE )
}
}
stop_input_type (
x,
what,
...,
allow_na = allow_na,
allow_null = allow_null,
arg = arg,
call = call
)
}
check_symbol <- function (x,
...,
allow_null = FALSE ,
arg = caller_arg (x),
call = caller_env ()) {
if (! missing (x)) {
if (is_symbol (x)) {
return (invisible (NULL ))
}
if (allow_null && is_null (x)) {
return (invisible (NULL ))
}
}
stop_input_type (
x,
"a symbol" ,
...,
allow_na = FALSE ,
allow_null = allow_null,
arg = arg,
call = call
)
}
check_arg <- function (x,
...,
allow_null = FALSE ,
arg = caller_arg (x),
call = caller_env ()) {
if (! missing (x)) {
if (is_symbol (x)) {
return (invisible (NULL ))
}
if (allow_null && is_null (x)) {
return (invisible (NULL ))
}
}
stop_input_type (
x,
"an argument name" ,
...,
allow_na = FALSE ,
allow_null = allow_null,
arg = arg,
call = call
)
}
check_call <- function (x,
...,
allow_null = FALSE ,
arg = caller_arg (x),
call = caller_env ()) {
if (! missing (x)) {
if (is_call (x)) {
return (invisible (NULL ))
}
if (allow_null && is_null (x)) {
return (invisible (NULL ))
}
}
stop_input_type (
x,
"a defused call" ,
...,
allow_na = FALSE ,
allow_null = allow_null,
arg = arg,
call = call
)
}
check_environment <- function (x,
...,
allow_null = FALSE ,
arg = caller_arg (x),
call = caller_env ()) {
if (! missing (x)) {
if (is_environment (x)) {
return (invisible (NULL ))
}
if (allow_null && is_null (x)) {
return (invisible (NULL ))
}
}
stop_input_type (
x,
"an environment" ,
...,
allow_na = FALSE ,
allow_null = allow_null,
arg = arg,
call = call
)
}
check_function <- function (x,
...,
allow_null = FALSE ,
arg = caller_arg (x),
call = caller_env ()) {
if (! missing (x)) {
if (is_function (x)) {
return (invisible (NULL ))
}
if (allow_null && is_null (x)) {
return (invisible (NULL ))
}
}
stop_input_type (
x,
"a function" ,
...,
allow_na = FALSE ,
allow_null = allow_null,
arg = arg,
call = call
)
}
check_closure <- function (x,
...,
allow_null = FALSE ,
arg = caller_arg (x),
call = caller_env ()) {
if (! missing (x)) {
if (is_closure (x)) {
return (invisible (NULL ))
}
if (allow_null && is_null (x)) {
return (invisible (NULL ))
}
}
stop_input_type (
x,
"an R function" ,
...,
allow_na = FALSE ,
allow_null = allow_null,
arg = arg,
call = call
)
}
check_formula <- function (x,
...,
allow_null = FALSE ,
arg = caller_arg (x),
call = caller_env ()) {
if (! missing (x)) {
if (is_formula (x)) {
return (invisible (NULL ))
}
if (allow_null && is_null (x)) {
return (invisible (NULL ))
}
}
stop_input_type (
x,
"a formula" ,
...,
allow_na = FALSE ,
allow_null = allow_null,
arg = arg,
call = call
)
}
# Vectors -----------------------------------------------------------------
check_character <- function (x,
...,
allow_null = FALSE ,
arg = caller_arg (x),
call = caller_env ()) {
if (! missing (x)) {
if (is_character (x)) {
return (invisible (NULL ))
}
if (allow_null && is_null (x)) {
return (invisible (NULL ))
}
}
stop_input_type (
x,
"a character vector" ,
...,
allow_na = FALSE ,
allow_null = allow_null,
arg = arg,
call = call
)
}
check_logical <- function (x,
...,
allow_null = FALSE ,
arg = caller_arg (x),
call = caller_env ()) {
if (! missing (x)) {
if (is_logical (x)) {
return (invisible (NULL ))
}
if (allow_null && is_null (x)) {
return (invisible (NULL ))
}
}
stop_input_type (
x,
"a logical vector" ,
...,
allow_na = FALSE ,
allow_null = allow_null,
arg = arg,
call = call
)
}
check_data_frame <- function (x,
...,
allow_null = FALSE ,
arg = caller_arg (x),
call = caller_env ()) {
if (! missing (x)) {
if (is.data.frame (x)) {
return (invisible (NULL ))
}
if (allow_null && is_null (x)) {
return (invisible (NULL ))
}
}
stop_input_type (
x,
"a data frame" ,
...,
allow_null = allow_null,
arg = arg,
call = call
)
}
# nocov end