gpt4 book ai didi

r - 更改公式中变量的名称

转载 作者:行者123 更新时间:2023-12-01 11:00:21 24 4
gpt4 key购买 nike

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

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

最佳答案

下面是一种方法的演示。更复杂的实现可能会更新拟合线性模型(请参阅 ?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

关于r - 更改公式中变量的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11510976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com