2016-06-21 22 views
3

私は10次元複製を10回繰り返して、3次元配列を作成します。ここで、配列の各スライスは、 2次元配列。だから、2次元マトリックスを複製して3次元配列を作成する(R)

、私の2D配列があることをした場合:

a <- matrix(c(1:4),nrow=2) 
> a 
    [,1] [,2] 
[1,] 1 3 
[2,] 2 4 

私は出力として、このような配列をしたいと思います:

, , 1 

    [,1] [,2] 
[1,] 1 2 
[2,] 3 4 

, , 2 

    [,1] [,2] 
[1,] 1 2 
[2,] 3 4 

.... 

, , 10 

    [,1] [,2] 
[1,] 1 2 
[2,] 3 4 

私は、このページ(Duplicate matrix to form listを)見てきました、その中にOPは行列をリストに複製しようとしていたので、配列に変換するようになった。

b<-rep(list(a), 10) # from original post 
array(unlist(b), dim = c(nrow(b[[1]]), ncol(b[[1]]), length(b))) # line I added 

これはうまく動作しますが、ちょっと回り道です。リストを作成せずに1行でこれを行う方法があるのだろうかと思っていました。

私は一緒に複数の行を結合することrbindで行われるようにdo.callの論理を適用することを試みたが、代わりに使用abind -

do.call(abind,as.list(c(a,a,a,a,a,a,a,a,a,a))) 

が、出力が一つの長いベクトルであり、そうではありません私が探していたもの

ご協力いただきありがとうございます。

+2

、あなたはあなたに感謝 '配列(、C(、(a)は10薄暗い))'も良いアイデアを –

+0

のリサイクルを活用することを、使用することができます! –

答えて

3

replicateを使用すると、デフォルトでリストが作成されます。配列を取得するには、simplify = "array"を追加します。あなたのアプローチビットを変更

replicate(10, a, simplify="array") 

, , 1 

    [,1] [,2] 
[1,] 1 3 
[2,] 2 4 

, , 2 

    [,1] [,2] 
[1,] 1 3 
[2,] 2 4 

... 

, , 9 

    [,1] [,2] 
[1,] 1 3 
[2,] 2 4 

, , 10 

    [,1] [,2] 
[1,] 1 3 
[2,] 2 4 
関連する問題