Operador de extracción R: [vs $ [duplicado]

Sep 28 2020

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

5 GregorThomas Sep 28 2020 at 17:42

Hay dos diferencias que realmente importan entre [[y $:

  1. [[- funciona con cadenas (es decir, admite sustitución de variables), $no lo hace. Si usted tiene my_var = "mpg", puede utilizar mtcars[[my_var]], pero no es una buena manera de utilizar my_varcon $.

  2. $se completa automáticamente, si el nombre de una columna parcial no es ambiguo. mtcars$mdevolverá la mpgcolumna, 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).

2 StéphaneLaurent Sep 28 2020 at 17:40

$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 $.