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

R语言调用pcr函数建模时报错'data'需为数据框/环境/列表如何解决

错误根因

触发该报错有两个核心问题:

  1. 训练集选取逻辑错误:你定义train时只筛选了charges单列,pcr()的模型公式需要同时用到因变量charges和自变量age、bmi、children、smoker,训练集缺失全部自变量列本身就无法完成建模。
  2. 数据类型自动转换问题:R中用[ ]索引数据框时,如果筛选结果仅包含1列,会默认将数据框降维为原子向量,不符合pcr()对data参数必须为数据框/列表/环境的要求,直接触发你看到的错误提示。
排查步骤
  • 运行class(train)查看训练集类型,如果返回值为"numeric"/"integer"等向量类型,即可确认发生了非预期的自动降维。
  • 运行colnames(train)查看训练集包含的列,核对是否覆盖模型公式中声明的全部变量。
修复后代码
# 先加载pcr函数所属的pls包,未安装请先运行install.packages("pls")
library(pls)

#define training and testing sets
set.seed(555)
# 修正:训练集纳入所有建模需要的变量,多列选取时不会触发自动降维
train <- df2[1:800, c("charges","age","bmi","children","smoker")]
y_test <- df2[801:nrow(df2), c("charges")]
test <- df2[801:nrow(df2), c("age","bmi","children","smoker")]
   
#use model to make predictions on a test set
model <- pcr(charges~age+bmi+children+smoker, data = train, scale=TRUE, validation="CV")
pcr_pred <- predict(model, test, ncomp = 4)

#calculate RMSE
sqrt(mean((pcr_pred - y_test)^2))
注意事项
  • 如果后续需要选取数据框单列且保留数据框结构,在索引时添加drop = FALSE参数即可,示例:single_col_df <- raw_df[, "col_name", drop = FALSE]。
  • 主成分回归预测阶段传入的测试集仅需要包含全部自变量,不需要因变量列,这部分原有写法逻辑正确。

内容的提问来源于stack exchange,提问作者W.tan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:45:44