例如,考虑数据帧df由3个变量v1,v2,v3组成。
v1=rnorm(10,mean=1,sd=2)
v2=rnorm(10,mean=2,sd=2)
v3=rnorm(10,mean=3,sd=2)
df=data.frame(v1,v2,v3)
现在我想用for循环进行线性回归:
for (i in names(df)){
fit <- lm(i~.,data=df)
}
出现错误。我想要的是从v1到v3运行循环变量i,但循环变量i实际上是&#34; v1&#34;到&#34; v3&#34;。我怎么处理这个?
我知道其他一些方法,例如在公式中使用df [,i]而不是i,但是,当我用新数据预测时,它会导致错误:
train <- df[1:5,]
test <- df[6:10,]
for (i in names(df)){
fit <- lm(train[,i]~.,data=train)
predict<- predict(fit,newdata=test[,!(colnames(test) %in% i)])
}
另外,我真的想用〜。而不是~v2 + v3,因为事实上我有200个变量。
真的希望你的回复!
答案 0 :(得分:1)
使用formula
:
for (i in names(df)){
form <- formula(paste0(i, "~."))
fit <- lm(form, data = df)
}
答案 1 :(得分:1)
计算语言:
for (i in names(df)){
y <- as.name(i)
fit <- eval(bquote(lm(.(y) ~ ., data = train)))
predict <- predict(fit, newdata = test)
}