1#' Do every, some, or none of the elements of a list satisfy a predicate? 2#' 3#' @inheritParams map 4#' @param .p A predicate function to apply on each element of `.x`. 5#' `some()` returns `TRUE` when `.p` is `TRUE` for at least one 6#' element. `every()` returns `TRUE` when `.p` is `TRUE` for all 7#' elements. `none()` returns `TRUE` when `.p` is `FALSE` for all 8#' elements.` 9#' @param ... Additional arguments passed on to `.p`. 10#' @return A logical vector of length 1. 11#' @export 12#' @examples 13#' y <- list(0:10, 5.5) 14#' y %>% every(is.numeric) 15#' y %>% every(is.integer) 16#' y %>% some(is.integer) 17#' y %>% none(is.character) 18every <- function(.x, .p, ...) { 19 .p <- as_predicate(.p, ..., .mapper = TRUE, .deprecate = TRUE) 20 21 for (i in seq_along(.x)) { 22 val <- .p(.x[[i]], ...) 23 if (is_false(val)) return(FALSE) 24 if (anyNA(val)) return(NA) 25 } 26 27 TRUE 28} 29 30#' @export 31#' @rdname every 32some <- function(.x, .p, ...) { 33 .p <- as_predicate(.p, ..., .mapper = TRUE, .deprecate = TRUE) 34 35 val <- FALSE 36 for (i in seq_along(.x)) { 37 val <- val || .p(.x[[i]], ...) 38 if (is_true(val)) return(TRUE) 39 } 40 41 val 42} 43 44#' @export 45#' @rdname every 46none <- function(.x, .p, ...) { 47 every(.x, negate(.p), ...) 48} 49