6.3.2 attach() 和 detach()
用 $
符号访问对象不是非常的方便,如 accountants$statef
。一个非常有用的工具将会使列表或者数据框的分量可以通过它们的名字直接调用。而且这种调用是暂时性的,没有必要每次都显式的引用列表名字。
函数 attach()
除了可以用目录路径作为参数,也可以使用数据框。假定数据框 lentils
有三个变量 lentils$u
, lentils$v
, lentils$w
。那么
> attach(lentils)
将把数据框绑定在搜索路径的位置2(position 2)上1。如果位置1没有变量u
,v
或 w
,
那么 u
, v
和 w
直接在数据框中访问。因此,下面的命令
> u <- v+w
实际上没有替换数据框中的变量 u
,而是被处于搜索路径位置1工作空间中的变量 u
所屏蔽2。为了真正改变数据框中的数据,最简单的办法还是使用 $
符号:
> lentils$u <- v+w
但是新的分量 u
是不可见的3,直到数据框绑定去除和重新绑定。 去除一个数据框的绑定,可以使用
> detach()
确切地说,该命令去掉了搜索路径中与位置2的绑定。此时,u
, v
和 w
将不再可见,但可以用 lentils$u
类似的命令来查看这些变量。如果实体所处的环境位置值大于2,则可以通过把位置值直接传给 detach
的办法实现绑定去除,不过,最为安全的办法是直接使用名字指明位置,如 detach(lentils)
和 detach("lentils")
注意:最新版本的 R 里面,列表和数据框只能在位置2或更高的位置层次绑定。这样就不可以直接对绑定的列表和数据框赋值(因此,在一定程度上它们是静态的)4。
1:译者注:R 的搜索路径是一种层状结构,当前搜索位置是1,可以通过函数attach()设置搜索路径的位置2。 2:译者注:如果位置1中原先没有变量u,执行命令u <- v + w后,会自动在位置1中创建变量u。 3:译者注:u还是可以访问的, 这里指的是u的值没有发生变化,读者可以自己测试一下。