【问题标题】:"Multi-"indexing elements in a list列表中的“多”索引元素
【发布时间】:2016-09-17 23:42:07
【问题描述】:

我正在编写一个包含三个循环的 R 代码来生成大量矩阵,我希望存储所有这些矩阵。任务是对于每 200 个大矩阵,我每次从左到右和从上到下取一个 10 x 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。我虽然应该如上“[[i]][[j]][[k]]”,但是电脑告诉我错误

*tmp*[[j]] 中的错误:下标越界。

我该如何解决这个问题,或者有没有其他方法可以“多”索引此类列表中的矩阵?

提前致谢。

【问题讨论】:

  • main.matrix 是在哪里定义的?
  • @Hack-R 它们是从我的笔记本电脑读取的多个矩阵。
  • 对,我只是说在 StackOverflow 的 R 标签上,我们需要一个 reproducible 示例...

标签: r list matrix


【解决方案1】:

您的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)] 
        }
    }
} 

【讨论】:

  • 感谢您的解决方案,我会试试这个。非常感谢!
  • hmm... 是不是因为矩阵的数量太大,所以在我运行代码后,大约 15 分钟后,R 只是由于一些致命错误而终止。 :(
  • 它可能是。一些粗略的估计,可能是错误的,您的数据需要大约 600GB 的内存。尝试一个小数据集。
  • 我可能会尝试将第一个循环分成小块。
猜你喜欢
  • 2013-12-03
  • 2020-08-25
  • 2021-11-25
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多