【问题标题】:How to create loops for random matrices如何为随机矩阵创建循环
【发布时间】:2019-05-19 10:51:24
【问题描述】:

我正在尝试创建一个循环,以便创建 1000 个随机 2x2 矩阵(范围在 -10 到 10 之间)

目前为止

M = matrix(c(z = runif(4,min = -10, max = 10)),
           nrow = 2, ncol = 2, byrow = TRUE)

我尝试使用 k=1000

for (i in 1:k) {
  if (i>=0) print (i) else (print(-i)
}

【问题讨论】:

  • 谢谢!但是有没有办法合并我提供的循环代码?我的教授希望我们专门使用他提供的代码提示——k=1000, for (i in 1:k),....
  • 也是因为我的教授希望我们使用代码 [eig=eigen(M)] 但它与您提供的代码不兼容
  • 试试k <- 1000; out <- vector("list", length = k); for(i in 1:k) { out[[i]] <- matrix(runif(4, min = -10, max = 10), nrow = 2, ncol = 2) }; out别忘了设置种子。
  • 好的,非常感谢!我现在就试试:)
  • 我不知道为什么当我试图找到随机矩阵的特征值时这个错误不断弹出。我使用了 eig=eigen(out) 并一直说“eigen(out) 中的错误:'eigen' 中的非方阵”

标签: r loops matrix


【解决方案1】:

你不需要 for.loops 来实现它。 您可以使用lapply 来执行此操作。这样您就可以创建一个包含矩阵的列表:

set.seed(1)
lapply(1:3, function(z) matrix(runif(4, min = -10, max = 10), nrow = 2, ncol = 2))
[[1]]
          [,1]     [,2]
[1,] -4.689827 1.457067
[2,] -2.557522 8.164156

[[2]]
          [,1]     [,2]
[1,] -5.966361 8.893505
[2,]  7.967794 3.215956

[[3]]
          [,1]      [,2]
[1,]  2.582281 -5.880509
[2,] -8.764275 -6.468865

为了创建 1000 个矩阵,请使用 1:1000 而不是 1:3

如果您坚持使用循环,您可以使用 cmets 的 Markus 解决方案:

k <- 1000
out <- vector("list", length = k)
set.seed(1)
for (i in 1:k) { 
  out[[i]] <- matrix(runif(4, min = -10, max = 10), nrow = 2, ncol = 2) 
}
out

【讨论】: