为何运行R代码时出现`mutate()`列`regression1`相关报错?
报错原因
- 核心原因是变量名冲突:你定义的线性回归模型对象名为
regression1,在mutate()生成预测值列时也用了相同名字。dplyr执行时会优先在当前数据框的作用域内查找变量,导致predict()读取到的是刚生成的数值型预测列,而非你之前构建的lm类模型,因此触发“没有适用的predict方法”报错。 - 同时你的代码还存在另外几处逻辑错误:
- 你的预测目标是葡萄酒质量
quality,但调用rmse()计算误差时错误使用了不存在的price列作为真实值,即使解决了第一个报错,后续运行也会报错 - 管道使用不规范:
mutate()行末尾的%>%会将修改后的测试集数据直接传入下一个函数,你下一行又手动把my_type_test作为rmse()的第一个参数,属于重复传参 - 代码里多次调用
install.packages()安装已有的包,没必要且会拖慢运行速度
- 你的预测目标是葡萄酒质量
解决方法
调整预测列的名字,避免和模型对象重名,同时修正rmse的参数和管道逻辑即可,修正后的代码如下:
# 包加载只需要执行一次,不需要每次运行都安装 library(rsample) library(caret) library(yardstick) library(tidyverse) # 数据拆分 my_type_split <- initial_split(my_type, prop = 0.7) my_type_train <- training(my_type_split) my_type_test <- testing(my_type_split) # 训练线性回归模型 regression1 <- lm( formula = quality ~ fixed.acidity + volatile.acidity + citric.acid + chlorides + free.sulfur.dioxide + total.sulfur.dioxide + density + pH + sulphates + alcohol, data = my_type_train ) summary(regression1) # 生成预测值+计算RMSE # 方法1:分开写,逻辑更清晰 my_type_test <- my_type_test %>% mutate(pred_quality = predict(regression1, newdata = my_type_test)) rmse(my_type_test, truth = quality, estimate = pred_quality) # 方法2:用管道连贯执行,不需要手动赋值中间结果 my_type_test %>% mutate(pred_quality = predict(regression1, newdata = .)) %>% rmse(truth = quality, estimate = pred_quality)
内容的提问来源于stack exchange,提问作者Crystal
相关产品推荐
相关产品推荐

