You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:45:03