如何使用get()构造变量的复杂模型

时间:2018-07-23 18:30:06

标签: r function evaluation

我知道如何使用get()通过变量动态构建模型,例如:

dvar="myResponse"
ivar="someIndependentVariable"
family="binomial"
myGLM <- glm(data=ds, get(dvar) ~ get(ivar),family=myFamily)

当然,这对于循环遍历变量列表非常方便-您可以在for()循环中为它提供一系列独立变量,并查看许多不同的模型。我的问题是,我将如何使用get()eval()或一些类似的命令来创建更复杂的调用?例如,假设我在列表中有两个自变量:

dvar="myResponse"
ivar=c("independentVar1","independentVar2")

最后我想要的是:

myGLM<-glm(data=ds, myResponse ~ independentVar1 + independentVar2)

我知道我可以使用三个get()语句来做到这一点,因为我只有1个因变量和2个自变量,但是对于n项自变量列表,有通用的方法吗?基本上,我要做的是逐步回归,但是我对caretMASS等中的任何现有选项都不满意。

1 个答案:

答案 0 :(得分:4)

您要?reformulate ...

dvar="myResponse"
ivar <- c("independentVar1","independentVar2")
form <- reformulate(ivar, response=dvar)
glm(form, myFamily = family_string, data= ...)

作为一般规则

    使用reformulate()或直接操纵公式(使用quote()substitute()as.symbol()等)的
  • 解决方案比更加习惯/安全/可靠。 ..
  • 基于字符串的解决方案(deparse() / as.formula()),它比...更惯用/更安全/更可靠。
  • 具有[m]get()eval()等的解决方案...

(由于reformulate()实际上是基于字符串的,但是由于它是一个内置函数,所以我实际上在这里有点作弊。)