Erhöhen Zähler in einer for-Schleife in R

Hallo an alle ich habe ein problem mit einem counter, die ich erstellt habe in einer for-Schleife. Hier ist der code.

n1<- 0
n2<- 0
n<- 20
f<- rep(NA,20)
set.seed(10) 
x<- runif(20)
for(i in 1:20) {
f[i]<- ifelse(x[i]<0.5, 'a', 'b')
if((n1-n2)==2) {
break
 }
 if(f[i]=='a')  
n1<- n1 + 1 else n2<- n2 + 1 # n1 counts a's n2 counts b's
}

[1] "b" "a" "a" "b" "a" "a" "a" NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA

Wie Sie sehen können aus dem Ergebnis Anzahl der a ' s=5 und b=2 . Aber wenn ich Anrufe, n1 und n2 gibt es 4 für n1, die ist falsch . Warum ist das so? Wie bin ich falsch ? Vielen Dank im Voraus .

Ich starten Stichproben a und b ist mit einer Wahrscheinlichkeit von 0.5 .20 insgesamt. An einem gewissen Punkt, die ich nicht im Voraus wissen, die Anzahl der a 's - die Anzahl der b' s übersteigt, 2. Wenn dies geschieht, ich will, dass die ziehungswahrscheinlichkeit zu ändern 0,2 Das ist, was ich versuche zu erreichen.

  • Sie wirklich brauchen, um lernen zu verwenden ifelse richtig. Verwenden Sie es in der Mitte einer for-Schleife wie das ist "einfach falsch".
  • Wenn ich nicht und verwenden Sie Probe statt, wie kann ich ermitteln in die Schleife, wenn die Bedingung n1-n2==2 erfüllt ist? . Wie kann ich break die Schleife an genau diesem Punkt an und fahren Sie mit dem nächsten iteration ändern der Sampling-Wahrscheinlichkeit?
  • Ich sagte nicht: nicht für die Verwendung einer for-Schleife (obwohl ich denke, Sie haben schon eine viel bessere alternative unten). Ich wurde sagen, dass mit ifelse() mit Länge-1 Vektoren wurde die Art von albern. Wenn Sie eine Schleife haben, dann sollten Sie mit if(){}else{}
  • Ich benutze ifelse hier statt Probe, die falsch sein können. Aber ich kann immer noch nicht verstehen, warum a 's und b' s werden nicht richtig gezählt und in der Schleife
  • Drucken x und f ich sehe keine Fehler. Was ist nicht "richtig gezählt". Vielleicht müssen Sie sich ?sum.
  • Ich habe es einfach gemacht. Vielen Dank für Ihre Zeit .
  • Also das grundlegende problem scheint zu sein, dass Sie brechen aus der Schleife, bevor der Letzte Graf Vorgang abgeschlossen ist?
  • Ja, denke ich . Brechen aus der Schleife würde mir helfen zu erkennen die genaue iteration, wo n1-n2 Bedingung ist satitsfied
  • Dann sollten Sie Inkrementieren jeder Zähler vor der Pause.

InformationsquelleAutor Manos | 2013-12-01
Schreibe einen Kommentar