2017-02-09 43 views
7

değerleri ben vektör olacağını, öyle ki, bir zamanlar çift sayılar iki kere çoğaltılır 50 ve düzensiz sayılara 3 bir vektör üretmek için nasıl bilemiyorumÇoğalt alternatif vektör

3, 4, 4, 5, 6, 6, 7, 8, 8, 9, ..., 50, 50 

cevap

10

rep() olacak iş görmek.

x <- 3:50 
rep(x, (x %% 2 == 0) + 1L) 
# [1] 3 4 4 5 6 6 7 8 8 9 10 10 11 12 12 13 14 14 15 16 16 17 
# [23] 18 18 19 20 20 21 22 22 23 24 24 25 26 26 27 28 28 29 30 30 31 32 
# [45] 32 33 34 34 35 36 36 37 38 38 39 40 40 41 42 42 43 44 44 45 46 46 
# [67] 47 48 48 49 50 50 

x %% 2 == 0x unsurları da olan gösteren mantıksal bir vektör sağlar. TRUE ve FALSE ve FALSE arasındaki tamsayı değerleri sırasıyla 1 ve 0 olduğu için, x %% 2 == 0 1'e eklendiğinde, rep() numaralı times argümanı için gereken vektör bize verir.

Golf oynuyorsak, onu rep(x, (!x %% 2) + 1L)'a kısaltabiliriz.

Bu yöntemin, orijinal vektörümüz sıralı değilse de yararlı olacağını unutmayın ve yine de çift değerlerin çoğaltılmasını istiyoruz. geri dönüşüm kullanma

v <- c(1, 2, 4, 3, 6) 
rep(v, (!v %% 2) + 1L) 
# [1] 1 2 2 4 4 3 6 6 
+5

ve biraz daha kodlanmış: 'rep (3:50, rep (1: 2, 24))' – lmo

5

, biraz manuel yol: Hepimizin değerlerin bir vektör ve birlikte hatta numaralarının vektör birleştirebilirsiniz

x <- 3:50 
sort(c(x, x[c(FALSE, TRUE)])) 
8

:

sort(c(3:50, 2:25*2))