【问题标题】:Generating a repeating sequence an increasingly truncated number of times in R在R中生成重复序列的次数越来越多
【发布时间】:2014-04-17 14:31:54
【问题描述】:

考虑 R 中的一些向量:x

x<-1:10

我想创建一个x 的重复序列,每个序列的第一个元素在每次重复时被截断,产生与在 R 中发出以下命令所给出的相同的输出:

c(1:10,2:10,3:10,4:10,5:10,6:10,7:10,8:10,9:10,10:10)

这可以吗?实际上,我正在为x 使用更大的向量。我正在使用rep() 函数的多种组合,但无济于事。

【问题讨论】:

    标签: r sequence


    【解决方案1】:

    这是使用mapply 的替代方法:

    unlist(mapply(":", 1:10, 10))
    #  [1]  1  2  3  4  5  6  7  8  9 10  2  3  4  5  6  7  8  9 10  3  4  5  6  7
    # [25]  8  9 10  4  5  6  7  8  9 10  5  6  7  8  9 10  6  7  8  9 10  7  8  9
    # [49] 10  8  9 10  9 10 10
    

    【讨论】:

    • 这是 27 个字符,接受的答案是 28,我的(上面的评论)是 30。代码高尔夫时间?
    【解决方案2】:

    有点小技巧,因为你可以将你想要做的事情分解成两个序列:

    rep(0:9, 10:1) + sequence(10:1)
    

    您可以看到每个部分的作用。我不知道是否有办法像在 Python 扩展中那样将参数提供给 rep()seq()

    【讨论】:

    • 太棒了,正是我想要的!谢谢!
    【解决方案3】:
    unlist(sapply(1:10, function(x) { x:10 }))
    

    【讨论】:

    • unlist(sapply(1:10, seq, to=10))(更紧凑,但可能更晦涩一点......所以这个更明确的版本可能会更好)