R语言如何设置lm模型summary输出数值保留4位小数并解决相关报错
报错原因
你收到non-numeric argument to binary operator报错的核心原因是format()函数返回的是字符类型结果,你直接修改了fit对象里原本为数值型的coefficients和residuals字段,后续summary.lm()调用时需要对这些字段做数值运算,就触发了类型不匹配的报错。
正确实现方案
方案1:原生打印控制(最简单)
不需要修改原始fit模型对象,直接在打印summary结果时指定输出精度即可,完全不会影响后续模型的其他使用:
fit <- lm(formula = `Stock Price` ~ `Market Index Return`, data = combinedata) # 直接指定打印时保留4位有效数字,可满足绝大多数场景需求 print(summary(fit), digits = 4)
方案2:强制固定4位小数(适配特殊格式要求)
如果你需要强制所有数值都保留4位小数(哪怕末尾是0),可以对summary返回的结果对象单独做格式化处理,同样不会修改原始模型:
# 提取summary结果对象 sum_fit <- summary(fit) # 格式化残差五数统计 sum_fit$residuals <- structure( format(round(sum_fit$residuals, 4), nsmall = 4), names = names(sum_fit$residuals) ) # 格式化系数表的所有数值列 sum_fit$coefficients[, 1:4] <- apply(sum_fit$coefficients[, 1:4], 2, function(x) { round(x, 4) }) # 格式化模型拟合指标 sum_fit$sigma <- round(sum_fit$sigma, 4) sum_fit$r.squared <- round(sum_fit$r.squared, 4) sum_fit$adj.r.squared <- round(sum_fit$adj.r.squared, 4) sum_fit$fstatistic[1] <- round(sum_fit$fstatistic[1], 4) # 打印处理后的结果,指定digits=4确保末尾0正常展示 print(sum_fit, digits = 4)
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

