R语言编写不调用min()/max()计算向量最值的自定义函数
R语言自定义同时返回向量最值的函数实现
需求
编写不调用内置min()、max()函数的R自定义函数,接收向量作为输入,同时返回向量的最小值、最大值,输出格式如下:
min max -2.078793 2.041260
原有代码问题
- 重复定义同名
minmax函数,后定义的函数会覆盖前序定义,最终只能返回单一最值,无法同时输出两个结果 - 最大值计算的初始值设置为0存在逻辑漏洞:若输入向量所有元素均小于0,会返回错误的计算结果
- 两次独立循环分别计算最值,存在不必要的性能损耗
正确实现代码
minmax <- function(x) { # 初始化最值:最小值初始为正无穷,最大值初始为负无穷,避免初始值带来的计算错误 my_min <- Inf my_max <- -Inf # 单次遍历同时更新最小值、最大值 for (val in x) { if (val < my_min) { my_min <- val } if (val > my_max) { my_max <- val } } # 按要求格式组装返回结果 result <- data.frame( min = my_min, max = my_max ) return(result) }
测试方法
# 生成测试用随机向量 vec <- rnorm(20) # 调用函数输出结果 minmax(vec)
运行后即可得到符合格式要求的最值输出。
注意:不要将最值初始值设置为0等固定常数,否则在输入向量元素全为正/全为负的场景下会得到错误结果,使用无穷值作为初始值可以适配所有数值型向量的计算场景。
内容的提问来源于stack exchange,提问作者user19485723
相关产品推荐
相关产品推荐

