R/check.R

Defines functions try_recycle is_scalar check_scalar_lgl check_numeric check_func

check_func <- function(..., .f) {
  all(sapply(list(...), .f))
}

check_numeric <- function(...) {
  if (!check_func(..., .f = is.numeric)) {
    cnd_signal(tri_error_numeric(...))
  }
}

check_scalar_lgl <- function(...) {
  if (!check_func(
    ...,
    .f = function(x) {
      length(x) == 1 && is.logical(x)
    }
  )) {
    if (length(list(...)) == 1) {
      cnd_signal(tri_error_logical(...))
    } else {
      cnd_signal(tri_error_logical2(...))
    }
  }
}

is_scalar <- function(...) {
  check_func(
    ...,
    .f = function(x) {
      length(x) == 1
    }
  )
}

try_recycle <- function(f, ..., .f = length) {
  p <- tryCatch({
    vec_recycle_common(..., .size = .f(f))
  }, error = function(c) {
    cnd_signal(tri_error_recycle(f, ...))
  })
  p_nm <- sapply(substitute(list(...)), deparse)[-1]
  names(p) <- p_nm
  list2env(p, envir = parent.frame())
}

Try the triangulr package in your browser

Any scripts or data that you put into this service are public.

triangulr documentation built on May 27, 2021, 9:10 a.m.