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

如何在公式对象中迭代数据框变量?构建逐步公式列表遇阻

问题解决:生成向前最优子集选择的公式列表

错误原因分析

你的代码中ordered_df_train$colnames(ordered_df_train)[j]写法错误,colnames()是独立函数,不能作为数据框的列调用。此外,直接赋值变量名无法生成有效的公式对象,需要构建包含响应变量和累计预测变量的公式。

修正后的代码

假设ordered_df_train第一列是响应变量crim,后续列是按随机森林重要性排序的预测变量,以下代码会生成逐步添加变量的公式列表:

library(MASS)
df_train <- Boston
ordered_df_train <- data.frame(
    crim = df_train$crim,
    age = df_train$age,
    nox = df_train$nox,
    tax = df_train$tax,
    indus = df_train$indus,
    dis = df_train$dis,
    rad = df_train$rad,
    black = df_train$black,
    rm = df_train$rm,
    lstat = df_train$lstat,
    zn = df_train$zn,
    ptratio = df_train$ptratio,
    medv = df_train$medv,
    chas = df_train$chas
)

# 提取预测变量名称(排除第一列的响应变量crim)
predictor_vars <- colnames(ordered_df_train)[-1]

# 初始化公式列表,长度等于预测变量数量
list_formula <- vector(mode = "list", length = length(predictor_vars))

# 迭代生成逐步添加变量的公式
for(k in 1:length(predictor_vars)){
    # 使用reformulate构建公式:响应变量crim + 前k个预测变量
    list_formula[[k]] <- reformulate(predictor_vars[1:k], response = "crim")
}

# 查看生成的公式
list_formula

代码说明

  • predictor_vars:提取所有预测变量名称,跳过第一列的crim。
  • reformulate():R中专门用于程序化构建公式的函数,第一个参数是预测变量向量,response参数指定响应变量名称,返回标准公式对象(如crim ~ age、crim ~ age + nox等)。
  • 循环每次迭代将前k个预测变量加入公式,实现向前逐步添加变量的效果。

验证输出

生成的公式可直接传入glm()或lda()函数使用:

# 示例:用第一个公式拟合glm
model1 <- glm(list_formula[[1]], data = ordered_df_train)

# 用第三个公式拟合lda
model3 <- lda(list_formula[[3]], data = ordered_df_train)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:50:44