Wir haben eine große for loop
in R
für die Simulation verschiedener Daten, wo für einige Iterationen die Daten so generieren, dass eine Menge 0 innerhalb der Schleife kommt , was nicht wünschenswert ist und wir sollten diesen Schritt der Datengenerierung überspringen. Gleichzeitig müssen wir aber auch die Anzahl der Iterationen um einen Schritt erhöhen, da wir sonst weniger Beobachtungen benötigen.Wie man einen Schritt überspringt und die Anzahl der Iterationen in einer for-Schleife erhöht R
Während zum Beispiel den folgenden Code ausgeführt wird, erhalten wir z = 0 in Iteration 1, 8 und 9.
rm(list=ls())
n <- 10
z <- NULL
for(i in 1:n){
set.seed(i)
a <- rbinom(1,1,0.5)
b <- rbinom(1,1,0.5)
z[i] <- a+b
}
z
[1] 0 1 1 1 1 2 1 0 0 1
Wir wollen diese Schritte überspringen, so dass wir haben keine z = 0, aber wir wollen auch einen Vektor z der Länge 10. Es kann auf viele Arten erfolgen. Aber was ich besonders gerne sehen möchte, ist, wie wir die Iteration anhalten und den aktuellen Schritt überspringen können, wenn z = 0 angetroffen wird, und zum nächsten Schritt gehen, um schließlich 10 Beobachtungen für z zu erhalten.
Nein. Sie sollten die Vektorisierung verwenden, mehr Werte als erforderlich erstellen und auf die gewünschte Anzahl von Nicht-Null-Werten unterteilen. – Roland
@Roland Es ist nicht offensichtlich, dass der wahre Code des OP leicht vektorisiert werden kann. Außerdem kann der von Ihnen vorgeschlagene Ansatz immer noch keine "n" Erfolge erzielen (Ergebnisse ungleich null). – Frank
@Frank Wie die Aktualisierung der Antwort zeigt, können Sie eine gute Schätzung der Anzahl der zusätzlichen Werte erhalten. Wenn Sie nicht die erforderliche Anzahl an "guten" Werten erhalten, führen Sie sie erneut aus. Sie werden immer noch schneller als die Schleife Ansatz für jede Simulation der anständigen Größe sein. – Roland