sum()
The function sum() does one thing – summing up a numeric vector.
base::sum(1, 2, 3)
#> [1] 6If the caller passes sum() non-numeric values then the function fails.
base::sum(1, "2", 3)#> [1] "Error in base::sum(1, \"2\", 3) : invalid 'type' (character) of argument"
Using purrr::compose, purrr::safely, and purrr::pluck, we can alternate the behaviour of sum() to produce NA instead of failing:
# Decorating `sum` with failproof mechanism:
# 1. Return NA when sum fails
# 2. Extract the result
sum <- purrr::safely(base::sum, otherwise = NA_real_)
sum <- purrr::compose(sum, ~ purrr::pluck(.x, "result"), .dir = "forward") With the decorated sum() function, the behaviour for non-numeric values alters
The decorated sum() function is (a) failproof and (b) requires no changes in the codebase – without it, a programmer would have encapsulated sum() instances with tryCatch statement such as this: