2012-06-24 16 views
10
Biz şuna benzer bir diziyi almak istiyorum

tekrarlanması:Tekrarlanan diziyi

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 

bunu yapmanın en kolay yolu nedir? Bu gibi

+0

Bir for döngüsü hakkında düşündüm, ancak daha basit bir yolu yok mu? –

cevap

30

Tek rep çağrıyla yapabiliriz (bir vektör değil, bir dizi anlamına varsayarak). each ve times parametreleri, sırasıyla ilk olarak each yapılarak değerlendirilir.

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

Bu benim görüşüme göre kabul edilen cevap olmalı – Andrie

2

:

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

temsilcisi (x, n) X, N kez tekrar bir vektör döndürür. sapply, verilen fonksiyonu her bir elemanın 1: 4 her elemanına ayrı ayrı uygular ve her elemanı art arda 3 defa tekrarlar.

+3

Dieter'in cevabına bir göz atmalısınız - 'her' parametresi yaptıklarınızı sapsız bir çağrı yapmaktan çok daha iyi yapar. – Dason

17

Veya daha basit

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

Burada aperm ile dizi işleme kullanılarak bir yöntemdir. Fikir, değerleri içeren bir dizi oluşturmaktır. Yeniden düzenleyiniz, böylece aperm kullanarak istenen çıktıya uyuyorlar ve ardından diziyi c ile "açınız".

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