Quando ho bisogno di filtrare un data.frame, vale a dire, le righe estratto che soddisfano determinate condizioni, preferisco usare la funzione subset
:Perché `` `` meglio di `sottoinsieme`?
subset(airquality, Month == 8 & Temp > 90)
Piuttosto che la funzione [
:
airquality[airquality$Month == 8 & airquality$Temp > 90, ]
Ci sono due ragioni principali per la mia preferenza:
Trovo che il codice si legge meglio, da sinistra a destra. Persino le persone che non sanno nulla di R potrebbero dire cosa sta facendo la dichiarazione
subset
precedente.Poiché le colonne possono essere denominate come variabili nell'espressione
select
, è possibile salvare alcune sequenze di tasti. Nel mio esempio sopra, ho solo dovuto digitareairquality
una volta consubset
, ma tre volte con[
.
Così vivevo felice, utilizzando subset
ovunque, perché è più breve e legge meglio, anche sostenendo la sua bellezza ai miei compagni di programmatori R. Ma ieri il mio mondo è andato in pezzi. Durante la lettura della documentazione subset
, ho notato questa sezione:
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.
Qualcuno potrebbe aiutare a chiarire che cosa significano gli autori?
In primo luogo, cosa intendono per "per l'uso in modo interattivo"? So che cos'è una sessione interattiva, al contrario di uno script eseguito in modalità BATCH ma non vedo che differenza dovrebbe fare.
Quindi, potresti spiegare "la valutazione non standard del sottoinsieme argomento" e perché è pericoloso, magari fornire un esempio?
E 'un po' meno (ma dado meno di sottoinsieme) da usare con, 'con (airquality, airquality [Mese == 8 & Temp> 90,])' –
Questo thread discute l'avvertimento 'subset()': http://r.789695.n4.nabble.com/Variable-passed-to-function-not-used-in-function-in-select-in-subset- tt872217.html – jthetzel
Potresti anche dare un'occhiata a Cirlces 8.2.31 e 8.2.32 di 'The R Inferno' http://www.burns-stat.com/pages/Tutor/R_inferno.pdf –