Wenn ich ein data.frame filtern müssen, das heißt, zu extrahieren Zeilen, die bestimmte Bedingungen erfüllen, ziehe ich die subset
Funktion zu verwenden:Warum ist `[` besser als `Teilmenge`?
subset(airquality, Month == 8 & Temp > 90)
Anstatt die [
Funktion:
airquality[airquality$Month == 8 & airquality$Temp > 90, ]
Es sind zwei Hauptgründe für meine Präferenz:
Ich finde den Code liest besser, von links nach rechts. Sogar Leute, die nichts über R wissen, können sagen, was die oben genannte Anweisung tut.
Da Spalten im Ausdruck
select
als Variablen bezeichnet werden können, kann ich ein paar Tastenanschläge speichern. In meinem obigen Beispiel musste ich nurairquality
einmal mitsubset
eingeben, aber dreimal mit[
.
So war ich leben glücklich, mit subset
überall, weil es kürzer ist und liest besser, auch seine Schönheit zu meinen Kolleginnen und R Programmierer befürworten. Aber gestern ist meine Welt auseinander gebrochen. Beim Lesen der subset
Dokumentation, merke ich diesen Abschnitt:
Warning
This is a convenience function intended for use interactively. For programming it is better to use the standard subsetting functions like [, and in particular the non-standard evaluation of argument subset can have unanticipated consequences.
Könnte jemand helfen klären, was die Autoren bedeuten?
Zuerst, was meinen sie mit "für interaktiv verwenden"? 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.
Dann könnten Sie bitte erklären "die nicht-Standard-Evaluierung der Argument-Untermenge" und warum es gefährlich ist, vielleicht ein Beispiel geben?
Es ist etwas weniger (aber Mutter kleiner als Teilmenge) mit verwenden, 'mit (Luftgüte, Luftgüte [Monat == 8 & Temp> 90])' –
Dieser Thread behandelt die Warnung 'subset()': http://r.789695.n4.nabble.com/Variable-passed-to-function-not-used-in-function-in-select-in-subset- tt872217.html – jthetzel
Sie können sich auch Cirlces 8.2.31 und 8.2.32 von 'The R Inferno' anschauen http://www.burns-stat.com/pages/Tutor/R_inferno.pdf –