如何修复R语言countConsecutivePairs函数编写出现的各类报错?
R函数countConsecutivePairs修复方案
原有代码的错误汇总
- 语法错误:
stop("Error"、print(c(z[i],z[i+1])两处缺少右闭合括号,加载代码时就会触发语法报错 - 命名不符合要求:需求规定函数名为
countConsecutivePairs,原有代码拼写为countConsecutivepairs,大小写不匹配 - 入参校验逻辑不严谨:使用
class(z)!="numeric"判断数值类型会漏掉整数型向量等合法数值类输入,同时错误提示信息不明确,用户无法知道报错原因 - 循环逻辑错误:
for(i in z)是遍历向量的元素值而非下标,读取z[i]时会出现下标越界、取值完全不符合预期的问题 - 功能逻辑偏离需求:需求是统计差值小于2的连续元素对总数,原有代码判断条件为差值不等于2,且无计数逻辑,仅打印符合条件的元素对
正确实现代码
countConsecutivePairs <- function(z) { # 入参合法性校验 if (!is.vector(z)) { stop("入参必须为向量类型") } if (!is.numeric(z)) { stop("入参必须为数值型向量") } # 长度不足2的向量没有连续元素对,直接返回0 vec_len <- length(z) if (vec_len < 2) { return(0) } # 向量化计算相邻元素差值绝对值,统计符合条件的数量 abs_diff <- abs(diff(z)) return(sum(abs_diff < 2)) }
测试用例
# 测试1:正常数值向量,连续对差值为1、3、0、2,符合<2的共3个 countConsecutivePairs(c(3,4,7,7,9)) # 输出结果:3 # 测试2:非向量入参,触发报错 countConsecutivePairs(matrix(1:4, nrow=2)) # 报错:入参必须为向量类型 # 测试3:非数值向量入参,触发报错 countConsecutivePairs(c("a","b","c")) # 报错:入参必须为数值型向量
内容的提问来源于stack exchange,提问作者Ace123
相关产品推荐
相关产品推荐

