r-生成一个带有rep和seq但没有c()函数的向量



假设不允许我使用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

最新更新