如何在公式对象中迭代数据框变量?构建逐步公式列表遇阻
问题解决:生成向前最优子集选择的公式列表
错误原因分析
你的代码中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
相关产品推荐
相关产品推荐

