Generate an incrementally increasing sequence like 112123123412345

淺唱寂寞╮ 提交于 2019-11-26 08:37:25

问题


Basically I want to generate a sequence, say:

n is 2, the sequence will be 112
n is 3, sequence is 112123
n is 5, sequence is 112123123412345

I did come up with a solution

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

I am wondering if there is a way can do it without for loop?


回答1:


Use sequence:

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



回答2:


Here is one possibility:

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



回答3:


It'd do something like:

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



回答4:


I misread the question as "how to generate that annoying puzzler sequence," which goes 1,11,21,1112,3112,... :-). So I figured I might as well write a solution to that.

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)
}


来源:https://stackoverflow.com/questions/19317140/generate-an-incrementally-increasing-sequence-like-112123123412345

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!