2014-02-17 95 views
0

這是我正在嘗試做的一個非常簡化的版本。簡而言之,我創建了一些我想執行相同動作的矩陣,就像循環一樣。在這個例子中,我想打印每個矩陣的總結,但我不知道如何引用for循環中的矩陣。任何幫助深表感謝:對for循環中的多個表執行相同的操作

for (i in 1:3){ 
    x <- paste0('df', i) 
    assign(x, matrix(sample(1:10, 15, replace = TRUE), ncol = 3)) 
    print(summary(eval(x))) 
} 

返回(這是計算「DF3」作爲一個字符串):

Length  Class  Mode 
     1 character character 
    Length  Class  Mode 
     1 character character 
    Length  Class  Mode 
     1 character character 

我如何得到它返回以下?

 V1    V2   V3  
Min. : 1.0 Min. :3.0 Min. : 5 
1st Qu.: 5.0 1st Qu.:3.0 1st Qu.: 5 
Median : 6.0 Median :4.0 Median : 7 
Mean : 5.6 Mean :5.2 Mean : 7 
3rd Qu.: 6.0 3rd Qu.:7.0 3rd Qu.: 8 
Max. :10.0 Max. :9.0 Max. :10 

     V1   V2   V3  
Min. :2 Min. :1.0 Min. : 4.0 
1st Qu.:4 1st Qu.:3.0 1st Qu.: 4.0 
Median :7 Median :3.0 Median : 6.0 
Mean :6 Mean :3.4 Mean : 6.6 
3rd Qu.:8 3rd Qu.:4.0 3rd Qu.: 9.0 
Max. :9 Max. :6.0 Max. :10.0 

     V1   V2    V3  
Min. :1.0 Min. : 5.0 Min. :1.0 
1st Qu.:2.0 1st Qu.: 6.0 1st Qu.:2.0 
Median :6.0 Median : 6.0 Median :3.0 
Mean :5.2 Mean : 6.8 Mean :2.4 
3rd Qu.:8.0 3rd Qu.: 7.0 3rd Qu.:3.0 
Max. :9.0 Max. :10.0 Max. :3.0 
+1

你應該將你的對象保存到'list'而不是使用'assign' ......這是沒有必要的,它使得事情比他們需要的更加複雜。對術語也要謹慎:你的代碼顯示矩陣,你說的是「數據表」,那麼你真正感興趣的是什麼類型的對象? – Thomas

+0

@Thomas你是對的,編輯以反映你的評論 – n8sty

回答

5

不要使用不同的變量和paste他們的名字 - 把你的對象到一個列表:

x = Map(function (i) matrix(sample(1:10, 15, replace = TRUE), ncol = 3), 1 : 3) 

然後在執行常見的操作它們也是微不足道的:

Map(summary, x) 

Map將函數映射到列表上。它的運作類似於lapply and mapply family of functions

+0

'lapply'不會更直接適用在這種情況下,'Map'只是'mapply'的一個包裝,它是'(l/s)apply'的多變量版本。 – thelatemail

+0

@thelatemail我已經完全切換到'Map'(儘管我已經給它加了別名到'map')a作爲一個統一的替代方案'map'是除了R之外幾乎所有函數式語言中這個操作的既定名稱。真的不需要'lapply'或'mapply'來存在。在'Map'中與'lapply'相比,我特別不喜歡後者與'mapply'具有不同的參數順序 –

+0

公平的,我承認有一個以R爲中心的編程觀點,我喜歡能夠做事情像'lapply(x,「[」,1,)''獲得列表中每個矩陣的第一行,這需要類似於'Map(函數(y)y [1,],x)''。 – thelatemail

1

我認爲你可以使用eval(as.name("df3"))get("df3")

+0

如果你想要訪問的是列表中的一個變量或者列表中的某一列,上面提到的方法將不起作用(至少不是那麼簡單)一個數據幀。我努力使用存儲在列表變量中的值,並通過以下形式解決它:'L <-list(val.A = 1,val.B = 2); for(i in c(「 A「,」B「)as.numeric(L [paste(」val。「,i,sep =」「))] * 2'。希望它可以幫助別人! – PavoDive

相關問題