2011-07-26 108 views
1

我在這裏有嵌套for循環的代碼。我希望得到的輸出是由嵌套循環產生的矩陣列的平均值的矩陣。所以,內部循環應該運行一個隨機向量的1000次模擬,並且每次運行一個函數。這工作正常,並將輸出吐入R.但我想將輸出從嵌套循環保存到一個對象(1000行和11列的矩陣),然後僅打印該矩陣的colMeans,以由外部循環執行。從R的雙循環打印對象

我認爲問題在於我將內部循環的結果賦值給obj矩陣的步驟。我已經嘗試了obj [i,],obj [i],obj [[i]]等所有的變體,但沒有成功。 R告訴我它只是一個維度的對象。

x=ACexp 

obj=matrix(nrow=1000,ncol=11,byrow=T)   #create an empty matrix to dump results into 
for(i in 1:ncol(x)){       #nested for loops  
    a=rep(1,times=i)        #repeat 1 for 1:# columns in x  
    b=rep(0,times=(ncol(x)-length(a)))   #have the rest of the vector be 0  
    Inv=append(a,b)        #append these two for the Inv vector  
    for (i in 1:1000){       #run this vector through the simulations  
     Inv2=sample(Inv,replace=FALSE)   #randomize interactions  
     temp2=rbind(x,Inv2)  
     obj[i]<-property(temp2)     #print results to obj matrix  
    }  
print.table(colMeans(obj))     #get colMeans and print to excel file  
} 

任何想法如何解決這個問題?

回答

1

您正在重複將整個矩陣打印到屏幕上,因爲它會被修改,但您的註釋顯示爲「打印到excel文件」。我猜你實際上是想將數據保存到文件中。刪除print.table命令一起,之後你的循環完成使用write.table()

write.table(colMeans(obj), 'myNewMatrixFile.csv', quote = FALSE, sep = ',', row.names = FALSE) 

(我的首選選項...看?write.table選擇你喜歡的)

0

由於你的代碼不可複製,我們不能完全告訴你想要什麼。但是,我猜這個房產正在返回一個你想要放在obj矩陣的右側行/列中的單個數字,你可以把它稱爲obj[row,col]。但是你會遇到問題,因爲你的循環都使用相同的索引i。也許這樣的事情會爲你工作。

obj <- matrix(nrow=1000,ncol=11,byrow=T)  #create an empty matrix to dump results into 
for(i in 1:ncol(x)){       #nested for loops  
    Inv <- rep(c(1,0), times=c(i, ncol(x)-i)) #repeat 1 for 1:# columns in x, then 0's 
    for (j in 1:nrow(obj)){      #run this vector through the simulations  
     Inv2 <- sample(Inv,replace=FALSE)  #randomize interactions  
     temp2 <- rbind(x,Inv2)  
     obj[j,i] <- property(temp2)    #save results in obj matrix  
    }  
} 
write.csv(colMeans(obj), 'myFile.csv')   #get colMeans and print to csv file