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

R语言如何不使用for循环获取向量的历史最大值对应的位置索引

R语言无循环获取历史最大值位置的实现方案

最简实现

直接使用R内置的cummax(累计最大值)函数配合which即可一行完成需求:

vector <- c(3, 2,2,3,4,3,9,5,2,3,4,6,120,1)
result <- which(vector == cummax(vector))

运行后result的输出为[1] 1 5 7 13,和你示例需要的结果完全一致。

实现逻辑

cummax函数会按顺序返回向量每个位置对应的历史最大值,当且仅当当前位置的元素是新的历史最大值时,该位置的元素值才会等于cummax返回的累计最大值,用which提取符合条件的索引即可。

可选实现(基于差值判断)

如果你需要单独识别新最大值出现的节点,也可以结合diff函数实现:

result <- c(1, which(diff(cummax(vector)) > 0) + 1)

该方法通过计算累计最大值的差值,筛选出差值大于0的位置(即出现新最大值的位置),补全索引偏移后再加上第一个位置的1,输出结果和上述方法完全一致。

注意事项

你原有for循环代码中使用max作为变量名属于不规范写法,max是R内置函数名,用作变量名容易引发命名冲突,建议替换为current_max这类自定义名称。


内容的提问来源于stack exchange,提问作者Alejandro Molina Moctezuma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:06:04