forked from tidyverse/purrr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathevery-some.R
39 lines (34 loc) · 990 Bytes
/
every-some.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#' Do every or some elements of a list satisfy a predicate?
#'
#' @inheritParams map
#' @param .p A predicate function to apply on each element of `.x`.
#' `some()` returns `TRUE` when `.p` is `TRUE` for at least one
#' element. `every()` returns `TRUE` when `.p` is `TRUE` for all
#' elements.
#' @param ... Additional arguments passed on to `.p`.
#' @return A logical vector of length 1.
#' @export
#' @examples
#' y <- list(0:10, 5.5)
#' y %>% every(is.numeric)
#' y %>% every(is.integer)
every <- function(.x, .p, ...) {
.p <- as_predicate(.p, ..., .mapper = TRUE, .deprecate = TRUE)
for (i in seq_along(.x)) {
val <- .p(.x[[i]], ...)
if (is_false(val)) return(FALSE)
if (anyNA(val)) return(NA)
}
TRUE
}
#' @export
#' @rdname every
some <- function(.x, .p, ...) {
.p <- as_predicate(.p, ..., .mapper = TRUE, .deprecate = TRUE)
val <- FALSE
for (i in seq_along(.x)) {
val <- val || .p(.x[[i]], ...)
if (is_true(val)) return(TRUE)
}
val
}