【发布时间】: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 中的一些向量: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() 函数的多种组合,但无济于事。
【问题讨论】:
这是使用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
【讨论】:
有点小技巧,因为你可以将你想要做的事情分解成两个序列:
rep(0:9, 10:1) + sequence(10:1)
您可以看到每个部分的作用。我不知道是否有办法像在 Python 扩展中那样将参数提供给 rep() 或 seq()。
【讨论】:
unlist(sapply(1:10, function(x) { x:10 }))
【讨论】:
unlist(sapply(1:10, seq, to=10))(更紧凑,但可能更晦涩一点......所以这个更明确的版本可能会更好)