Test if all items in a vector or a list are identical.
Arguments
- x
a vector or a list
- .p
a predicate function of two arguments returning a logical. Defaults to
identical().- .ref
integer; index of element of
xto which all the remaining ones will be compared. Defaults to 1.- ...
additional arguments passed to
.p()
Value
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.
Examples
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