2013-10-11 15 views
8

Grundsätzlich mag ich um eine Sequenz zu erzeugen, sagen:Generieren eine Sequenz wie 112123123412345

n 2 ist, wird die Sequenz 112
n ist 3, Sequenz 112123
n 5 ist, Sequenz 112123123412345

ohne Schleife

ich habe mit einer Lösung

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

ich dort frage mich kommen, wenn ein Weg ist, kann es tun? Hier

Antwort

18

Verwendung sequence:

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

Es gibt auch etwas etwas befriedigendes in der Reihenfolge (Sequenz (5)) :-) – flodel

+0

@flodel: Ich liebe es! –

+4

@Chris: Lesen Sie unbedingt die "Siehe auch" Abschnitte der Hilfedateien. '' seq' erwähnt 'sequence' dort. –

7

ist eine Möglichkeit:

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 
+2

funktionelle, wäre 'fehlender oder (lapply (seq (n), seq))' – flodel

+1

+1, da 'sequence' definiert als' Funktion (nvec) fehlende oder (lapply (nvec, seq_len)) '. –

+0

Vielen Dank Jungs! Obwohl diese Frage durch sequence() gelöst werden kann, ist es tatsächlich eine Frage aus meiner Übung, wie man etwas mit lapply() statt mit loop macht. Ich denke, das ist es, wonach die Tutorial-Frage sucht. –

4

Es wäre so etwas wie:

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

ich die Frage falsch verstanden als „wie zu generieren, nervende Puzzlerfolge, "die geht 1,11,21,11212,3112, ... :-). Also dachte ich, ich könnte genauso gut eine Lösung dafür schreiben.

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

Dies ist schwer zu lesen; Code-Formatierung ist nicht Standard und nicht konsistent. –

+0

@ClaytonStanley können Sie klären, was Sie unklar finden? Es sollte besser sein als fehlende Einzüge für den Schleifeninhalt! –

Verwandte Themen