基本上我想生成一个序列,比如说:
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循环的情况下做到这一点?
答案 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)
}