2

请原谅我的幼稚问题。

我有一个循环,每一步都返回一个 matrix b。我想根据迭代次数以不同的名称保存每个循环中的每个矩阵。例如,在第一次迭代结束时,我想得到名为的矩阵b1,在第二次迭代结束时,b2等等......

例如,让我们使用以下代码:

count=0
a=matrix(c(1,2,3,4,5,6,7,8,9,10,11,12), nrow=6)
for (count in 1:10)  {
  b<-cbind(a[,1],matrix(c( a[sample(nrow(a)),2]), nrow=nrow(a)) ) 
  print(b)
}
count+1

在这里,原始矩阵是matrix a具有6行和2列的。我排列了第二列中元素的顺序。结果matrix b, 是包含原始的第一列的第一列matrix a和第二列的排列的第二列的矩阵a

谁能帮我?

4

3 回答 3

3

您真的不想将它们存储为单独的变量 - 将它们保留为 10 个矩阵的列表会更好。这可以很容易地使用replicate

lst = replicate(10, cbind(a[,1],matrix(c( a[sample(nrow(a)),2]), nrow=nrow(a)) ),
          simplify=FALSE)

然后,您可以访问 10 个矩阵中的任何一个,如下所示:

lst[[1]]
#     [,1] [,2]
#[1,]    1    7
#[2,]    2   10
#[3,]    3   11
#[4,]    4    8
#[5,]    5    9
#[6,]    6   12

同样,您可以像这样遍历它们:

for (m in lst) {
    print(m)
    # do something with your matrix m
}
于 2013-02-15T16:00:35.550 回答
1

正如在其他选项中所说,最好使用列表。这是一个sapply用于获得漂亮命名结果的版本:

 res <- sapply(paste('b',1:10,sep=''), 
           function(x) cbind(a[,1],matrix(c( a[sample(nrow(a)),2]), nrow=nrow(a)) ),
       simplify=F)

然后以获取矩阵b5为例,

res$b5

   [,1] [,2]
[1,]    1    9
[2,]    2    7
[3,]    3    8
[4,]    4   11
[5,]    5   10
[6,]    6   12
于 2013-02-15T16:40:25.990 回答
1

如前所述,列表是一个更好的选择。但是,如果您仍想将每个交互保存在不同的变量上,您可以使用assign()

count=0
a=matrix(c(1,2,3,4,5,6,7,8,9,10,11,12), nrow=6)
for (count in 1:10)  {
  assign(paste('b',count,sep=''),cbind(a[,1],matrix(c( a[sample(nrow(a)),2]), nrow=nrow(a))))
}
b1
b2
于 2013-02-15T16:04:29.307 回答