2017-07-19 25 views
2

我正在學習R並嘗試同時使用它進行統計分析。 在這裏,我在工作的第一部分:我正在寫矩陣,並與他們一起做一些簡單的事情,以便稍後與這些工作。使用For-Loop與字符串

punti<-c(0,1,2,4) 
t1<-matrix(c(-8,36,-8,-20,51,-17,-17,-17,57,-19,-19,-19,35,-8,-19,-8,0,0,0,0,-20,-20,-20,60, 
     -8,-8,-28,44,-8,-8,39,-23,-8,-19,35,-8,57,-8,-41,-8,-8,55,-8,-39,-8,-8,41,-25, 
     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),ncol=4,byrow=T) 
colnames(t1) <- c("20","1","28","19") 
r1<-matrix(c(12,1,19,9,20,20,11,20,20,11,20,28,0,0,0,12,19,19,20,19,28,15,28,19,11,28,1, 
     33,20,28,31,1,19,17,28,19,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA),ncol=3,byrow=T) 
pt1<-rbind(sort(colSums(t1)),sort(punti)) 
colnames(r1)<-c("Valore","Vincitore","Perdente") 
r1<-as.data.frame(r1) 

但我有更多的矩陣t_r_所以我想運行一個for循環,如:

for (i in 1:150) 
{ 
    pt[i]<-rbind(sort(colSums(t[i])),sort(punti)) 
    colnames(r[i])<-c("Valore","Vincitore","Perdente") 
    r[i]<-as.data.frame(r[i]) 
} 

這一個是行不通的,因爲r_t_pt_是字符串,但你得到這個想法,並且我會而不是喜歡複製粘貼這三行,並手動編輯[i] 150次。有沒有辦法做到這一點?

+2

歡迎來到StackOverflow!請記住讓你的例子*可重現*如果可能的話。也許你可以輸入數據對象的head()。 –

+2

作爲@ Hack-R的後續評論:請閱讀[如何在R中創建一個很好的重現示例](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r - 可重複的例子) – Masoud

+0

謝謝。我會添加需要的東西。我試圖儘可能保持最簡潔,因爲這不是問題,但是,是的,你是對的。 –

回答

0

我個人不建議在全球環境中動態地自動創建大量變量,並且建議您在沒有這種方法的情況下考慮如何實現目標。如果您覺得您真的需要動態創建所有這些變量,您可以從assign函數中受益。

它可以工作像這樣:

for (i in 1:150) 
{ 
assign(paste0('p',i),rbind(sort(colSums(t[i])),sort(punti))) 
} 

assign函數的第一個參數是爲變量名的公式以及它是如何創建的;第二個參數是你想要分配給正在創建的變量。

+0

我稍微修改了你的建議,因爲colSums(t [i])'不起作用'(t [i]中的錯誤:type of object'關閉'不可子集)'。我嘗試了'(我在1:150){assign(paste0('p',i),rbind(sort(colSums(paste0('t',i)),sort(punti)))}'但是它也不起作用。它報告colSums中的錯誤(paste0(「t」,i)):'x'必須至少是一個二維數組'(翻譯自意大利語,可能不是完美的翻譯) –