2014-03-27 96 views
1

我有一組名爲gof_1_1gof_1_2,......,gof_1_24的矩陣。我想把它們全部合併到列中的一個矩陣中。所以我使用下面的代碼按名稱組合矩陣

do.call(cbind,mget(ls(pattern = paste("gof",1,"[0-9]",sep="_"), globalenv()))) 

它結合了矩陣,但問題是它們沒有按順序。他們走這樣gof_1_1,gof_1_11,gof_1_12,.....,gof_1_19,gof_1_2gof_1_21等等。所以我編輯了ls()如下圖所示

ls(pattern = paste("gof",1,"[0-9][0-9]",sep="_"),globalenv()) 

現在是爲了,但它從gof_1_10開始,到gof_1_25。缺少gof_1_1gof_1_9。任何想法如何編輯上面的一個按順序調用所有的矩陣?

回答

3

你可以這樣做:

do.call(cbind, mget(paste0("gof_1_", 1:24))) 

否則,一些複雜的東西:

mat.names <- ls(pattern = paste("gof", 1, "[0-9]", sep="_"), globalenv()) 
mat.idx  <- as.integer(gsub(".*_", "", mat.names)) 
sorted.names <- mat.names[order(mat.idx)] 
do.call(cbind, mget(sorted.names)) 
+0

第一個是perfect.I認爲首先,我做了不必要的複雜事情。感謝您的簡單解決方案@ flodel – user3420448

2

到paste0功能的替代方法:

do.call(cbind, mget(sprintf("gof_1_%s", 1:24))) 
+0

謝謝@droopy的替代方案。 – user3420448