Есть несколько вопросов о том, как найти номер из списка, ближайший к заданному номеру. Эти ответы, которые в основном включают либо which
, либо which.min
, являются двусторонними, поэтому они возвращают число из списка, наиболее близкое к заданному числу, независимо от того, больше это число или меньше заданного числа.
Я бы хотел, чтобы возвращаемое число было больше, чем данное число, если само данное число не появится в списке. Эта функция работает, но есть ли способ попроще?
viable_numbers <- c(15, Inf, 5, 10, 5)
picker <- function(x, viable_numbers) {
if (x %in% viable_numbers) {
return(x)
} else {
viable_numbers <- sort(unique(viable_numbers))
return(viable_numbers[findInterval(x, viable_numbers) + 1])
}
}
picker(x = 1, viable_numbers = viable_numbers)
[1] 5 # works
picker(x = 5, viable_numbers = viable_numbers)
[1] 5 # works
picker(x = 6, viable_numbers = viable_numbers)
[1] 10 # also works
picker(x = 20, viable_numbers = viable_numbers)
[1] Inf # still working
Я предпочитаю решение base
, но я также открыт для ответа tidyverse
.