一、环境介绍
我们知道计算机中的文件总是储存在一个个文件夹之中,而这些文件夹又可能储存在另一个父文件夹之中。R存储对象也存在这样一个类似的层级系统结构。每个对象都存储在一个环境(environment)中,环境是一个类似于列表的对象,概念上接近文件夹。
我们可以通过加载pryr包中的parenvs函数查看R的环境系统,parevns(all=TRUE)会返回当前会话包含的环境列表,这取决于你加载了那些R包:
> install.packages("pryr")
> library(pryr)
> parenvs(all=TRUE)
label name
1 <environment: R_GlobalEnv> ""
2 <environment: package:pryr> "package:pryr"
3 <environment: 0x00000000094d9ce0> "tools:rstudio"
4 <environment: package:stats> "package:stats"
5 <environment: package:graphics> "package:graphics"
6 <environment: package:grDevices> "package:grDevices"
7 <environment: package:utils> "package:utils"
8 <environment: package:datasets> "package:datasets"
9 <environment: package:methods> "package:methods"
10 <environment: 0x0000000008224e38> "Autoloads"
11 <environment: base> ""
12 <environment: R_EmptyEnv> ""
结果中越前面的环境等级越低,越后面的环境层级越高。其中R_EmptyEnv是唯一没有父环境的环境。将R的环境系统比作文件夹只是一种类比,R的环境系统实质上是存储在RAM内存中,并且R环境之间的关系并不是嵌套关系。而是更接近树形结构,每一个环境都与一个父环境相连,但这样的连结是单向的:我们可以很轻松的找到某个环境的父环境,却难以直接找到一个环境的子环境。因此R环境的树形结构不支持自上而下的搜索。
二、操作R环境
1.获取/调用环境
as.environment(“……”)可以返回字符串名称对应的环境,而全局环境(R_GlobalEnv)、基环境(base)和空环境(R_EmptyEnv)拥有自己的调用函数,具体如下: