当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R attach 将一组 R 对象附加到搜索路径


R语言 attach 位于 base 包(package)。

说明

数据库附在R搜索路径。这意味着数据库的搜索方式是R在评估变量时,只需给出名称即可访问数据库中的对象。

用法

attach(what, pos = 2L, name = deparse1(substitute(what), backtick=FALSE),
       warn.conflicts = TRUE)

参数

what

‘database’。这可以是一个data.frame或一个list或一个R使用创建的数据文件save或者NULL或一个环境。另请参阅“详细信息”。

pos

指定 search() 中附加位置的整数。

name

用于附加数据库的名称。以 package: 开头的名称保留给 library

warn.conflicts

合乎逻辑的。如果 TRUEmessage() 会通过附加数据库打印 conflicts ,除非该数据库包含对象 .conflicts.OK 。冲突是函数屏蔽函数,或者非函数屏蔽非函数。

注意:尽管由于历史原因名称为warn.conflicts,但有关冲突的消息不是warning(),而是message()

细节

计算变量或函数名称时R在列出的数据库中搜索该名称search。使用适当类型的名字。

通过将 DataFrame (或列表)附加到搜索路径,可以仅通过名称来引用 DataFrame 中的变量,而不是作为 DataFrame 的组件(例如,在下面的示例中,height 而不是比 women$height )。

默认情况下,数据库附加在搜索路径中的位置 2,紧邻用户工作区之后、所有先前附加的包和先前附加的数据库之前。可以将其更改为稍后使用 pos 选项附加到搜索路径中,但不能附加到 pos = 1

数据库实际上并未附加。相反,在搜索路径上创建一个新环境,并将列表元素(包括 DataFrame 的列)或保存文件或环境中的对象复制到新环境中。如果使用 <<-assign 分配给附加数据库,则仅更改附加副本,而不更改原始对象。 (正常分配将在用户工作区中放置修改后的版本:请参阅示例。)因此,attach 可能会导致混乱。

一个有用的 ‘trick’ 是使用 what = NULL (或等效的 length-zero 列表)在搜索路径上创建一个新环境,可以通过 assignloadsys.source 将对象分配到该环境中。

"package:" 开头的名称保留给library,最终用户不应使用。默认情况下,附加文件的名称为 file:what 。为附加环境给出的 name 参数将由 search 使用,并且可以用作 as.environment 的参数。

environment 通过 "name" 属性以不可见方式返回。

好的做法

attach 具有更改搜索路径的副作用,这很容易导致找到特定名称的错误对象。人们经常忘记detach 数据库。

在交互式使用中, with 通常优于使用 attach /detach ,除非 whatsave() 生成的文件,在这种情况下 attach()load() 的(安全)包装器。

在编程中,函数不应该改变搜索路径,除非这是它们的目的。 with 通常可以在函数内使用。如果没有,好的做法是

  • 始终使用独特的 name 参数,并且

  • attach 调用之后立即使用唯一名称对 detach 进行 on.exit 调用。

这可确保即使函数被中断或 attach 调用后的代码更改搜索路径,搜索路径也保持不变。

例子

require(utils)

summary(women$height)   # refers to variable 'height' in the data frame
attach(women)
summary(height)         # The same variable now available by name
height <- height*2.54   # Don't do this. It creates a new variable
                        # in the user's workspace
find("height")
summary(height)         # The new variable in the workspace
rm(height)
summary(height)         # The original variable.
height <<- height*25.4  # Change the copy in the attached environment
find("height")
summary(height)         # The changed copy
detach("women")
summary(women$height)   # unchanged

## Not run: ## create an environment on the search path and populate it
sys.source("myfuns.R", envir = attach(NULL, name = "myfuns"))

## End(Not run)

参考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

也可以看看

librarydetachsearchobjectsenvironmentwith

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Attach Set of R Objects to Search Path。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。