假设不允许我使用c()
函数。
我的目标是生成矢量
"1 2 3 4 5 2 3 4 6 3 5 6 7 4 5 6 7 8 5 6 7 9";
这是我的尝试:
rep(seq(1, 5, 1), 5)
# [1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
rep(0:4,rep(5,5))
# [1] 0 0 0 0 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4
所以基本上我是在总结它们。但我想知道是否有更好的方法只使用rep和seq函数。
如此:
1:5 + rep(0:4, each = 5)
# [1] 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9
我也喜欢sequence
选项:
sequence(rep(5, 5), 1:5)
您可以进行
rep(1:5, each=5) + rep.int(0:4, 5)
# [1] 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9
准确地说,也使用seq
:
rep(seq.int(1:5), each=5) + rep.int(0:4, 5)
(附言:你可以移除.int
,但速度较慢。(
一种可能的方法:
as.vector(sapply(1:5, `+`, 0:4))
[1] 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9
我还提出了outer()
函数:
library(dplyr)
outer(1:5, 0:4, "+") %>%
array()
或者在较新的R版本中没有magrittr%>%
功能:
outer(1:5, 0:4, "+") |>
array()
解释。
第一个函数将创建一个1:5乘0:4的序列数组,并用这些值的和填充交集:
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 2 3 4 5 6
[3,] 3 4 5 6 7
[4,] 4 5 6 7 8
[5,] 5 6 7 8 9
第二个将从数组中提取矢量并返回所需矢量:
[1] 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9