Einfache if-else-Schleife in R

8

Kann mir jemand sagen, was mit dieser if-else-Schleife in R falsch ist? Ich kann häufig keine if-else-Loops zum Laufen bringen. Ich erhalte einen Fehler:

%Vor%

Beachten Sie, dass data ein Datenrahmen ist.

Der Fehler ist

%Vor%     
CodeGuy 18.01.2012, 03:07
quelle

2 Antworten

2

Wie @DirkEddelbuettel bemerkt, können Sie NA nicht auf diese Weise testen. Aber Sie können match nicht zurückgeben NA :

Wenn Sie nomatch=0 verwenden und die if -Klausel rückgängig machen (da 0 als FALSE behandelt wird), kann der Code vereinfacht werden. Ein weiteres nützliches Codier-Idiom ist die Zuweisung des Ergebnisses der if-Klausel, damit Sie den Variablennamen nicht in einer der Verzweigungen vertippen ...

Also würde ich es so schreiben:

%Vor%

Übrigens, wenn Sie "häufig" Probleme mit if-else haben, sollten Sie zwei Dinge beachten:

  1. Das zu testende Objekt darf weder NA noch NaN enthalten oder eine Zeichenfolge (Moduszeichen) oder ein anderer Typ sein, der nicht in einen logischen Wert umgewandelt werden kann. Numerisch ist OK: 0 ist FALSE alles andere (aber NA / NaN) ist TRUE .

  2. Die Länge des Objekts sollte genau 1 (ein Skalarwert) sein. Es kann länger sein, aber dann erhalten Sie eine Warnung. Wenn es kürzer ist, erhalten Sie eine Fehlermeldung.

Beispiele:

%Vor%     
Tommy 18.01.2012, 04:10
quelle
7

Dies ist kein vollständiges Beispiel, da wir die Daten nicht haben, aber ich sehe diese Probleme:

  1. Sie können nicht auf NA mit == testen, Sie benötigen is.na()
  2. Ähnlich wird die Ausgabe von match() and friends normalerweise auf NULL oder length()==0 getestet.
  3. Ich schreibe } else { in eine Zeile.
Dirk Eddelbuettel 18.01.2012 03:10
quelle

Tags und Links