當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。