2016-10-19 71 views
0

我正在嘗試使用數組,但似乎無法爲我的數據創建一個數組。我有14個矩陣我想放在一個數組中,但我不知道如何在不手動編寫c(m1,m2,m3 ...)是我的嘗試:在r中使用大量矩陣製作數組

m_list <- mget(paste0("well_", 0:13)) ###to make a list of all my matrices 

a <- array(c(m_list), 
     dim = c(7338, 15, 14)) 

但是當我嘗試看看我創建的東西數組是不正確的使用它,因爲我嘗試調用一個值,就像這樣:

print(a[1,4,2]) 

,但我獲取整個專欄。

我假設錯誤出現在矩陣列表中。請幫助

+0

'do.call(C,m_list)';也檢查了abind軟件包。 – Roland

回答

0

對您的問題的回答是,您應該使用do.call(c, m_list)而不是c(m_list)。 (以兩個小矩陣爲例,並嘗試查看c(m_list)c(m1, m2)返回的結果。)

另外,您可能想要考慮一下使用數組是否比使用列表更好,更重要的是,如何使用數組避免首先有多個矩陣,而是直接讀取/定義它們作爲列表或數組。

+0

謝謝,它的工作:)。我想我必須錯誤地調用數據,但不熟悉這個'do.call'函數。 – BStat

+0

我正在嘗試改進我的代碼,我正在努力工作,但在幾天內無處可去:/。我仍然不善於申請家庭和循環(儘管我已經被告知儘可能避免循環)。所以你說的是我可以直接使用'm_list'開始工作? – BStat

+0

@BStat,是的,有時候這可能是一個好主意。這取決於你下一步要做什麼。出於學習目的,您甚至可以將數據作爲數組和列表同時顯示,並查看您遇到的差異。 – Julius

0

您可以簡單地在您的array函數調用中使用unlist而不是c

a = array(unlist(m_list), dim = c(dim(m_list[[1]]), length(m_list))) 

一些可再生的數據:

m1 = matrix(1:5, 5, 5) 
m2 = matrix(5:1, 5, 5) 
m_list = list(m1, m2)