environment
位於 base
包(package)。 說明
獲取、設置、測試和創建環境。
用法
environment(fun = NULL)
environment(fun) <- value
is.environment(x)
.GlobalEnv
globalenv()
.BaseNamespaceEnv
emptyenv()
baseenv()
new.env(hash = TRUE, parent = parent.frame(), size = 29L)
parent.env(env)
parent.env(env) <- value
environmentName(env)
env.profile(env)
參數
fun |
|
value |
與函數關聯的環境 |
x |
任意的R對象。 |
hash |
邏輯上,如果 |
parent |
用作所創建環境的 shell 的環境。 |
env |
一個環境 |
size |
指定哈希環境初始大小的整數。如果 |
細節
環境由框架或命名對象的集合以及指向封閉環境的指針組成。最常見的例子是函數調用的局部變量框架;它的 shell 是定義函數的環境(除非隨後發生更改)。封閉環境與父框架不同:後者(由 parent.frame
返回)指的是函數調用者的環境。由於很容易混淆,因此最好不要將 ‘parent’ 與環境結合使用(盡管存在函數 parent.env
)。
當 get
或 exists
搜索具有默認 inherits = TRUE
的環境時,它們會在框架中查找變量,然後在封閉框架中查找變量,依此類推。
全局環境 .GlobalEnv
通常稱為用戶工作區,是搜索路徑上的第一項。也可以通過 globalenv()
訪問它。在搜索路徑上,每個項目的附件是下一個項目。
對象 .BaseNamespaceEnv
是基礎包的命名空間環境。基礎包本身的環境可作為 baseenv()
獲得。
如果從任何環境中重複調用 parent.env
來跟蹤找到的封閉鏈,最終會到達空環境 emptyenv()
,在該環境中不能分配任何內容。
替換函數 parent.env<-
極其危險,因為它可用於以違反內部 C 代碼所做假設的方式破壞性地改變環境。它可能會在不久的將來被刪除。
environment
、 is.environment
、 baseenv
、 emptyenv
和 globalenv
的替換形式是 primitive 函數。
係統環境(例如基本環境、全局環境和空環境)的名稱與包和命名空間環境以及 attach()
生成的環境的名稱相同。其他環境可以通過提供 "name"
屬性來命名,但這需要小心,因為環境具有不尋常的複製語義。
值
如果 fun
是函數或公式,則 environment(fun)
返回與該函數或公式關聯的環境。如果fun
是NULL
,則返回當前的評估環境。
替換形式將函數或公式 fun
的環境設置為給定的 value
。
當且僅當 obj
是 environment
時,is.environment(obj)
返回 TRUE
。
new.env
返回一個新的(空)環境,(默認情況下)包含父框架。
parent.env
返回其參數的封閉環境。
parent.env<-
設置其第一個參數的封閉環境。
environmentName
返回打印環境時給出的字符串,如果不是命名環境,則返回""
。
env.profile
返回包含以下組件的列表: size
可以存儲在哈希表中的鏈的數量, nchains
表中非空鏈的數量(由 HASHPRI
報告),以及counts
一個整數向量,給出每個鏈的長度(空鏈為零)。該函數旨在評估散列環境的性能。當env
是非哈希環境時,返回NULL
。
例子
f <- function() "top level function"
##-- all three give the same:
environment()
environment(f)
.GlobalEnv
ls(envir = environment(stats::approxfun(1:2, 1:2, method = "const")))
is.environment(.GlobalEnv) # TRUE
e1 <- new.env(parent = baseenv()) # this one has enclosure package:base.
e2 <- new.env(parent = e1)
assign("a", 3, envir = e1)
ls(e1)
ls(e2)
exists("a", envir = e2) # this succeeds by inheritance
exists("a", envir = e2, inherits = FALSE)
exists("+", envir = e2) # this succeeds by inheritance
eh <- new.env(hash = TRUE, size = NA)
with(env.profile(eh), stopifnot(size == length(counts)))
也可以看看
有關散列與否對性能的影響,請參閱https://en.wikipedia.org/wiki/Hash_table。
eval
、 get
和 exists
的 envir
參數。
ls
可用於查看環境中的對象,因此 ls.str
對於概覽可能很有用。
sys.source
可用於填充環境。
相關用法
- R encodeString 對字符向量進行編碼以供打印
- R eval 計算(未計算的)表達式
- R exists 是否已定義對象?
- R eapply 將函數應用於環境中的值
- R expand.grid 從因子變量的所有組合創建 DataFrame
- R expression 未計算的表達式
- R eigen 矩陣的譜分解
- R extSoftVersion 第三方軟件的報告版本
- R file.path 構造文件路徑
- R grep 模式匹配和替換
- R getwd 獲取或設置工作目錄
- R vector 向量 - 創建、強製等
- R lapply 對列表或向量應用函數
- R dump R 對象的文本表示
- R Sys.getenv 獲取環境變量
- R rank 樣本排名
- R getDLLRegisteredRoutines DLL 中 C/Fortran 例程的反射信息
- R pushBack 將文本推回連接
- R strsplit 分割字符向量的元素
- R seq.Date 生成規則的日期序列
- R invisible 將打印模式更改為不可見
- R noquote “無引號”字符串打印類
- R warning 警告信息
- R rapply 遞歸地將函數應用於列表
- R basename 操作文件路徑
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Environment Access。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。