在回归函数中使用列号作为因变量

时间:2019-04-26 09:19:05

标签: r

我陷入了这个编程问题。

我想为algae数据框中的7列(从12到18)创建一个回归树,但是我想使用循环来避免手工做7次相同的事情。我有以下代码:

library(DMwR)
data(algae)
algae<-algae[-manyNAs(algae),]
algae<-knnImputation(algae,k=10,meth="weighAvg")

library(rpart)

algae.rpart<-list()
for(i in 1:7){
  algae.rpart[[i]]<-rpart(algae[i+11]~.,data=algae)
}
algae.rpart

然后出现以下错误:

Error in model.frame.default(formula = algae[i + 11] ~ ., data = algae,  : 
  invalid type (list) for variable 'algae[i + 11]'

我该如何解决?

1 个答案:

答案 0 :(得分:1)

只需在此处添加逗号:algae[,i + 11]

为什么这样做?看到这里:

> class(algae[1])
[1] "data.frame"
> class(algae[,1])
[1] "factor"

algae[1]是一个列表(数据框是列表的特例),而algae[,1]是一个因子变量。

通常在教科书中(例如,Hadley Wickham的“ Advanced R”),您可以在列表(或数据框)和火车之间找到相似之处:如果list是火车,list[1]是第一个火车list[,1]是其货物的汽车(非常短的火车,但仍然是火车)。