R语言-环境系统

本文介绍了R语言中的环境系统,包括环境的层级结构、如何获取和操作环境,以及作用域规则。详细讲解了如何查找和存储对象,以及函数运行时的活动环境和原环境。还探讨了函数赋值,特别是闭包的概念,帮助理解如何在不同环境下管理对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、环境介绍
我们知道计算机中的文件总是储存在一个个文件夹之中,而这些文件夹又可能储存在另一个父文件夹之中。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)拥有自己的调用函数,具体如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值