Вопрос

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?

Это было полезно?

Решение

Use sequence:

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

Другие советы

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

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

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)
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top