R语言while循环中顺序追加回归公式项报错解决方案
原代码报错原因
- 核心问题是变量类型被意外覆盖:初始时
predictor是存储变量名的字符串,第一次循环执行predictor <- reformulate(...)后,这个变量直接被替换成了公式类对象,不再是字符串类型。 - 第二次循环执行时,
reformulate要求传入的termlabels参数必须是字符向量,但此时传入的第一个元素是公式对象,无法被识别为合法的项名称,因此触发'termlabels' must be a character vector of length at least one报错。
修改后实现逐次追加公式项的代码
逻辑上将「原始预测变量名」「公式项列表」「生成的公式对象」三类值分开存储,避免互相覆盖:
# 先加载glue依赖 library(glue) i <- 0 # 固定存储原始预测变量名称,全程不修改 pred_raw <- "test" # 初始化公式项的字符向量,先放入一阶原始项 formula_terms <- pred_raw while(i < 7){ i <- i + 1 # 往项向量里追加当前次幂的多项式项 formula_terms <- c(formula_terms, glue("I({pred_raw}^{i})")) # 单独生成当前迭代的公式,不覆盖存储项/变量名的变量 current_formula <- reformulate(formula_terms, response = "go") print(current_formula) }
运行效果
执行上述代码后会逐次输出追加了对应幂次项的公式,完全匹配预期:
# 第一次迭代输出 go ~ test + I(test^1) # 第二次迭代输出 go ~ test + I(test^1) + I(test^2) # 第三次迭代输出 go ~ test + I(test^1) + I(test^2) + I(test^3) # 后续迭代依次追加,直到第七次输出最终完整公式 go ~ test + I(test^1) + I(test^2) + I(test^3) + I(test^4) + I(test^5) + I(test^6) + I(test^7)
补充:你之前用
poly()实现的写法是每次迭代重新生成对应阶数的多项式,拟合效果和逐次追加项的逻辑等价,但上述修改后的while代码完全实现了最初「每次迭代在已有公式基础上追加新项」的需求。
内容的提问来源于stack exchange,提问作者Emil11
相关产品推荐
相关产品推荐

