Quando devo filtrare un data.frame, ovvero estrarre le righe che soddisfano determinate condizioni, preferisco usare la subset
funzione:
subset(airquality, Month == 8 & Temp > 90)
Piuttosto che la [
funzione:
airquality[airquality$Month == 8 & airquality$Temp > 90, ]
Ci sono due motivi principali per la mia preferenza:
Trovo che il codice sia migliore, da sinistra a destra. Perfino le persone che non sanno nulla di R potrebbero dire cosa
subset
sta facendo la frase sopra.Poiché le colonne possono essere definite variabili
select
nell'espressione, posso salvare alcune sequenze di tasti. Nel mio esempio sopra, ho dovuto scrivere soloairquality
una volta consubset
, ma tre volte con[
.
Quindi vivevo felice, usando subset
ovunque perché è più corto e legge meglio, sostenendo persino la sua bellezza per i miei colleghi programmatori. Ma ieri il mio mondo si è rotto. Durante la lettura della subset
documentazione, noto questa sezione:
avvertimento
Questa è una funzione di praticità destinata all'uso interattivo. Per la programmazione è meglio usare le funzioni di sottoinsieme standard come [, e in particolare la valutazione non standard del sottoinsieme di argomenti può avere conseguenze impreviste.
Qualcuno potrebbe aiutare a chiarire cosa significano gli autori?
In primo luogo, cosa intendono per " uso interattivo "? So cos'è una sessione interattiva, al contrario di uno script eseguito in modalità BATCH, ma non vedo quale differenza dovrebbe fare.
Quindi, potresti spiegare " la valutazione non standard del sottoinsieme di argomenti " e perché è pericoloso, magari fornire un esempio?
dplyr::filter
ha lo stesso problema. Vale a dire se l'ambiente ha una variabile con quel nome, la utilizzerà invece della variabile nel frame di dati. Crea confusione debug!
with(airquality, airquality[Month == 8 & Temp > 90, ])