Wenn ich einen data.frame filtern muss, dh Zeilen extrahieren muss, die bestimmte Bedingungen erfüllen, bevorzuge ich die subset
Funktion:
subset(airquality, Month == 8 & Temp > 90)
Anstelle der [
Funktion:
airquality[airquality$Month == 8 & airquality$Temp > 90, ]
Es gibt zwei Hauptgründe für meine Präferenz:
Ich finde, der Code liest sich besser, von links nach rechts. Sogar Leute, die nichts über R wissen, könnten sagen, was die
subset
obige Aussage tut.Da Spalten im
select
Ausdruck als Variablen bezeichnet werden können, kann ich einige Tastenanschläge speichern. In meinem obigen Beispiel musste ich nurairquality
einmal mitsubset
, aber dreimal mit tippen[
.
Also lebte ich glücklich, benutzte es subset
überall, weil es kürzer ist und besser liest, und befürwortete sogar seine Schönheit meinen R-Programmierkollegen. Aber gestern ist meine Welt auseinandergebrochen. Beim Lesen der subset
Dokumentation bemerke ich diesen Abschnitt:
Warnung
Dies ist eine praktische Funktion zur interaktiven Verwendung. Für die Programmierung ist es besser, die Standard-Teilmengenfunktionen wie [zu verwenden, und insbesondere die nicht standardmäßige Bewertung der Argument-Teilmenge kann unerwartete Konsequenzen haben.
Könnte jemand helfen zu klären, was die Autoren meinen?
Was verstehen sie unter " interaktiv nutzen "? Ich weiß, was eine interaktive Sitzung ist, im Gegensatz zu einem Skript, das im BATCH-Modus ausgeführt wird, aber ich sehe nicht, welchen Unterschied es machen sollte.
Könnten Sie dann bitte " die nicht standardmäßige Bewertung der Argumentuntermenge " erklären und warum dies gefährlich ist, vielleicht ein Beispiel geben?
dplyr::filter
hat das gleiche Problem. Das heißt, wenn die Umgebung zufällig eine Variable mit diesem Namen hat, wird sie anstelle der Variablen im Datenrahmen verwendet. Verwechselt das Debuggen!
with(airquality, airquality[Month == 8 & Temp > 90, ])