2017-02-09 76 views
7

我不能找出如何產生從3載體來50其中偶數被複制兩次,凹凸數一次,使得載體將是複製交替矢量值

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

回答

10

rep()將做的伎倆。

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 == 0給出指示其x元件甚至邏輯矢量。由於TRUEFALSE的整數值分別爲10,因此在x %% 2 == 0上加1會爲我們提供rep()times參數所需的向量。

如果我們打高爾夫,我們可以縮短到rep(x, (!x %% 2) + 1L)

請注意,如果我們的原始矢量是而不是連續的,我們仍然希望複製偶數值,此方法也會有用。

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

多一點硬編碼:'rep(3:50,rep(1:2,24))' – lmo

5

使用回收,有點手動方式:

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

我們可以合併所有值的矢量和偶數號碼的載體一起:

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