我想构建一个长度为5000的以下类型的序列:x<-c(1:i,(2*i):(i+1),(2*i+1):(3*i),(4*i):(3*i+1),...)
,i=2,3,4....,2500
。
我正在考虑将这个序列构建为两个序列的总和:第一个是a=1:5000
,而第二个序列是包含模式的序列。例如,当i = 2时,我有以下内容:c(0, 0, 1, -1)
,而对于i = 4,我有c(0, 0, 0, 0, 3, 1, -1, -3)
。当i = 2时,我可以构建一个类似b=c(rep(0,i),i-1,i-3)
的向量,然后将a
和b
相加以获得我想要的结果(感谢回收规则)。
我正试图找到一种方法来“概括”向量的第二部分(即没有rep()
的部分),可能会减去i
从1到5000向上移动的序列然而,我应该在我想要重复多次的模式之后停止向量(例如,在i = 2的情况下,在4个分量之后)。有没有更好的方法呢?
答案 0 :(得分:1)
我发现这个问题非常不清楚。如果请求是针对一系列长度增加的向量,其中前n个值为零,并且接下来的n个值为n-1到 - (n-1),那么这是一种可能性:
lapply(1:10 , #obviously this is a toy demonstration
function(n) c(rep(0,n), seq(n-1, 1-n, length=n) ) )
#-----------
[[1]]
[1] 0 0
[[2]]
[1] 0 0 1 -1
[[3]]
[1] 0 0 0 2 0 -2
[[4]]
[1] 0 0 0 0 3 1 -1 -3
[[5]]
[1] 0 0 0 0 0 4 2 0 -2 -4
Snipped remaining output.