Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generate an incrementally increasing sequence like 112123123412345

Tags:

r

sequence

seq

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?

like image 920
Christopher B. L Avatar asked Oct 11 '13 11:10

Christopher B. L


4 Answers

Use sequence:

> sequence(1:5)
 [1] 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5
like image 166
Joshua Ulrich Avatar answered Nov 07 '22 02:11

Joshua Ulrich


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
like image 26
mrip Avatar answered Nov 07 '22 03:11

mrip


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
like image 27
Paul Hiemstra Avatar answered Nov 07 '22 02:11

Paul Hiemstra


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)
}
like image 32
Carl Witthoft Avatar answered Nov 07 '22 03:11

Carl Witthoft