如何使用update函数动态更换回归公式的因变量并生成对应公式?
问题解决方法
原代码跑不通的核心问题有俩:
assign的逻辑搞反了:你先拿assign创建了变量,但转头又把equ_name重新赋值成update的结果,等于之前的赋值白忙活;而且assign返回的是被赋值的字符串,不是变量引用,根本没法后续操作。update里直接用paste拼出来的是字符串,没转成公式对象,R识别不了这是个公式结构。
修正后的代码
给你两种可行的写法:
写法一:改进原有的update用法
depend <- c('a', 'b', 'c') 1_equ <- d~e for (i in depend) { # 把字符串转成公式,再用update替换因变量 new_formula <- update(1_equ, as.formula(paste(i, "~ ."))) # 把生成的公式存到指定变量里 assign(paste0("1_equ_", i), new_formula) }
写法二:用reformulate直接生成公式(更简洁)
如果不需要依赖原公式的结构,直接生成新公式更省事:
depend <- c('a', 'b', 'c') # 原公式的自变量是e,直接指定就行 indep_vars <- "e" for (i in depend) { new_formula <- reformulate(indep_vars, response = i) assign(paste0("1_equ_", i), new_formula) }
验证效果
跑完代码后,查看生成的变量:
1_equ_a # 输出:a ~ e 1_equ_b # 输出:b ~ e 1_equ_c # 输出:c ~ e
重点提醒
- 必须用
as.formula()把字符串转成公式对象,update才能正确识别并修改公式。 assign要放在update之后,确保把生成的公式对象存到目标变量里,别搞反顺序。reformulate是R专门用来生成公式的函数,参数分别是自变量和因变量,代码更清晰。
内容的提问来源于stack exchange,提问作者whoiswho
相关产品推荐
相关产品推荐

