Cuando necesito filtrar un data.frame, es decir, extraer filas que cumplen ciertas condiciones, prefiero usar la subsetfunción:
subset(airquality, Month == 8 & Temp > 90)
En lugar de la [función:
airquality[airquality$Month == 8 & airquality$Temp > 90, ]
Hay dos razones principales para mi preferencia:
Encuentro que el código se lee mejor, de izquierda a derecha. Incluso las personas que no saben nada sobre R podrían decir qué
subsetestá haciendo la declaración anterior.Debido a que las columnas pueden denominarse variables en la
selectexpresión, puedo guardar algunas pulsaciones de teclas. En mi ejemplo anterior, solo tuve que escribirairqualityuna vez consubset, pero tres veces con[.
Así que estaba viviendo feliz, utilizándolo en subsettodas partes porque es más corto y se lee mejor, incluso defendiendo su belleza para mis compañeros codificadores R. Pero ayer mi mundo se rompió. Mientras leo la subsetdocumentación, noto esta sección:
Advertencia
Esta es una función de conveniencia diseñada para su uso interactivo. Para programar es mejor usar las funciones de subconjunto estándar como [, y en particular la evaluación no estándar del subconjunto de argumentos puede tener consecuencias imprevistas.
¿Alguien podría ayudar a aclarar lo que quieren decir los autores?
Primero, ¿qué quieren decir con " para uso interactivo "? Sé lo que es una sesión interactiva, a diferencia de un script ejecutado en modo BATCH, pero no veo qué diferencia debería hacer.
Entonces, ¿podría explicar " la evaluación no estándar del subconjunto de argumentos " y por qué es peligroso, tal vez dar un ejemplo?
dplyr::filtertiene el mismo problema. Es decir, si el entorno tiene una variable con ese nombre, lo usará en lugar de la variable en el marco de datos. ¡Hace para la depuración confusa!
with(airquality, airquality[Month == 8 & Temp > 90, ])