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

R调用rlm函数拟合模型报错undefined columns selected如何解决?

你遇到的报错为:

"Error in [.data.frame(mf, xvars) : undefined columns selected"

报错原因与解决方案

该报错核心是rlm函数解析公式提取预测变量时,无法匹配到数据框中对应的列,可按以下步骤排查解决:

1. 确认依赖包正确加载

createDataPartition属于caret包,rlm属于MASS包,运行代码前需先加载两个包:

library(caret)
library(MASS)

如果未提前加载,可能出现函数调用冲突或参数解析错误。

2. 修复非标准列名问题(最常见诱因)

你生成的波长列名格式为852nm、854nm等,属于数字开头的非标准R变量名,公式Fat ~ .展开时会无法识别这类变量名,触发列选择错误。

修复方案一:修改列名为标准格式

在命名absorp列时增加前缀,避免数字开头:

# 把原来的列名赋值语句替换为这行
colnames(absorp) <- c(paste0('nm_', seq(852,1050,2)))

后续所有代码不需要其他修改,直接运行即可。

修复方案二:手动构造带反引号的公式

如果需要保留原列名,可手动构造公式,给所有波长列名包裹反引号:

# 构造公式前先确认train.absorp的列名和你定义的一致
x_vars <- paste0("`", colnames(train.absorp), "`", collapse = " + ")
rlm_formula <- as.formula(paste0("Fat ~ ", x_vars))
rlmFitAllPredictors <- rlm(rlm_formula, data = trainingData)

3. 验证训练集结构合法性

如果修改后仍然报错,运行以下代码检查训练集是否存在异常:

# 确认列数为101(100个波长特征+1个Fat响应变量)
print(ncol(trainingData))
# 确认不存在空列名
print(any(is.na(colnames(trainingData))))
# 确认不存在重复列名
print(any(duplicated(colnames(trainingData))))

如果返回结果不符合预期,需重新检查训练集拆分和拼接的代码逻辑。


内容的提问来源于stack exchange,提问作者Andrew Hughes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:27:04