2016-09-17 171 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

相关问题