Otra razón para no usar attach
: permite el acceso a los valores de las columnas de un marco de datos para lectura (acceso) solamente, y tal como estaban cuando están conectados. No es una abreviatura del valor actual de esa columna. Dos ejemplos: Se realizaron
> head(cars)
speed dist
1 4 2
2 4 10
3 7 4
4 7 22
5 8 16
6 9 10
> attach(cars)
> # convert stopping distance to meters
> dist <- 0.3048 * dist
> # convert speed to meters per second
> speed <- 0.44707 * speed
> # compute a meaningless time
> time <- dist/speed
> # check our work
> head(cars)
speed dist
1 4 2
2 4 10
3 7 4
4 7 22
5 8 16
6 9 10
No hay cambios en los datos cars
conjunto a pesar de que dist
y speed
fueron asignados a.
Si se asigna explícitamente de nuevo al conjunto de datos ...
> head(cars)
speed dist
1 4 2
2 4 10
3 7 4
4 7 22
5 8 16
6 9 10
> attach(cars)
> # convert stopping distance to meters
> cars$dist <- 0.3048 * dist
> # convert speed to meters per second
> cars$speed <- 0.44707 * speed
> # compute a meaningless time
> cars$time <- dist/speed
> # compute meaningless time being explicit about using values in cars
> cars$time2 <- cars$dist/cars$speed
> # check our work
> head(cars)
speed dist time time2
1 1.78828 0.6096 0.5000000 0.3408862
2 1.78828 3.0480 2.5000000 1.7044311
3 3.12949 1.2192 0.5714286 0.3895842
4 3.12949 6.7056 3.1428571 2.1427133
5 3.57656 4.8768 2.0000000 1.3635449
6 4.02363 3.0480 1.1111111 0.7575249
la dist
y speed
que se hace referencia en la computación time
son los valores originales (no transformadas); los valores de cars$dist
y cars$speed
cuando se adjuntó cars
.
Un problema es que puede tener otros objetos en la memoria, llamados (en su ejemplo) 'job', o' income'. Si quiere usarlos pero tiene 'attach()' ed data frame 'x', es fácil mezclar el uso de los objetos' x $ job' y 'job', o' x $ income' e 'income'. –