我有一个运行多个模型的循环
library(MuMIn)
options(na.action = "na.fail")
dat = iris
listX = names(iris[,3:4]
listY = names(iris[,1:2]
for (y in listY){
fm1 <- lm(dat[[y]] ~ dat[[listX[1]]] + dat[[listX[2]]], data=dat)
dd = dredge(fm1)
print(dd)
}
当我运行时,print(dd)
的输出会显示给定的变量名称,例如dat[[listX[2]]]
等。
如何更改代码,以便可以在模型中看到变量的实际名称,就好像我已经为每个循环编写了完整的变量名称,例如
fm1 <- lm(Sepal.length ~ Petal.Length + Petal.Width, data=dat)
答案 0 :(得分:1)
只需使用for
在paste
循环中撰写公式。
for (y in listY){
fmla <- as.formula(paste(y, paste(listX[1], listX[2], sep = "+"), sep = "~"))
fm1 <- lm(fmla, data=dat, na.action = na.pass)
dd = dredge(fm1)
print(dd)
}
注意:
library
开始您的示例,
dredge
不是base R
包,而是MuMIn
包。na.action = na.pass
的调用中使用lm
才能执行dredge
。 修改强>
正如评论中提到的lmo,reformulate
比嵌套的paste
指令简单易读。然后循环将成为:
for (y in listY){
fmla <- reformulate(listX, y)
fm1 <- lm(fmla, data=dat, na.action = na.pass)
dd = dredge(fm1)
print(dd)
}