我陷入了这个编程问题。
我想为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]'
我该如何解决?
答案 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]
是其货物的汽车(非常短的火车,但仍然是火车)。