2015-04-08 116 views
0

我目前處於多元聚類和分類工作的統計類中。對於我們的作業,我們試圖使用10倍交叉驗證來測試不同分類方法在具有三個分類的6個可變數據集上的精確度。我希望能夠創建一個for循環(或其他更好的,我不知道的)來創建和運行10個分類和驗證,所以我不必在每件事上重複自己10次....這是我的。它會運行,但前兩個矩陣只顯示第一個變量。因此,我無法排除其他部分的故障。使用「for」循環創建多個矩陣

index<-sample(1:10,90,rep=TRUE) 
table(index) 
training=NULL 
leave=NULL 
Trfootball=NULL 
football.pred=NULL 
for(i in 1:10){ 
training[i]<-football[index!=i,] 
leave[i]<-football[index==i,] 
Trfootball[i]<-rpart(V1~., data=training[i], method="class") 
football.pred[i]<- predict(Trfootball[i], leave[i], type="class") 
table(Actual=leave[i]$"V1", classfied=football.pred[i])} 

刪除「[i]」,並以1:10的替換它們現在個別工程....

+0

什麼是足球?你能展示它是什麼以及它包含什麼? –

+0

我認爲你可以創建'Trfootball','leave','training','football.pred'等列表,即Trfootball < - vector('list',10)',然後在'for'循環中。使用'[[i]]'(沒有測試沒有一個可重複的例子) – akrun

+0

原始數據足球是一個7x90的矩陣,第一列有1-3類,觀測數據有6個變量來填補剩下的數據。以下是足球數據的例子。 set.seed(90) v1 = sample(1:3,90,rep = TRUE) v2 = sample(3:46,90,rep = TRUE) v3 = sample(7:20,90,rep = TRUE) v4 =樣本(6:12,90,rep = TRUE) v5 =樣本(5:15,90,rep = TRUE) v6 =樣本(11:15,90,rep = TRUE) v7 =樣本(1:18,90,rep = TRUE) football = cbind(V1,V2,V3,V4,V5,V6,V7) –

回答

0

你的問題所在是一個data.framematrix爲矢量分配您最初設置爲NULLtrainingleave)。一種思考的方法是,你試圖將整個矩陣擠進一個只能取一個數字的元素。這就是爲什麼R與您的代碼有問題。您需要初始化trainingleave,以便能夠處理您的值的迭代聚集(作爲@akrun指出的R對象list)。

下面的例子應該給你什麼正在發生的事情的感覺,什麼可以做,以解決您的問題:

a<-NULL # your set up at the moment 
print(a) # NULL as expected 
# your football data is either data.frame or matrix 
# try assigning those objects to the first element of a: 
a[1]<-data.frame(1:10,11:20) # no good 
a[1]<-matrix(1:10,nrow=2) # no good either 
print(a) 

## create "a" upfront, instead of an empty object 
# what you need: 
a<-vector(mode="list",length=10) 
print(a) # empty list with 10 locations 
## to assign and extract elements out of a list, use the "[[" double brackets 
a[[1]]<-data.frame(1:10,11:20) 
#access data.frame in "a" 
a[1] ## no good 
a[[1]] ## what you need to extract the first element of the list 
## how does it look when you add an extra element? 
a[[2]]<-matrix(1:10,nrow=2) 
print(a)