R:如何在数据帧的提取符号$中使用循环变量i?

时间:2017-08-02 07:01:13

标签: r for-loop linear-regression

例如,考虑数据帧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个变量。

真的希望你的回复!

2 个答案:

答案 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)
}