基本上我想生成一个序列,比如:
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 循环的情况下做到这一点?
使用sequence
:
> sequence(1:5)
[1] 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5
这是一种可能性:
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
它会做类似的事情:
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
我把这个问题误读为“如何生成那个烦人的谜题序列”,它是 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)
}