我无法弄清楚如何生成从3
到50
的向量,其中偶数被复制两次,而不均匀的数字被复制一次,这样向量就会
3, 4, 4, 5, 6, 6, 7, 8, 8, 9, ..., 50, 50
答案 0 :(得分: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
的哪些元素是偶数。由于TRUE
和FALSE
的整数值分别为1
和0
,因此向x %% 2 == 0
添加1会为我们提供times
所需的向量} rep()
中的参数。
如果我们正在打高尔夫球,我们可以将其缩短为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
答案 1 :(得分:8)
我们可以将所有值的向量和偶数的向量合并在一起:
\d{2}-\w{3}-\d{4}
答案 2 :(得分:5)
使用回收,有点手动方式:
x <- 3:50
sort(c(x, x[c(FALSE, TRUE)]))