Cuando necesito filtrar un data.frame, es decir, extraer filas que cumplen ciertas condiciones, prefiero usar la subset
funció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é
subset
está haciendo la declaración anterior.Debido a que las columnas pueden denominarse variables en la
select
expresión, puedo guardar algunas pulsaciones de teclas. En mi ejemplo anterior, solo tuve que escribirairquality
una vez consubset
, pero tres veces con[
.
Así que estaba viviendo feliz, utilizándolo en subset
todas 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 subset
documentació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::filter
tiene 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, ])