R的环境系统
1.1 文件系统
每个文件都储存在一个文件夹中,每个文件夹又储存在另一个文件夹中,这就形成了一个分层的文件系统。
1.2 环境的含义与规则
- 储存对象的地方。
- 环境类似于列表,作用接近于计算机上的文件夹。
- 每一个环境都与一个父环境相连接,后者是高一层级的环境。
- 父子环境构成了一个分层的环境系统,这个系统的结构是层级系统结构
1.3 R的环境系统
R储存对象时所使用的类似于文件系统的层级结构系统称为R的环境系统。
我们可以通过parenvs函数查看R的环境系统。
#之前未下载pryr包需要下载
library(pryr)
parenvs(all = TRUE) #显示当前会话包含的环境列表
运行结果:
label<chr> name<chr>
<environment: R_GlobalEnv> ""
<environment: package:pryr> "package:pryr"
<environment: 0x0000016c46ec0588> "tools:rstudio"
<environment: package:stats> "package:stats"
<environment: package:graphics> "package:graphics"
<environment: package:grDevices> "package:grDevices"
<environment: package:utils> "package:utils"
<environment: package:datasets> "package:datasets"
<environment: package:methods> "package:methods"
<environment: 0x0000016c44dc1178> "Autoloads"
<environment: base> ""
<environment: R_EmptyEnv> ""
12 rows
- 结果解释:
- 这个列表环境可以想象成是一个树形结构。
- 层次最低的环境叫做R_GlobalEnv(全局环境),它储存在名为package:pryr的环境中,而package:pryr的父环境名叫0x0000016c46ec0588,以此类推。
- 在这个环境列表中,层次最高的环境是== R_EmptyEnv(空环境),它是R中唯一一个没有父环境的环境==。
- R的环境系统并不储存在文件系统中,而是储存在RAM内存中。
- R环境之间的关系并不是嵌套关系。而是每一个环境都与一个父环境相连接。
- 环境与父环境的连接是单向的,我们可以轻易知道某个环境的父环境是什么,但是没有办法直接找到一个环境的子环境。
- R环境的树形结构不支持自上而下的搜索。
1.3.1 操作R环境
1.3.1.1 相关函数
函数 | 解释 | 应用 |
---|---|---|
as.environment() | 可以指向环境树中的任意一个环境 | 接受一个环境名称(字符串)作为输入,并返回该名称所对应的名称,路径 |
globalenv() | 全局环境的调用函数 | 调用全局环境 |
baseenv() | 基环境的调用函数 | 调用基环境 |
emptyenv() | 空环境的调用函数 | 调用控环境 |
parent.env() | 查看某一个环境的父环境 | 返回父环境的相关信息 |
ls() | 查看储存在环境中的对象 | 返回对象名称 |
ls.str() | 查看储存在环境中的对象 | 返回每个对象的结构 |
assign() | 将对象储存在某个特定环境当中 | 用法:assign(“新对象名称(字符串)”,“新对象取值”,envir = “想要储存的环境名称”),如果该环境中已经具有一个相同名称的对象,assign函数会直接覆盖该对象的值。 |
- 环境树中有三个环境拥有自己的调用函数,它们就是:全局环境、基环境和空环境。
- 空环境中没有对象,基环境中有很多对象,打开R会话后创建的所有对象都会储存在全局环境中。
- Rstodio的环境面板可以展示全局环境中的所有对象。
- assign函数的作用类似于赋值符 <-。
1.3.1.2函数的操作与输出
> # as.environment()的应用
> as.environment("package:stats")# "package:stats"是环境名称
<environment: package:stats>
attr(,"name")
[1] "package:stats"
attr(,"p