搜索了幾個不同的主題,但沒有找到完全相同的問題。我有一個平方相關矩陣,其中行/列名稱是基因。下面的矩陣切片。如何使用for循環從矩陣中提取特定單元格?
Xelaev15073085m Xelaev15073088m Xelaev15073090m Xelaev15073095m
Xelaev15000002m 0.1250128 -0.6368677 0.3119062 0.3980826
Xelaev15000006m 0.4127414 -0.8805597 0.6435158 0.9629489
Xelaev15000007m 0.4012530 -0.8854113 0.6425895 0.9614517
我有一個數據幀,有我想從這個大矩陣中提取的基因對。
V1 V2
1 Xelaev15011657m Xelaev15017932m
2 Xelaev15011587m Xelaev15046612m
3 Xelaev15011594m Xelaev15046616m
4 Xelaev15011597m Xelaev15046617m
5 Xelaev15011603m Xelaev15046624m
6 Xelaev15011654m Xelaev15017928m
(比較Xelaev15073085m
和Xelaev15000002m
當例如值0.1250128)我試圖遍歷該數據幀,並輸出一對matrix["gene1","gene2"]
的基質細胞。在單個基因的基礎上做這件事很容易,但是我嘗試在for循環中爲這個列表中的成千上萬對執行此操作失敗。在下面的例子中,頭像列表是上面數據框的一個樣本,FullcorSM是完整的相關矩陣。
for(i in headedlist$V1){
data.frame(i, headedlist[i,2], FullcorSM[i,headedlist[i,2]])
}
上述行是我的第一次嘗試,並返回null。我的第二次嘗試如下所示。
for(i in 1:nrow(stagelist)){
write.table(data.frame(stagelist$V1, stagelist$V2, FullcorSM["stagelist$V1","stagelist$V2"]),
file="sampleout",
sep="\t",quote=F)
}
其中返回超出界限的錯誤。要做FullcorSM["stagelist$V1", "stagelist$V2"]
部分沒有引號的第二個例子,返回第一列每列的第二列的所有值,更接近我想要的,但仍缺少關於R如何解釋我的矩陣/數據幀語法的一些知識,但我不清楚該修復是什麼。有關如何進行的任何見解?
我懷疑'匹配'和矩陣索引可以讓你做到這一點只需幾行,沒有循環。儘管沒有[可重現的例子](http://stackoverflow.com/q/5963269/210673),但很難編寫代碼來提供幫助。 – Aaron
關於矩陣的好處:你實際上只需要做'FullcorSM [as.matrix(headslist)]',你就可以得到一個向量值。 (*只要*,即頭列表中的所有值實際上都以矩陣中的列和/或行名顯示)。 –
還要注意,你的第一次嘗試只返回NULL的原因是因爲你實際上並沒有在循環中選擇每個值。孤立中的'for'循環只是函數(就像R中的大多數其他事物一樣),而'NULL'是默認的返回值。這取決於你將價值分配給某些東西以保存它們。否則,R將簡單地查看每個值,並說「是的,它在那裏!」並繼續前進。 – joran