Gibt es in R eine Kontrollsequenz, die dem ternären Operator von C ähnelt ? Wenn ja, wie verwenden Sie es? Vielen Dank!
175
Gibt es in R eine Kontrollsequenz, die dem ternären Operator von C ähnelt ? Wenn ja, wie verwenden Sie es? Vielen Dank!
ifelse
oder nur eine kompaktere Form?if (x>1) y=2 else y=3
. Das Schreiben haty=
einmal einen gewissen Reiz.Antworten:
Wie
if
ist Funktion inR
und gibt die neueste Auswertung zurück, wenn-else gleichbedeutend ist mit?:
.Die Potenz von R ist die Vektorisierung. Die Vektorisierung des ternären Operators lautet
ifelse
:Nur ein Scherz, Sie können C-Stil definieren
?:
:Hier müssen Sie sich nicht um Klammern kümmern:
Für die Zuordnung benötigen Sie jedoch Klammern :(
Schließlich können Sie mit c:
Sie können Klammern loswerden:
Diese sind nicht für den täglichen Gebrauch gedacht, aber vielleicht gut, um einige Interna der R-Sprache zu lernen.
quelle
Wie alle anderen sagten, verwenden Sie
ifelse
, aber Sie können Operatoren so definieren, dass Sie fast die ternäre Operatorsyntax haben.Es funktioniert tatsächlich, wenn Sie die Operatoren ohne die
%
Zeichen definieren, also könnten Sie haben(Dies funktioniert, weil die Priorität von
:
niedriger als ist?
.)Leider bricht das dann die vorhandenen Hilfe- und Sequenzoperatoren.
quelle
So wie ein Streich, Sie können den neu definieren
?
Operator (fast) Arbeit wie der ternäre Operator (Dies ist eine schlechte Idee):... Sie müssen die Ausdrücke jedoch in Klammern setzen, da die Standardpriorität nicht mit C übereinstimmt.
Denken Sie daran, die alte Hilfefunktion wiederherzustellen, wenn Sie mit dem Spielen fertig sind:
quelle
Ich würde mir den
ifelse
Befehl ansehen . Ich würde es noch besser nennen, weil es auch vektorisiert ist. Ein Beispiel mit dem Autodatensatz:quelle
ifelse
mit deinem Beispiel etwas zeigen ? ;)Ihr Link verweist auf eine
if
Aussage.Wenn Ihre Eingabevariable ein Vektor ist, ist dies
ifelse
möglicherweise besser geeignet:Um auf die Hilfeseite für zuzugreifen
if
, müssen Sie die folgendenif
Backticks einbetten :Die Hilfeseite für
ifelse
ist unter:quelle
print(if (x<2) "Less than" else "Greater than")
Es existiert nicht explizit, aber Sie können:
oder
Der Unterschied zwischen den beiden ist , daß
condition1
eine logische Vektor der Länge 1 sein muss, währendcondition2
ein logischer Vektor die gleiche Länge wie sein mussx
,y
undz
. Das erste gibt entwedery
oderz
(das gesamte Objekt) zurück, während das zweite das entsprechende Element vony
(condition2==TRUE
) oderz
(condition2==FALSE
) zurückgibt.Beachten Sie auch, dass
ifelse
dies langsamer alsif
/else
ifcondition
,,y
ist undz
alle Vektoren mit der Länge 1 sind.quelle
if
funktioniert wie enthüllt, wenn es auf folgende Weise verwendet wird:Der Vorteil der Verwendung gegenüber ifelse besteht darin, dass die Vektorisierung im Weg ist (dh ich habe skalare Boolesche Werte und Listen- / Vektorsachen als Ergebnis).
quelle