如何用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
相关产品推荐
相关产品推荐

