2017-01-08 11 views
2

データセットを作成するときにこれを取得することがあります。私は通常repを使用することができますが、時にはそれが適用されないため、回避策を見つけたり、過度に長い関数呼び出しを書かなければなりません。関数で引数をn回繰り返すにはどうすればよいですか?

たとえば、abind関数を使用して、同じ2-d行列から3次元配列を作成する必要があります。私は5つのコピーをしたい場合は、それはエレガントではなく、悪いことができます:私は200枚のコピーをしたい場合は

mat <- matrix(c(1,0,0,0,1,0,0,0,1), nrow=3, ncol=3) 
abind(mat, mat, mat, mat, mat, along=3) 

、引数に200回繰り返すよりもきれいな解決策はありますか? repを使用すると行列が連結され、私は運が無ければ他の関数を試してみました。ループを避けたいのですが、できる場合はeval(parse(text=...))です。

+0

関連の行列のインスタンスのためではない - のhttp:abind機能(例えば例えばalong=2を使用して)別の出力のために必要とされる

場合は、あなたが一緒にハックできます。 //stackoverflow.com/questions/15213463/combining-matrices-into-an-array-in-r – thelatemail

答えて

3

?replicateは何をしたいです:

replicate(5, mat) 
#, , 1 
# 
#  [,1] [,2] [,3] 
#[1,] 1 0 0 
#[2,] 0 1 0 
#[3,] 0 0 1 
# 
# <snip!> 
# 
#, , 5 
# 
#  [,1] [,2] [,3] 
#[1,] 1 0 0 
#[2,] 0 1 0 
#[3,] 0 0 1 

... replicate(5, mat, simplify="array")のショートカットです。 simplify=引数をFALSEまたはTRUEに変更して、その他の出力オプションを確認してください。すべて同じである。また

do.call(abind, c(rep(list(mat), 5), along=3)) 
+0

ありがとうございました!それが私が探していたものです。 – NotReallyHere12

関連する問題