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

如何用function()和for循环手动实现R语言的cummax函数?

手动实现R的cummax函数(基于for循环)

你的代码存在几个关键问题:

  • 循环遍历的是x的元素而非索引,导致x[i]的取值逻辑错误
  • 误用lag函数来追踪前一个最大值,这不是累积最大值的正确逻辑
  • 没有保存迭代结果,也没有返回最终的累积最大值向量

以下是修正后的实现:

x <- c(1,2,3,2,5,7,6,8,5)

my_cummax <- function(x) {
  # 处理空输入的情况
  if (length(x) == 0) return(numeric(0))
  
  # 初始化结果向量,长度和输入一致
  result <- numeric(length(x))
  # 第一个元素的累积最大值就是它本身
  current_max <- result[1] <- x[1]
  
  # 从第二个元素开始遍历
  for (i in seq_along(x)[-1]) {
    # 比较当前元素和当前最大值,更新最大值
    current_max <- max(current_max, x[i])
    # 将当前最大值存入结果向量对应位置
    result[i] <- current_max
  }
  
  # 返回最终结果
  return(result)
}

# 测试函数
my_cummax(x)
# 对比原生cummax结果
cummax(x)

运行后你会看到my_cummax(x)的输出和原生cummax(x)完全一致:

[1] 1 2 3 3 5 7 7 8 8

关键逻辑说明:

  • 维护一个current_max变量,实时记录遍历到当前位置时的最大值
  • 初始化结果向量,确保每个位置都能被赋值
  • 从第二个元素开始迭代,每次用max()更新当前最大值,并存入结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:50:29