2016-09-17 172 views
-2

我正在寫一個帶有三個循環的R代碼來生成大量的矩陣,我希望存儲所有這些矩陣。任務是對於每200個大型矩陣,我每次從左到右和從上到下取10×10的子矩陣。所有這些(200 * 790 * 790)大小的矩陣(10 * 10)都是我想要的。以下是我已經完成的:列表中的「多個」索引元素

# Define an empty list to store all submatrices 
sub.matrix = list() 

# for loop to generate and store all submatrices 
for(i in 1:200){ 
    for(j in 1:790){ 
    for(k in 1:790){ 
     sub.matrix[[i]][[j]][[k]] = main.matrix[[i]][j:(j+10), k:(k+10)] # QUESTION STARTS AT THE BEGINNING OF THIS LINE. 
    } 
    } 
} 

所以主要問題是我如何纔能有效地索引sub.matrix。不過,我覺得它應該是前面 「[我]] [[J]] [[K]]」,但是電腦告訴我的錯誤

錯誤*tmp* [J]]:標出來的界限。

我該如何解決這個問題,或者是否有任何其他方式「多」索引列表中的矩陣?

在此先感謝。被初始化

+0

'main.matrix'的定義在哪裏? –

+0

@ Hack-R他們是從我的筆記本電腦中讀取的多個矩陣。 – user132565

+0

正確的我只是說,在StackOverflow的R標籤中,我們需要*可重現的*示例... –

回答

0

sub.matrix需求,然後才能建立索引:

x <- list() 
x[[1]] 

錯誤X [[1]]:下標越界

的錯誤,當您嘗試發生要索引一個空列表,請嘗試以下內容(但我懷疑您的計算機是否有足夠的內存來存放該對象):

sub.matrix = vector(mode = "list", length = 200) 
for(i in 1:200){ 
    sub.matrix[[i]] = vector(mode = "list", length = 790) 
    for(j in 1:790){ 
     sub.matrix[[i]][[j]] = vector(mode = "list", length = 790) 
     for(k in 1:790){ 
      sub.matrix[[i]][[j]][[k]] = main.matrix[[i]][j:(j+10), k:(k+10)] 
     } 
    } 
} 
+0

感謝您的解決方案,我會嘗試這個。非常感謝! – user132565

+0

嗯...這是因爲矩陣數量太大,所以在我運行代碼後,約15分鐘後,R只是由於一些致命錯誤而終止。 :( – user132565

+0

可能是這樣,有些粗略的估計,也許是錯誤的,你的數據在內存中大約需要600GB,試試一個小的數據集 – Psidom

相關問題