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


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。