2013-04-30 67 views
0

我有12點矩陣PV1 ... PV12。我需要根據列表中的TF2Gene的名稱來更改它們的名稱。所以我必須重複這個過程12次。我如何在循環中引用這些矩陣,以便我只需運行一個循環而不是單獨調用它們中的每一個?如何引用多個矩陣在一個循環

colnames(pV1)<-names(TF2Gene) 
colnames(pV2)<-names(TF2Gene) 
colnames(pV3)<-names(TF2Gene) 
colnames(pV4)<-names(TF2Gene) 
colnames(pV5)<-names(TF2Gene) 
colnames(pV6)<-names(TF2Gene) 
colnames(pV7)<-names(TF2Gene) 
colnames(pV8)<-names(TF2Gene) 
colnames(pV9)<-names(TF2Gene) 
colnames(pV10)<-names(TF2Gene) 
colnames(pV11)<-names(TF2Gene) 
colnames(pV12)<-names(TF2Gene) 

此外,我必須產生24點矩陣和必須調用低於24倍, 任何較短的方式命令?

exprN1.meth.pv <- matrix(nrow=8,ncol=44) 
exprN2.meth.pv <- matrix(nrow=8,ncol=44) 
exprN4.meth.pv <- matrix(nrow=8,ncol=44) 

回答

1

把它們放在一個列表中。然後,您可以循環遍歷該列表,或者循環遍歷索引,或循環遍歷列表元素本身。

或者更好的是,你可以在列表中使用lapplysapply等。

如果矩陣被類似結構,我建議一個陣列(沿着第三維陣列的所以每個「片」是當前的2D矩陣中的一個),因爲它會更快。

編輯:如何把它們放在一個列表

,最好的辦法就是在首位的列表來創建它們。但是,如果你想採取你已經得到的,首先生成一個字符向量,其中的名稱。

matNames <- paste0("pV",seq(12)) 

然後用get

listOfMat <- lapply(matNames, function(mn) get(mn)) 

然後,您可以用它們命名爲:

names(listOfMat) <- matNames 
+0

謝謝,關於矩陣構建?這可能嗎? – 2013-04-30 17:22:00

+0

'lapply(1:4,matrix,nrow = 8,ncol = 44)'給出了24個矩陣的列表。 – Roland 2013-04-30 17:24:31

+0

感謝羅蘭,但再次爲每個生成的矩陣,我必須重新命名它的權利? – 2013-04-30 17:40:26