2012-06-24 4 views

答えて

30

あなたは、単一のrepコールでそれを行うことができます(あなたがベクトルではなく、配列を意味すると仮定した場合)。 eachおよびtimesのパラメータは、eachが最初に実行されて順番に評価されます。

rep(1:4, times=3, each=3) 
#[1] 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4 
+1

これは私の見解では受け入れられた答えになるはずです – Andrie

2

rep(sapply(1:4, function(x) {rep(x, 3)}), 3) 

担当者(X、N)は、x N回繰り返すベクトルを返します。 spplyは与えられた関数をベクトル1:4の​​各要素に別々に適用し、各要素を3回連続して繰り返します。

+3

Dieterの答えを見てください。「each」のパラメータは、サプリーへの呼び出しよりもはるかに良いことをします。 – Dason

17

あるいは、単純

rep(rep(1:4,each=3),3) 
0

apermでの配列操作を使用する方法があります。考え方は、値を含む配列を作成することです。 apermを使用して目的の出力と一致するように並べ替え、cで配列を展開します。

c(aperm(array(1:4, dim=c(4,3,3)), c(2, 1, 3))) 
[1] 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4 
関連する問題