You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查找特定数值在递增numeric vector中的相对位置?

实现递增数值向量的位置查找函数

给定一个递增排列的数值向量,示例如下:

vec <- c(13.5, 13.9, 14.2, 14.5, 14.8, 15.2, 16.0, 16.9, 17.4, 17.8, 18.3, 18.7, 19.4)

需求是写一个函数f(),输入目标数字后返回其在向量中的相对位置,效果示例:

  • 输入f(13, vec),返回'< 13.5'
  • 输入f(15.0, vec),返回'14.8 <= x < 15.2'

函数实现

f <- function(x, vec) {
  idx <- findInterval(x, vec)
  if (idx == 0) {
    paste0('< ', vec[1])
  } else if (idx == length(vec)) {
    paste0(vec[length(vec)], ' <= ')
  } else {
    paste0(vec[idx], ' <= x < ', vec[idx + 1])
  }
}

测试验证

# 初始化示例向量
vec <- c(13.5, 13.9, 14.2, 14.5, 14.8, 15.2, 16.0, 16.9, 17.4, 17.8, 18.3, 18.7, 19.4)

# 测试小于最小元素的情况
f(13, vec)
# 输出: "< 13.5"

# 测试中间区间的情况
f(15.0, vec)
# 输出: "14.8 <= x < 15.2"

# 测试等于最大元素的情况
f(19.4, vec)
# 输出: "19.4 <= "

# 测试大于最大元素的情况
f(20, vec)
# 输出: "19.4 <= "

逻辑说明

  • 借助R内置的findInterval()函数快速定位目标值在有序向量中的区间索引,该函数针对有序向量做了优化,查找效率高
  • 根据索引值判断三种场景:目标小于所有元素、目标处于两个元素之间、目标大于等于最后一个元素
  • 用paste0()拼接成符合要求的字符串格式

内容的提问来源于stack exchange,提问作者Peong Gang Park

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:50:36