《数据科学:R语言实现》——1.5 使用词法域

简介:

本节书摘来自华章出版社《数据科学:R语言实现》一 书中的第1章,第1.5节,作者:R for Data Science Cookbook 丘祐玮(David Chiu),更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.5 使用词法域

词法域又称静态绑定,确定了一个取值如何绑定到一个函数的自由变量。它是源于范式函数式编程语言的重要特征,也是R语言区别于S语言的地方。在本教程中,我们会展示词法域在R语言中是如何工作的。
准备工作
确保你已经在操作系统中安装了R语言,完成了之前的步骤。
实现步骤
执行下列步骤,理解词法域规则是如何工作的。
1.我们创建一个变量x,然后创建函数tmpfunc,返回结果x+3:
screenshot
screenshot

运行原理
有两种不同类型的变量绑定方法:一种是词法绑定,另一种是动态绑定。词法绑定也叫作静态绑定,它的每一个绑定域都会管理变量名和词法环境中的取值。 也就是说,如果一个变量被词法约束了,它会搜索最近的词法环境中的绑定关系。与此不同的是,动态绑定会以全局状态保存所有的变量和取值。 也就是说,如果一个变量被动态约束了,它会与最新创建的变量绑定。
为了说明词法绑定是如何工作的,我们首先创建了变量x,并在全局环境中指派5给x。然后,我们可以创建名为tmpfunc的函数。这个函数输出x+3作为返回值。尽管我们并没有在函数tmpfunc中把任何取值指派给x,x依然在全局环境中找出了取值5。
然后,我们创建了另一个名为parentfunc的函数。在这个函数里,我们把x指派成3,并创建嵌套函数(定义在函数中的函数)childfunc。在parentfunc函数体底部,我们调用childfunc作为函数输出。我们发现此时函数使用了定义在parentfunc中的x,而不是定义在parentfunc之外的x。这是因为R会在全局环境中搜索匹配的符号名,并在搜索列表中搜索程序包的命名空间。
接下来,让我们看一下,如果我们在全局状态下创建名为x的字符串,并在函数中对局部变量x指派为5,会返回什么结果。当我们调用localassign函数时,发现该函数返回了5,而不是字符串取值。另外,如果我们打印出x的取值,我们依然可以看到字符串结果。当局部变量和全局变量拥有同样的名字时,函数的指派并不会改变全局状态下的x值。如果你想在全局状态下修改x的值,你可以使用记号<<-。
更多技能
为了查看R的搜索列表(或者路径),你可以键入search()来列出相关结果:
screenshot

相关文章
|
Java 程序员 云栖大会
9月20日云栖精选夜读 | 如何轻松搞定数据科学面试:Python&R语言篇
对于数据科学家来说,工作的一大部分都需要在交互式编程环境中对数据进行处理、分析和可视化。 在过去几年,R语言和Python成了进行数据科学中最炙手可热的两种语言。这两种语言各有优缺点,掌握这两种语言大有益处,但是针对面试者而言,最好的方式是学习其中一种并熟练掌握。
3088 0
|
数据挖掘 数据库 Python
【R数据科学读书笔记】R语言的数据结构原来可以这样理解
R语言的数据结构原来可以这样理解 这是R数据科学的读书笔记之一,《R数据科学》是一本教你如何用R语言进行数据分析的书。即便我使用R语言快2年多了,但是读这本书还是受益颇多。
1029 0
|
自然语言处理 数据挖掘 Unix
【R数据科学读书笔记】R语言中的管道操作
R语言中的管道操作 这是R数据科学的读书笔记之一,《R数据科学》是一本教你如何用R语言进行数据分析的书。即便我使用R语言快2年多了,但是读这本书还是受益颇多。
1186 0
|
机器学习/深度学习 Python
Python赶超R语言,成为数据科学、机器学习平台中最热门的语言?
近日,kdnuggets做了一个关于数据科学、机器学习语言使用情况的问卷调查,他们分析了954个回答,得出结论——Python已经打败R语言,成为分析、数据科学和机器学习平台中使用频率最高的语言。
1181 0
|
机器学习/深度学习 大数据 物联网