Noch neu in R so zu versuchen, das Arbeiten mit Funktionen zu üben, habe ich etwas (wahrscheinlich ziemlich ineffizienten) Code erstellt, den ich später ändern werde, derzeit gibt es das Ergebnis, das ich brauche, aber ich möchte die Simulation 100 Mal innerhalb wiederholen Funktion selbst. Dies würde effektiv drehen wird [i], die zurückgibt Ziele -1 oder 1 mit einer bestimmten Funktion Wahrscheinlichkeit:Infinite Rekursionsfehler - wie zu lösen?
game = function(n,pr) {
turn = cumsum(2*rbinom(n,1,prob=pr)-1)
bankrupcy.test = which(turn == -25)
winner.test = which(turn == 50)
if(length(bankrupcy.test)==0){bankrupcy.test=c(0)}
if(length(winner.test)==0){winner.test=c(0)}
if(bankrupcy.test==0 && winner.test==0){turn[n]}else
if(bankrupcy.test[1]>winner.test[1]){-25}else{
50}
return(replicate(100,game(n)))
}
Ich habe versucht, einen for-Schleife zu schaffen, aber ich nicht zu Struktur scheinen kann das richtig, also ich bin auf der Suche Um den Befehl replicate innerhalb der von mir erstellten Funktion zu verwenden, erhalte ich folgende Fehlermeldung:
"zu tief verschachtelte Auswertung: unendliche Rekursion/Optionen (Ausdrücke =)? Fehler während der Nachbearbeitung: Auswertung zu tief verschachtelt: unendliche Rekursion/Optionen (Ausdrücke =) "
Wohin gehe ich falsch? Ich möchte einen Vektor mit 100 Ergebnissen der obigen Simulation zurückgeben, in dem das Spiel gespielt wird, bis 50 Gewinn gemacht wird oder ein Verlust von 25 gemacht wird, je nachdem was zuerst eintritt. Wenn keines der vorherigen Ergebnisse auftritt, wird der endgültige Wert des Vektors genommen.
Sie rufen 'game' aus dem Inneren der Funktion, und so' game' landet selbst aufrufen. Dies verursacht die Rekursion. –
Ich dachte, dass das der Fall sein könnte, aber wie sonst kann ich die Simulation innerhalb der Funktion replizieren? Ist der einzige Weg eine For-Schleife? Ich kann nie scheinen, dass diejenigen arbeiten, wenn die Funktion sogar ein wenig kompliziert wird ... – Aesler
gibt es einen Grund, warum Sie die Replikation innerhalb der Funktion wollen? Wenn du die 'return (replicate (100, game (n)))' und dann außerhalb der Funktion run 'replicate (100, game (n = n, pr = pr)) entfernst, sollte es funktionieren (aber vielleicht nicht Ich verstehe, was Sie versuchen zu tun) – Lucy