更改公式中变量的名称

jbr*_*yer 3 r

我正在尝试创建通用函数来处理具有多个合理值的数据框.我想要的是将公式传递给函数以执行回归,例如:

f <- MRPCM ~ DSEX + IEP + ELL3 + SDRACEM + PARED

MRPCM变量实际上并不存在于数据框中.取而代之的五个变量,MRPCM1,MRPCM2,MRPCM3,MRPCM4,和MRPCM5确实存在.我想要做的是迭代并更新公式(f这里)以创建五个公式.可以这样做吗?该update.formula功能似乎一次在整个左侧或右侧.我还应该注意,在这个例子中,我希望改变的变量是因变量,因此update(f, MRPCM1 ~ .)可行.但是,我不知道变量在公式中出现的位置.

例如:

f <- MRPCM + DSEX ~ IEP + ELL3 + SDRACEM + PARED

update.formula(f, as.formula('MRPCM1 ~ .'))

结果(注意DSEX现在缺失):

MRPCM1 ~ IEP + ELL3 + SDRACEM + PARED

Jos*_*ien 6

这是一种方法的演示.更复杂的实现可能会更新拟合的线性模型(请参阅参考资料?update),但这超出了您问题的直接范围.

## Make a reproducible example!!
df <- 
setNames(as.data.frame(matrix(rnorm(96), ncol=8)), 
         c("MRPCM1","MRPCM2","MRPCM3","DSEX","IEP", "ELL3","SDRACEM","PARED"))

## Construct a template formula
f <- MRPCM ~ DSEX + IEP + ELL3 + SDRACEM + PARED

## Workhorse function
iterlm <- function(formula, data) {
    ## Find columns in data matching pattern on left hand side of formula
    LHSpat <- deparse(formula[[2]])
    LHSvars <- grep(LHSpat, names(data), value = TRUE)
    ## Run through matchded columns, repeatedly updating the formula,
    ## fitting linear model, and extracting whatever results you want. 
    sapply(LHSvars, FUN=function(var) {
        uf <- update.formula(f, as.formula(paste(var, "~ .")))
        coef(lm(uf, df))
    })
}

## Try it
iterlm(f, df)
##                  MRPCM1     MRPCM2      MRPCM3
## (Intercept)  0.71638942 -0.3883355  0.22202700
## DSEX        -0.07048994 -0.7478064  0.62590580
## IEP         -0.22716821 -0.2381982  0.12205780
## ELL3        -0.44492392  0.1720344  0.41251561
## SDRACEM      0.21629235  0.4800773  0.02866802
## PARED        0.07885683 -0.2582598 -0.07996121
Run Code Online (Sandbox Code Playgroud)