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:
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
.
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%Dies ist kein vollständiges Beispiel, da wir die Daten nicht haben, aber ich sehe diese Probleme:
NA
mit ==
testen, Sie benötigen is.na()
match()
and friends normalerweise auf NULL oder length()==0
getestet.
} else {
in eine Zeile. Tags und Links r if-statement