生成像112123123412345这样的序列

时间:2013-10-11 11:33:05

标签: r

基本上我想生成一个序列,比如说:

n为2,序列为112
n为3,序列为112123
n为5,序列为112123123412345

我确实想出了一个解决方案

n=5
seq=1
for (i in 2:n){
  seq=c(seq,rep(1:n,len=i))
}

我想知道是否有办法可以在没有for循环的情况下做到这一点?

4 个答案:

答案 0 :(得分:18)

使用sequence

> sequence(1:5)
 [1] 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5

答案 1 :(得分:7)

这是一种可能性:

n<-5
unlist(lapply(1:n,function(x) 1:x))
## [1] 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5

答案 2 :(得分:4)

它会做类似的事情:

do.call('c', sapply(1:5, seq, from = 1))
# [1] 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5

答案 3 :(得分:1)

我把这个问题误解为“如何产生令人烦恼的益智游戏序列”,这就是这样 1,11,21,1112,3112,...... :-)。所以我想我也可以写一个解决方案。

puzseq<-function(seqlen) {
theseq<- list(1)
for( j in 2:seqlen) {

thetab<-table(theseq[[j-1]])
theseq[[j]]<-unlist( sapply( 1:length(thetab), function(k) c(thetab[k], as.numeric(names(thetab)[k])) ))
}
return(theseq)
}