我知道如何使用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项自变量列表,有通用的方法吗?基本上,我要做的是逐步回归,但是我对caret
,MASS
等中的任何现有选项都不满意。
答案 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()
实际上是基于字符串的,但是由于它是一个内置函数,所以我实际上在这里有点作弊。)