Test if all items in a vector or a list are identical.
all_identical(x, .p = identical, .ref = 1L, ...)a vector or a list
a predicate function of two arguments returning a logical.
Defaults to identical().
integer; index of element of x to which all the remaining
ones will be compared. Defaults to 1.
additional arguments passed to .p()
By default TRUE if all elements of x are identical to each
other, FALSE otherwise. In the general case, all_identical()
returns TRUE if and only if .p() returns TRUE for all the pairs
involving the first element and the remaining elements.
stopifnot(!all_identical(1:3))
stopifnot(all_identical(list("a", "a", "a")))
# Using with `all.equal()` has its quirks
# because of numerical tolerance:
x <- seq(
.Machine$double.eps,
.Machine$double.eps + 1.1 * sqrt(.Machine$double.eps),
length = 3
)
# Results with `all.equal()` are affected by ordering
all_identical(x, all.equal) # FALSE
#> [1] FALSE
all_identical(x[c(2,3,1)], all.equal) # TRUE
#> [1] TRUE
# ... because `all.equal()` is intransitive
all_identical(x[-3], all.equal) # is TRUE and
#> [1] TRUE
all_identical(x[-1], all.equal) # is TRUE, but
#> [1] TRUE
all_identical(x[-2], all.equal) # is FALSE
#> [1] FALSE