9

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

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

4 回答 4

20

使用sequence

> sequence(1:5)
 [1] 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5
于 2013-10-11T11:37:28.467 回答
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
于 2013-10-11T11:36:36.873 回答
5

它会做类似的事情:

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
于 2013-10-11T11:38:11.517 回答
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)
}
于 2013-10-11T13:17:15.490 回答