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

如何编写类似which.min的函数,返回向量最小3个值对应的索引

获取向量最小3个值对应索引的R实现

直接使用R内置的order()函数即可高效实现需求,order(x)默认返回向量升序排列后的元素索引,取前3位就是最小3个值的对应索引:

which.min3 <- function(x) {
  head(order(x), 3)
}

效果验证

可以用测试向量确认函数输出符合预期:

test_vec <- c(5, 2, 7, 1, 3, 1, 4)
# 获取最小3个值的索引
min3_idx <- which.min3(test_vec)
print(min3_idx)
# 输出对应值验证结果
print(test_vec[min3_idx])

上述示例中,测试向量最小的两个值为第4、6位的1,第三小为第2位的2,函数返回索引为4 6 2,结果正确。

适配apply调用

该函数可以直接和apply()搭配使用,处理矩阵/数据框的按行/按列计算:

# 生成测试矩阵
test_mat <- matrix(rnorm(20), nrow = 4)
# 按行计算每行最小3个值的索引
apply(test_mat, 1, which.min3)

对齐原有minfunc逻辑的版本

如果你需要和你现有minfunc的逻辑对齐,即优先取3个不同的最小值,再返回每个最小值第一次出现的索引,可以使用下面的实现:

which.min3_unique <- function(x) {
  # 取排序后前3个不同的最小值
  min_vals <- unique(sort(x))[1:3]
  # 依次匹配每个最小值首次出现的索引
  sapply(min_vals, function(v) which(x == v)[1])
}

内容的提问来源于stack exchange,提问作者Leah Bevis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:45:10