请原谅我天真的问题。
我有一个循环,每个步骤返回一个矩阵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
的置换第二列。
任何人都可以帮助我吗?
答案 0 :(得分: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
}
答案 1 :(得分: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
答案 2 :(得分: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