Operador de extracción R: [vs $ [duplicado]
Hay varias publicaciones en Internet sobre las diferencias y similitudes sobre [y $. Veo alguna publicación donde $se recomienda solo para uso interactivo pero no para programación. Sin embargo, no estoy seguro de entender si se trata de una preferencia o hay una explicación detrás de esta idea.
Ahora digamos que estoy escribiendo un paquete o función, si estoy extrayendo un elemento por nombre (por ejemplo, mtcars[["mpg"]]) ¿por qué debería evitar usarlo mtcars$mpg?
Respuestas
Hay dos diferencias que realmente importan entre [[y $:
[[- funciona con cadenas (es decir, admite sustitución de variables),$no lo hace. Si usted tienemy_var = "mpg", puede utilizarmtcars[[my_var]], pero no es una buena manera de utilizarmy_varcon$.$se completa automáticamente, si el nombre de una columna parcial no es ambiguo.mtcars$mdevolverá lampgcolumna,mtcars[["m"]]volveráNULL.mtcars$dvolveráNULLporque varias columnas comienzan con una "d".
# 1 hace [[que la programación sea más flexible: es extremadamente común en el uso programático trabajar con nombres de columna almacenados como cadenas.
# 2 lo hace $más peligroso: no debe usar nombres de columna abreviados en la programación, sin embargo, en el uso interactivo puede ser agradable y rápido. (Aunque esto es en gran parte discutible con las funciones de autocompletado de RStudio, si usa ese IDE).
$hace una coincidencia parcial: si tiene una columna nombrada xxxen un marco de datos dat, dat$xxdevolverá la xxxcolumna (a menos que también tenga una xxcolumna). Esto puede resultar peligroso.
Siempre lo uso [["..."]]por otra razón: uso RStudio, y hay un buen resaltado para las cadenas, mientras que no hay resaltado con $.