- 大数据分析与应用实战:统计机器学习之数据导向编程
- 邹庆士编著
- 1317字
- 2022-07-28 20:15:31
1.2 环境与辅助说明
编写程序时变量名称的正式称谓是符号(symbols),当我们指定一个对象(参见1.6节编程范式与面向对象概念)给某个变量名称时,实际上就是指定该对象到当前环境(environment)中的一个符号。以R语言为例:
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P25_20049.jpg?sign=1739060162-yU0QOWwYwizzNe53k9BjjxyzJO4yCbmi-0-0e48547c4b6183c04a923a7b2a9f5212)
因此,反过来说,环境的定义是一组定义在相同情景(context)的符号集合。R语言中的一切都是对象(object),前述的符号、后面要谈的函数与R表达式、此处的环境等都是对象。理解对象最简单的方式就是把它想象成运用计算机表达出来的事物,而所有的R语言程序代码都是在处理对象,每个R指令的评价与求值(evaluation)都与某个环境有关(Adler,2012)。
一般而言,R语言有四个特殊环境 :
· globalenv()函数返回全局环境,亦称为交互式工作空间(interactive workspace),它通常是用户进行数据处理与建模等工作的当前环境。图1.5显示此环境包含任何用户定义的对象,例如向量、矩阵、数组、数据集、列表、时间序列等数据对象(参见1.3节R语言数据对象)或函数对象。加载的各个套件与附加上的数据集会依序地串在全局环境之下,成为全局环境的父环境,这一长串的父子环境又称为搜索路径(search path),如图1.6所示。图中下方为父,上方为子,全局环境的父环境指的是先前使用library()或require()载入的一个个套件(library()与require()的区别请看https://yihui.name/en/2014/07/library-vs-require/)。1.1.2节提过的search()函数,列出了全局环境的所有父环境,因此可以检查我们到底已经加载了哪些套件到内存中。
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P26_1251.jpg?sign=1739060162-lRyuTIFBpamoZwvh6KJkyy6JdLSCjxy7-0-8c858896ee03d566fcf33300991ac3e1)
图1.5 全局环境下的数据与函数
· baseenv()返回基本环境,顾名思义是前述第一类基本套件base package的环境,其父环境是下面的空环境(empty environment)。
· emptyenv()返回空环境,是所有环境最终的起源,也就是所有环境的祖先(ancestor),是唯一没有父环境的环境。
· environment()返回当前的环境,如前所述,通常是第一点的全局环境。
search()函数除了可以检查内存中加载了哪些套件,还可以看到attach()函数附加上的数据集,以方便用户进行数据处理与分析,例如下面的longley数据集加载到内存后,可以直接引用数据集的变量名,无须输入数据集名称。虽然看似方便,但读者应该思考有哪些缺点?attach()的反向执行就是detach(),可将搜索路径下的数据集与套件从内存中删除。
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P27_1262.jpg?sign=1739060162-HMI6JrxloX0xuiXHEWRp2W7rgx6tNrOe-0-b180881b37877cac954fbe287167b4e2)
图1.6 全局环境及其父环境图
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P27_19827.jpg?sign=1739060162-66zgjgARMFSDPLXul678op4QcV8c774W-0-d8c8650758c4cc821b82a6823dde0536)
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P28_19828.jpg?sign=1739060162-ObFcshEEilyYLQbKqN0XmDuqmSb2GwoV-0-839337c02c868248dbb4e733ea2d4cbe)
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P29_19829.jpg?sign=1739060162-XX5zG8u2K7P0oEXwe7jKKOJ6wGQHNbt0-0-9a8064c971544aaf751792126f6f179c)
objects()和ls()函数也常用来查询特定环境中的对象名称,例如全局环境与基本环境中的对象。
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P30_19831.jpg?sign=1739060162-osyzPOF1ua40z9pDLx1wt1USigOAqoes-0-fa8779a76d068173585e21d3889c5dd1)
除了环境外,当前工作目录(或称路径)是R读写文件的默认文件夹,因此读者需熟悉工作目录的查询与设定,方能顺利地读写文件。
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P30_19832.jpg?sign=1739060162-2EWGadM0ujTT68Tk9q6YWx9Wqgk8FFzQ-0-76b49da0dc949222a0db0945f2723af4)
接下来简单介绍辅助说明,R语言有相当丰富的辅助说明,help.start()返回核心开发团队编制的使用手册、套件参考指南与其他文件。
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P30_1372.jpg?sign=1739060162-J8khO9cVEfPhRSd6BnxGdxYhKyY51Cfe-0-1616c3a077e6193eff9f234d3945d9c0)
如果已经明确知道欲查询的函数名或数据集名,可以使用help()函数或其别名(alias)运算符?。
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P30_1379.jpg?sign=1739060162-WMrVP2LWnFIsGyX2ejzGXgUwcgkbGl5I-0-324f78489bfc749895feef6494e92471)
若搜索名称不确定时,则使用help.search()函数扩大搜索范围,从套件短文(vignette)名称、示范代码与说明页面(标题与关键词)中搜索包含“plot”的字符串,??则为help.search()函数的别名。
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P31_20050.jpg?sign=1739060162-fUonj8Pdqse5LBKNO4buK0hhiS9kCOfH-0-8374f3a8f3a24a77cb817b944ce4d91e)
上面搜索的范围如果太大,可以使用apropos()函数只搜索函数名称中包含字符串"plot"的函数。而find()函数是搜索包含plot函数的套件,参数simple.words=FALSE时会扩大搜索包含"plot"字符串的所有对象。
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P31_19839.jpg?sign=1739060162-U6jlJTGaorBL31P4oi0UI9fJmqC2xumA-0-535982e09d301bb06a44a847baa042db)
如欲在互联网上寻求帮助,读者可访问下列网站并输入搜索关键词:
· Google: http://www.google.com/
· Rseek: http://rseek.org/
· Crantastic: http://crantastic.org/
Python语言可以使用pwd查询当前的工作路径,查阅辅助说明也是使用help()函数。当dir()函数不带参数时,返回当前环境内的变量、方法和定义的类别;当dir()函数带环境参数(即套件或对象)时,返回环境的属性与方法(参见1.6节编程范式与面向对象概念)。