[英]Iterating and looping over multiple columns in glm in r using a name from another variable
我正在尝试为 R 中的 glm 函数迭代多个列。
view(mtcars)
names <- names(mtcars[-c(1,2)])
for(i in 1:length(names)){
print(paste0("Starting iterations for ",names[i]))
model <- glm(mpg ~ cyl + paste0(names[i]), data=mtcars, family = gaussian())
summary(model)
print(paste0("Iterations for ",names[i], " finished"))
}
但是,我收到以下错误:
[1] "Starting iterations for disp"
Error in model.frame.default(formula = mpg ~ cyl + paste0(names[i]), data = mtcars, :
variable lengths differ (found for 'paste0(names[i])')
不确定,我该如何纠正。
mpg ~ cyl + paste0(names[i])
甚至mpg ~ cyl + names[i]
不是公式的有效语法。 利用
reformulate(c("cyl", names[i]), "mpg")
相反,它从变量名称动态创建公式。
由于您需要从字符串动态构建模型公式,因此您需要as.formula
。 或者,考虑reformulate
接收响应和 RHS 变量名称:
...
fml <- reformulate(c("cyl", names[i]), "mpg")
model <- glm(fml, data=mtcars, family = gaussian())
summary(model)
...
glm 采用您可以使用 as.formula() 创建的公式
predictors <- names(mtcars[-c(1,2)])
for(predictor in predictors){
print(paste0("Starting iterations for ",predictor))
model <- glm(as.formula(paste0("mpg ~ cyl + ",predictor)),
data=mtcars,
family = gaussian())
print(summary(model))
print(paste0("Iterations for ",predictor, " finished"))
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.