大数据分析与应用实战:统计机器学习之数据导向编程
上QQ阅读APP看书,第一时间看更新

1.2 环境与辅助说明

编写程序时变量名称的正式称谓是符号(symbols),当我们指定一个对象(参见1.6节编程范式与面向对象概念)给某个变量名称时,实际上就是指定该对象到当前环境(environment)中的一个符号。以R语言为例:

因此,反过来说,环境的定义是一组定义在相同情景(context)的符号集合。R语言中的一切都是对象(object),前述的符号、后面要谈的函数与R表达式、此处的环境等都是对象。理解对象最简单的方式就是把它想象成运用计算机表达出来的事物,而所有的R语言程序代码都是在处理对象,每个R指令的评价与求值(evaluation)都与某个环境有关(Adler,2012)。

一般而言,R语言有四个特殊环境 http://adv-r.had.co.nz/Environments.html

· 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()函数,列出了全局环境的所有父环境,因此可以检查我们到底已经加载了哪些套件到内存中。

图1.5 全局环境下的数据与函数

· baseenv()返回基本环境,顾名思义是前述第一类基本套件base package的环境,其父环境是下面的空环境(empty environment)。

· emptyenv()返回空环境,是所有环境最终的起源,也就是所有环境的祖先(ancestor),是唯一没有父环境的环境。

· environment()返回当前的环境,如前所述,通常是第一点的全局环境。

search()函数除了可以检查内存中加载了哪些套件,还可以看到attach()函数附加上的数据集,以方便用户进行数据处理与分析,例如下面的longley数据集加载到内存后,可以直接引用数据集的变量名,无须输入数据集名称。虽然看似方便,但读者应该思考有哪些缺点?attach()的反向执行就是detach(),可将搜索路径下的数据集与套件从内存中删除。

图1.6 全局环境及其父环境图

objects()和ls()函数也常用来查询特定环境中的对象名称,例如全局环境与基本环境中的对象。

除了环境外,当前工作目录(或称路径)是R读写文件的默认文件夹,因此读者需熟悉工作目录的查询与设定,方能顺利地读写文件。

接下来简单介绍辅助说明,R语言有相当丰富的辅助说明,help.start()返回核心开发团队编制的使用手册、套件参考指南与其他文件。

如果已经明确知道欲查询的函数名或数据集名,可以使用help()函数或其别名(alias)运算符?。

若搜索名称不确定时,则使用help.search()函数扩大搜索范围,从套件短文(vignette)名称、示范代码与说明页面(标题与关键词)中搜索包含“plot”的字符串,??则为help.search()函数的别名。

上面搜索的范围如果太大,可以使用apropos()函数只搜索函数名称中包含字符串"plot"的函数。而find()函数是搜索包含plot函数的套件,参数simple.words=FALSE时会扩大搜索包含"plot"字符串的所有对象。

如欲在互联网上寻求帮助,读者可访问下列网站并输入搜索关键词:

· Google: http://www.google.com/

· Rseek: http://rseek.org/

· Crantastic: http://crantastic.org/

Python语言可以使用pwd查询当前的工作路径,查阅辅助说明也是使用help()函数。当dir()函数不带参数时,返回当前环境内的变量、方法和定义的类别;当dir()函数带环境参数(即套件或对象)时,返回环境的属性与方法(参见1.6节编程范式与面向对象概念)。