2

私の素朴な質問をお許しください。

すべてのステップで返すループ、マトリックスがありbます。各ループの各行列を、反復回数に応じて別の名前で保存したいと思います。たとえば、最初の反復の最後に、という名前の行列を取得したいb1、2 番目の反復の最後に、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を持つものです。2 列目の要素の順序を並べ替えます。結果の は、元の の最初の列を最初の列として、 の置換された 2 番目の列を 2 番目の列として含む行列です。62matrix bmatrix aa

誰でも私を助けることができますか?

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 に答える