关于如何从列表中查找哪个数字最接近给定数字,存在几个 问题。这些答案大多涉及两面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
回答。
您可以选择等于或大于x的可行数字子集的最小值:
picker <- function(x, viable_numbers) {
min(viable_numbers[viable_numbers >= x])
}
picker(x = 1, viable_numbers = viable_numbers)
[1] 5
picker(x = 5, viable_numbers = viable_numbers)
[1] 5
picker(x = 6, viable_numbers = viable_numbers)
[1] 10
picker(x = 20, viable_numbers = viable_numbers)
[1] Inf
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句