2014-12-14

Acceder a las variables de un data frame con attach en R

Title Usando la función attach podemos acceder a los nombres de las variables (columnas) de un data frame sin tener que repetir el nombre del data frame. Por ejemplo si queremos acceder a la variable height del data frame women.

# Sin usar attach
women$height
# Usando attach
attach(women)
height # Variable sin ir precedida del nombre del data frame
La función attach lo que hace realmente es crear un entorno en la ruta de búsqueda (search path) y en él copia los elementos de la lista o columnas del data frame. El search path es la ruta que R seguirá en la búsqueda de objetos y variables. El orden es importante: si el objeto lo encuentra en un entorno, no pasará al siguiente. Con attach, hacemos accesible para R ese data frame, y será posible referirse a sus variables directamente sin especificar el nombre del data frame.

Con la función search podemos listar las bases de datos, objetos y paquetes adjuntos. Contiene un environment por cada paquete cargado y objeto adjuntado al search path.

search()
Se puede apreciar que la base de datos women está en segunda posición global environment.

 [1] ".GlobalEnv"        "women"             "package:hflights" 
 [4] "package:dplyr"     "tools:rstudio"     "package:stats"    
 [7] "package:graphics"  "package:grDevices" "package:utils"    
[10] "package:datasets"  "package:methods"   "Autoloads"        
[13] "package:base"
Por defecto, R adjunta el objeto en la segunda posición del search path, inmediatamente después del global environment, el entorno de trabajo en el que trabajamos normalmente. Podemos alterar la posición del search path en la que adjuntará el objeto, pero no podemos asignarle la posición 1. Por ello, si creamos una variable con el mismo nombre en nuestro entorno de trabajo (global environment), R la encontrará primero en él, y no estaremos trabajando con el data frame deseado.

# Para desconectar el data frame
deattach(women)

Advertencias

Varios autores desaconsejan su uso porque, como vimos antes, puede originar confusión. La misma ayuda de la función attach nos advierte de los peligros de su uso:

  1. Referirnos a un nombre de un objeto erróneamente.
  2. Crear una nueva copia del objeto (data frame) en lugar de modificar el objeto ya vinculado (attached).
  3. Olvidar usar detach para desvincular la base de datos.
  4. Recomienda usar with en lugar de attach/detach.
El manual de estilo de R creado por google es más expeditivo con la función attach:

Las posibilidades de crear errores usando attach son numerosas. Se desaconseja su uso.

Efectos secundarios, un ejemplo

Creer que modificamos el objeto que acabamos de adjuntar (attach), cuando en realidad creamos un vector en el entorno de trabajo (global environment), dejando el objeto original adjunto en el search path sin alterar.

# Crea una nueva variable 
# en nuestro espacio de trabajo
height <- height*2
La asignación normal, mediante el operador <- crea una versión modificada de la variable en el entorno de trabajo (global environment). Cuando volvamos a utilizar la variable height, se referirá a la copia recién creada en el entorno de trabajo, no al data frame adjuntado en el search path.

height
[1] 232 236 240 244 248 252 256 260 264 268 272 276 280 284 288
Elimina el vector creado en el entorno de trabajo. Al volver a usar height se referirá al data frame previamente adjuntado.

rm(height)
Si queremos alterar el data frame adjuntado en el search path, usamos el operador <<- o la función assign:

# Para modificar la variable adjuntada (attached)
# en el search path
height <<- height*2
Cuando hayamos finalizado nuestro trabajo, es importante desvincular el data frame del global environment.

detach(women)

Alternativas

Una alternativa a la función attach es la función with.

# Sin attach
summary(women$height)
# Con with
with(women, summary(height))
Referencias:

1 comentario:

Nube de datos