例如,考虑数据帧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)
}
又来了一个错误。我想要的是将循环变量i从v1运行到v3,但循环变量i实际上是“v1”到“v3”。我该如何处理这个问题?
我知道有一些其他的方式,如使用DF [我],而不是我在表现公式,但是,当我用newdata预测,这将导致错误:
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个变量。
真的希望得到您的回复!
将'print(fit)'中的公式与@ jlesuffleur的答案相比较。我的解决方案更安全,因为它避免了潜在的范围问题。 – Roland