Ausbruch aus der for-Schleife beim ausführen einer Funktion in einer for-Schleife in R
Angenommen, Sie haben die folgende Funktion foo
. Wenn ich eine for
Schleife, ich möchte es überspringen Sie den Rest der foo
wenn foo
zunächst wird der Wert des 0
. Allerdings break
funktioniert nicht, wenn es innerhalb einer Funktion.
Wie es derzeit geschrieben wird, bekomme ich eine Fehlermeldung, no loop to break from, jumping to top level
.
Irgendwelche Vorschläge?
foo <- function(x) {
y <- x-2
if (y==0) {break} # how do I tell the for loop to skip this
z <- y + 100
z
}
for (i in 1:3) {
print(foo(i))
}
- Danke an alle für die Kommentare. Im Rückblick auf diese, ich sollte geändert haben
break
zunext
da gewesen wäre, mehr im Einklang mit dem, was ich suchte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zwar mein R wissen ist spärlich und das ist drycoded, aber so etwas wie die folgende sollten funktionieren:
Edit: aktualisiert, null-check für die Nachwelt
Als eine Frage der Codierung der Praxis, dies nicht tun. Eine Funktion kann nur verwendet werden, innerhalb einer bestimmten loop ist keine gute Idee. Als eine Angelegenheit von pädagogischen Interesse ist, können Sie bewerten die 'Pause' in die übergeordneten Umwelt.
on.error1 = expression(action_on_error1)
,on.error2 =...
und so weiter. Können später mit Ihnen umgehen, indemtryCatch(lower_lev_fun(), error = function(e) eval(on.error1))
. In meinem Fall Eltern.Rahmen(1) entwickeln sich zueval.parent(parse(text='next'),7)
, nicht wahr. Es scheint, dass es der einzige Weg, um die Fehlerbehandlung so generisch. Danke!Dürfen wir ein wenig mehr Kreativität? Könntest du Neufassung Ihres Problems, um die Vorteile der folgenden Verfahren, bei dem die operation basiert auf Vektoren?
Wenn Sie jedoch eine tiefere form zugrunde liegt die Frage, und wir müssen Folgen Sie diesem Muster für jetzt, vielleicht zwicken Sie nur ein wenig...
Einen alternativen Weg zu werfen ist ein Fehler und fangen Sie mit
try
etwa so:Ich habe keine Ahnung, wie
r
funktioniert, aber ich fand die Frage interessant, denn ich konnte lookup eine neue Sprache syntax, so entschuldigen Sie meine Antwort, wenn es Total falsch ist 🙂