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

R语言运行线性回归调用train()函数出现unexpected symbol报错问题

报错成因
  1. 函数括号未闭合:你写的mealLm、meatPCR对应的train()、as.formula()调用均漏写右括号,R解析代码时会默认未闭合的语句未结束,自动将下一行代码拼接进当前语句,最终识别到无法解析的符号,抛出unexpected symbol错误。
  2. 参数归属错误:混淆了caret::train()的两种调用逻辑,as.formula()仅接收公式表达式(如protein~.),你错误将train()的x、y、method等参数全部放入as.formula()的入参范围内,语法完全不符合规范。
  3. 变量引用错误:mealLm定义中引用的test数据集、meatPLS定义中引用的x/y对象均未提前定义,trControl参数错误传入函数名trainControl而非你提前定义好的ctrl对象。
修复方案

首先明确caret::train()的两种合法调用方式:

  • 公式接口:train(因变量~自变量, data = 包含所有变量的数据框, 其他参数),适合输入统一整合为一个数据框的场景
  • x/y接口:train(x = 自变量矩阵/数据框, y = 因变量向量, 其他参数),不需要套as.formula(),适合自变量、因变量分开存储的场景

修正后的对应代码段如下:

ctrl <- trainControl(method = "repeatedcv", repeats = 5)  

set.seed(529)
# 线性模型直接使用x/y接口调用
mealLm <- train(x = absorpTrain, y = proteinTrain, method = "lm", trControl = ctrl)

set.seed(529)
# PCR删除错误的as.formula嵌套,补全右括号
meatPCR <- train(x = absorpTrain, y = proteinTrain, method = "pcr", trControl = ctrl, tuneLength = 25)

set.seed(529)
# PLS替换为你实际定义的自变量、因变量对象
meatPLS <- train(x = absorpTrain, y = proteinTrain, method = "pls", trControl = ctrl, preProcess = c("center", "scale"), tuneLength = 25)

comps <- rbind(meatPLS$results, meatPCR$results)
comps$Model <- rep(c("PLS", "PCR"), each = 25)

另外你代码中混合了LaTeX图表语法(\caption、\end{figure}等),如果是在R脚本中运行需要删除这些非R代码片段,避免报错。

内容的提问来源于stack exchange,提问作者Cori R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:39:00