-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path07-environments.Rmd
97 lines (53 loc) · 2.89 KB
/
07-environments.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# 环境 {#environments}
```{r setup, include = FALSE}
source("common.R")
```
## 概述
环境是一种用于作用域界定的数据结构,本章将深入讨论环境,深入描述了环境的结构,并使用它们来提高您对\@ref(lexical-scoping)节中四个范围规则的理解。
日常使用R语言的过程中,我们并不需要掌握环境,但理解它十分重要,因为它支持了许多重要的R语言功能,如变量作用范围、命名空间和R6类,并且给您提供用于创建
特定领域语言的工具,开展交互式计算,如dplyr和ggplot2等。
### 测试 {-}
如果您能正常回答以下问题,那么您已经了解了本章中最重要的知识点。您可以在第\@ref(environments-quiz-answer)节找到答案。
1. 请列出最少三个环境与列表的不同之处。
1. 全局环境的父节点是什么?唯一没有父级点节的环境是什么?
1. 函数的封闭环境是什么?为何它十分重要?
1. 如何确定调用函数的环境?
1. ` <- `和` <<- `的区别是什么?
### 题纲 {-}
第\@ref(environment-basic)节介绍了环境的基本属性,并向您介绍了如何创建自己的环境。
第\@ref(env-recursion)节介绍了一个基于环境来计算的函数模板。
第\@ref(special-environments)节介绍了用于特殊目的的环境:用于包、函数内、用于命名空间、用于函数计算等。
第\@ref(call-stack)节介绍了最后一个重要的环境:调用者环境。这需要您了解调用堆栈的相关知识,它描述了一个函数是如何被调用的。如果您曾使用`traceback()`函数来帮助调试,
那么您就会看到调用堆栈。
第\@ref(as-data-structure)节简要介绍了三个用环境解决其他问题的应用场景。
### 前提条件
本章将使用rlang函数来处理环境,因为它能使我们专注于环境的本身,而不是附带的细节。
```{r setup, message = FALSE}
library(rlang)
```
rlang中的`env_`系列函数的设计思想是与管道一起使用:所有函数都把环境作为第一个参数,许多函数还会返回一个环境。为了使代码尽可能简单,本章中我不会使用管道,
但您需要在自己的代码中考虑使用它。
## 环境基础知识 {#environment-basic}
### 基础知识
### 一些重要的环境
### 父环境
### 超级赋值
### 环境中变量的读写
### 高级绑定
### 习题
## 在环境上递归 {#env-recursion}
### 习题
## 特殊环境 {#special-environments}
### 包环境与搜索路径 {#package-environment-and-search-path}
### 函数环境 {#function-environment}
### 命名空间 {#namespace}
### 执行环境 {#execution-environment}
### 习题
## 堆栈调用 {#call-stack}
### 简单堆栈调用
### 延迟计算
### 框架
### 动态作用域
### 习题
## 环境作为数据结构的应用场景 {#as-data-structure}
## 测试题答案 {#environments-quiz-answer}