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


R environment 環境接入


R語言 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

functionformulaNULL ,這是默認值。

value

與函數關聯的環境

x

任意的R對象。

hash

邏輯上,如果TRUE環境將使用哈希表。

parent

用作所創建環境的 shell 的環境。

env

一個環境

size

指定哈希環境初始大小的整數。如果sizeNA 或零,則將使用內部默認值。如果 hashFALSE ,則忽略此參數。

細節

環境由框架或命名對象的集合以及指向封閉環境的指針組成。最常見的例子是函數調用的局部變量框架;它的 shell 是定義函數的環境(除非隨後發生更改)。封閉環境與父框架不同:後者(由 parent.frame 返回)指的是函數調用者的環境。由於很容易混淆,因此最好不要將 ‘parent’ 與環境結合使用(盡管存在函數 parent.env )。

getexists 搜索具有默認 inherits = TRUE 的環境時,它們會在框架中查找變量,然後在封閉框架中查找變量,依此類推。

全局環境 .GlobalEnv 通常稱為用戶工作區,是搜索路徑上的第一項。也可以通過 globalenv() 訪問它。在搜索路徑上,每個項目的附件是下一個項目。

對象 .BaseNamespaceEnv 是基礎包的命名空間環境。基礎包本身的環境可作為 baseenv() 獲得。

如果從任何環境中重複調用 parent.env 來跟蹤找到的封閉鏈,最終會到達空環境 emptyenv() ,在該環境中不能分配任何內容。

替換函數 parent.env<- 極其危險,因為它可用於以違反內部 C 代碼所做假設的方式破壞性地改變環境。它可能會在不久的將來被刪除。

environmentis.environmentbaseenvemptyenvglobalenv 的替換形式是 primitive 函數。

係統環境(例如基本環境、全局環境和空環境)的名稱與包和命名空間環境以及 attach() 生成的環境的名稱相同。其他環境可以通過提供 "name" 屬性來命名,但這需要小心,因為環境具有不尋常的複製語義。

如果 fun 是函數或公式,則 environment(fun) 返回與該函數或公式關聯的環境。如果funNULL,則返回當前的評估環境。

替換形式將函數或公式 fun 的環境設置為給定的 value

當且僅當 objenvironment 時,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

evalgetexistsenvir 參數。

ls 可用於查看環境中的對象,因此 ls.str 對於概覽可能很有用。

sys.source 可用於填充環境。

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Environment Access。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。