The following functions have in common that they return a
vector of logical
.
allAreEqual()
This function checks if all values in a vector are equal to each other:
allAreIdentical()
This function checks if all elements in a list are identical to each other. It may be useful when checking whether different versions of a function (that may, e.g., be created during code cleaning) return exactly the same, when being given the same inputs.
# Define different functions that are intended to do the same
get_list_1 <- function(a, b) list(a = a, b = b)
get_list_2 <- function(a, b) stats::setNames(list(a, b), c("a", "b"))
get_list_3 <- function(a, b) c(list(a = a), b = b)
get_list_4 <- function(a, b) c(list(a = a), list(b = b))
# Call the functions with identical arguments and put the results into a list
results <- list(
get_list_1(1, 2:3),
get_list_2(1, 2:3),
get_list_3(1, 2:3),
get_list_4(1, 2:3)
)
# Not all results are the same...
kwb.utils::allAreIdentical(results)
#> [1] FALSE
# ... but all except the third:
kwb.utils::allAreIdentical(results[-3])
#> [1] TRUE
almostEqual()
Take care when comparing floating point numbers! Whether floating point numbers are assumed to be equal or not, depends on how they were calculated. This is shown in the following example:
one_third_1 <- 1/3
one_third_2 <- 1 - 2/3
# Even though mathematically correct, they are not equal in R:
one_third_1 == one_third_2
#> [1] FALSE
With almostEqual()
numbers are compared by tolerating a
small difference between the numbers. This difference can be set with
the argument tolerance
.