xj [i]出错:无效的下标类型'list'

时间:2016-02-21 06:53:41

标签: r

我尝试将数据(银行)拆分为培训数据和测试数据。但我在某种程度上得到了一个错误。我怎么能解决这个问题?

train = bank[1:100, ]
test = bank[!train,]
Status.test =Status[!train]
glm.fit=glm(Status~Length+Right+Bottom+Top+Diagonal,data=bank,family=binomial,subset=train)

#Error in xj[i] : invalid subscript type 'list'

glm.probs=predict(glm.fit,test,type="response") 
glm.pred=rep("genuine",100)  
glm.pred[glm.probs>.5]="counterfeit"
table(glm.pred,test)##classification on training data

#Error in table(glm.pred, test) : all arguments must have the same length

3 个答案:

答案 0 :(得分:6)

问题出在subset=train。根据{{​​1}}。 ?glm应该是一个向量,与原始数据集的子集相对:

  

子集一个可选向量,指定要观察的子集   用于拟合过程。

因此,您可能需要将代码更改为: subset

glm.fit=glm(Status~Length+Right+Bottom+Top+Diagonal,data=train,family=binomial)

答案 1 :(得分:0)

通常,您可以通过执行以下操作来实现您的要求: 假设列'响应'被观察到列:

samples=1:100
train = bank[samples, ]
test = bank[-samples,]
Status.test =bank[samples,'response']
顺便说一下,我建议使用sample()函数随机取样进行训练和测试。像这样:

samples=sample(nrow(bank), 0.8*nrow(bank))
train = bank[samples, ]
test = bank[-samples,]
Status.test =bank[samples,'response']

答案 2 :(得分:0)

如果您将训练数据设置为:

data[1: 100,]

然后在lm()函数中,使用参数:

data = bank[train,]

或者,您可以将火车设置为:

seq(1: 100)

作为索引序列,您需要在

中使用
lm(): data = bank, subset = train