如何创建这个特殊序列?

ZWL*_*ZWL 4 r sequence seq rep

我想创建以下矢量序列.

0 1 0 0 2 0 0 0 3 0 0 0 0 4
Run Code Online (Sandbox Code Playgroud)

我的想法是创造0先用rep(),但不知道如何添加1:4.

Ric*_*ven 8

创建一个对角矩阵,取上三角形,然后删除第一个元素:

d <- diag(0:4)
d[upper.tri(d, TRUE)][-1L]
# [1] 0 1 0 0 2 0 0 0 3 0 0 0 0 4
Run Code Online (Sandbox Code Playgroud)

如果您更喜欢不进行全局分配的单行程序,请将其包含在函数中:

(function() { d <- diag(0:4); d[upper.tri(d, TRUE)][-1L] })()
# [1] 0 1 0 0 2 0 0 0 3 0 0 0 0 4
Run Code Online (Sandbox Code Playgroud)

对于代码高尔夫目的,这里是使用d上面的另一个变体:

d[!lower.tri(d)][-1L]
# [1] 0 1 0 0 2 0 0 0 3 0 0 0 0 4
Run Code Online (Sandbox Code Playgroud)


the*_*ail 5

rep以及rbind他们的旧技巧:

rep(rbind(0,1:4),rbind(1:4,1))
#[1] 0 1 0 0 2 0 0 0 3 0 0 0 0 4
Run Code Online (Sandbox Code Playgroud)

这基本上创建了2个矩阵,一个用于值,一个用于重复值的次数.rep并不关心输入是否是一个矩阵,因为它只是将它平展回到按顺序向下按每列的向量.

rbind(0,1:4)
#     [,1] [,2] [,3] [,4]
#[1,]    0    0    0    0
#[2,]    1    2    3    4

rbind(1:4,1)
#     [,1] [,2] [,3] [,4]
#[1,]    1    2    3    4
#[2,]    1    1    1    1
Run Code Online (Sandbox Code Playgroud)