首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

解密R语言函数的环境空间(3)

解密R语言函数的环境空间(3)

6. 完整的环境操作接下来,把函数环境空间的操作放到一起,做一个完整环境的说明。

图片解释:
  • 1. 蓝色圆圈,表示函数封闭,始终指向函数定义环境空间。
  • 2. 粉色长方形,表示已加载的包环境空间,包括R_GlobalEnv, base, R_EmptyEnv等
  • 3. 绿色长方形,表示已定义的函数环境空间。
  • 4. 绿色长方形内的白色长方形,表示命名函数,包括fun1,fun2。
  • 5. 不在绿色长方形内白色长方形,表示已定义的匿名函数。
  • 6. 在长方形内的粉色小正方形,表示在环境空间中定义的变量,包括x,fx,f2。
  • 7. 橙色小正方形,表示在内存中的变量值,包括5,2,1。
  • 8. 黑色直线,表示变量的赋值。
  • 8. 蓝色直线,表示指向封闭环境空间。
  • 9. 橙色直线,表示函数调用过程。
  • 10. 程序运行时,产生了函数环境空间的内存地址,包括0x000000000e0db220,0x000000000e0e8cf0, 0x000000000e0db178。
上图中结构,用R代码描述。
# 在当前环境定义变量x> x<-5# 在当前环境定义fun1> fun1<-function(){+   # 打印fun1环境空间+   print("fun1")+   print(environment())++   # 在fun1函数环境中,定义变量x+   x<-1+   function() {+     # 打印匿名环境空间+     print("funX")+     print(environment())+     # 从一级父环境空间中,找到变量x+     x+15+   }+ }# 在当前环境定义fun2> fun2<-function(){+   # 打印fun2环境空间+   print("fun2")+   print(environment())++   # 在fun2函数环境中,定义变量x+   x<-2+   fun1()  #调用函数fun1+ }# 在当前环境空间中,调用函数fun2,绑定到f2> f2<-fun2()[1] "fun2"<environment: 0x000000000e0db220>[1] "fun1"<environment: 0x000000000e0e8cf0># 在当前环境空间中,调用匿名函数,并绑定到fx> fx<-f2()[1] "funX"<environment: 0x000000000e0db178># 输出fx的结果> fx[1] 16最后,通过完整的例子,我们清楚了R语言环境空间的基本结构和调用关系。接下来,我们就可以利用环境空间的特性来做一些实际的开发任务了。
返回列表