![](/img/trans.png)
[英]Running lm() errror: Error in xj[i] : invalid subscript type 'list'
[英]Error in xj[i] : invalid subscript type 'list'
我試圖將數據(銀行)拆分為訓練數據和測試數據。 但是我不知何故在下面出現錯誤。我該如何解決這個問題?
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
問題出在subset=train
。 根據?glm
。 subset
應該是一個向量,與原始數據集的子集相反:
子集一個可選的向量,指定要在擬合過程中使用的觀察子集。
因此,您可能需要將代碼更改為: glm.fit=glm(Status~Length+Right+Bottom+Top+Diagonal,data=train,family=binomial)
或者
glm.fit=glm(Status~Length+Right+Bottom+Top+Diagonal,data=bank,family=binomial,subset=1:100)
通常,您可以通過執行以下操作來實現您的要求:假設列“響應”是觀察列:
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']
如果您將訓練數據設置為:
data[1: 100,]
然后在lm()
函數中使用參數:
data = bank[train,]
或者,您可以將火車設置為:
seq(1: 100)
作為索引序列,您需要在
lm(): data = bank, subset = train
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.