R语言编写分段函数运行输出异常的原因及修复方法
问题原因
- 核心错误是区间运算逻辑编写失误:规则要求x落在[2,6]区间时返回2倍x(写规则时漏了乘号,把
x*2简写为x2),但代码里误写为x^2(x的平方),导致该区间内除x=2(2*2和2²计算结果恰好相等)之外的所有输入结果都不符合预期,比如测试值5按规则应该返回10,实际返回了25。 - 输出里的科学计数法格式不是计算错误,是R默认的数值显示规则:大数值会自动转成科学计数法展示,如果当前环境里-4、25这类小数值也显示为科学计数法,只是全局显示参数设置的问题,不影响实际计算结果的正确性。
修复方案
- 将中间分支的返回值从
x^2改为2*x即可,修正后的完整函数代码如下:
piecewise <- function(x){ return(ifelse(x < 2, x - 5, ifelse(x > 6, x^9, 2*x))) }
- 运行测试代码验证结果:
x <- c(1,20,5,2,30) piecewise(x)
修正后返回结果为-4 512000000000 10 4 19683000000000,完全匹配规则要求。
- 如果不需要科学计数法显示,在运行代码前执行一次
options(scipen = 999),即可强制R用普通小数格式展示所有数值。
内容的提问来源于stack exchange,提问作者Shawn Hemelstrand
相关产品推荐
相关产品推荐

