您好,欢迎访问三七文档
Next:Notes,Previous:(dir),Up:(dir)R语言定义乔呼和整理上传本册主要对R语言,赋值解释(explainingevaluation),解析,面向对象编程,语言上的计算等方面进行一个介绍。本文档的当前版本为0.01β草稿。该文档译自R-2.3.1文档(2006年6月1日)。丁国徽(ghding@gmail.com)译。本文档的一些发布信息放置在。ISBN3-900051-13-5Notes:说明Introduction:绪论Objects:对象Evaluationofexpressions:表达式求值Functions:函数Object-orientedprogramming:面向对象编程Computingonthelanguage:语言上的计算Systemandforeignlanguageinterfaces:系统和其它语言的接口Exceptionhandling:异常处理Debugging:调试Parser:解析器FunctionandVariableIndex:函数和变量索引ConceptIndex:概念索引References:参考文献1绪论R是为统计计算和图形展示而设计的一个系统。它包括一种编程语言,高级别图形展示函数,和其它语言的接口以及调试工具。本手册将会详细描述和定义R语言。R是统计领域广泛使用的诞生于1980年左右的S语言的一个分支。S的主要设计者JohnM.Chambers因为S语言方面的工作获得了1998年ACM软件系统奖(ACMSoftwareSystemsAward)。该语言的语法表面上类似C,但在语义上是函数设计语言的(functionalprogramminglanguage)的变种并且和Lisp以及APL有很强的兼容性。特别的是,它允许在“语言上计算”(computingonthelanguage)。这使得它可以把表达式作为函数的输入参数,而这种做法对统计模拟和绘图非常有用。通过命令行运行简单的表达式可以充分地交互使用R的功能。一些用户可能这样做就能满足要求了,但还有一些用户想编写他们自己的函数。编写函数的用户要么用以一种特别的方式,系统化一些常常重复的工作或者为新的功能编写扩展包。本手册的目的是想记录R语言的本质。也就是它所工作的对象,表达式赋值过程的细节。这些内容的了解对编写R函数非常有用。另外一些针对特定任务的主题,如绘图,在本册里面只是简单描述,而在其它手册里面有专门的论述。尽管手册中的大部分内容同样适用于S,但S和R还是有一些实质上的差异。为了不至于混淆,我们集中描述R。R语言的设计包含了一系列亮点,当然也有让用户惊讶的公共缺陷。许多设计是基于底层的连贯性考虑,我们会在后面的行文中解释。它还包括很多有用的快捷方式和特殊用法,使得用户可以很简洁的表述复杂的操作。一旦用户熟悉底层的概念,这些用法将会变得非常的自然。在某些情况下,有多种方法完成同一件事情,但是其中有些技术依赖于语言的实现,另外一些技术则是一个更高层次上的抽象。在这种情况下,我们会指出首选的用法。读本册前,我们假定用户对R已经有一定的了解。这不是一本R的入门读物,而是一本程序员的参考手册。其它文档给出了互补的信息:特别Preface(RIntroduction)给出R语言的入门介绍和Systemandforeignlanguageinterfaces(WritingRExtensions)详细介绍如何用编译好的代码扩充R语言。2对象在所有编程语言中,变量提供了一种访问内存中数据的方法。R没有提供直接访问计算机内存的方法,但提供了许多我们称之为对象的特殊数据结构。这些对象通过变量或者符号(symbol)访问。不过在R语言里面,符号本身就是对象并且和使用其它对象一样的方式使用。这和许多其它语言不同,但有广泛的影响。在本章,我们会给出R里面各种数据结构的初步描述。对这些数据结构更为详细的讨论会在后面的章节中展开。R语言特有的函数typeof返回R对象的类型。注意在R底层的C代码中,所有对象都是指向一个有类型定义SEXPREC的结构体(structure)的指针;不同的R数据类型在C里面用决定结构体各部分信息的SEXPTYPE表示。下面的表格描述了typeof可能的返回值以及它们的涵义。NULL空symbol一个变量名字pairlist成对列表对象closure一个函数environment一个环境promise一个用于实现悠闲赋值的对象language一个R语言构建special一个不可针对参数求值的内置函数builtin一个可针对参数求值的内置函数logical含逻辑值的向量integer含整数值的向量double含实数值的向量complex含复数值的向量character含字符值的向量...特定变量长度参数***any一个可以匹配任何类型的特殊类型***expression一个表达式对象list一个列表externalptr一个外表指针对象weakref一个弱引用对象(aweakreferenceobject)raw一个字节元素向量我认为用户不用深入以`***'标记的条目,至少没有想象的那么容易;但是可以多看一些例子。根据Becker,Chambers&Wilks(1988)中的说明,函数mode返回对象的模式信息,并且和其它S语言的变种完全兼容。最后,同样基于Beckeretal.(1988)的考虑,函数storage.mode返回其参数的存储模式(storagemode)。该函数常常用于,在外部语言(如C或FORTRAN)中调用函数时确保R对象有被调用的程序所期望的数据对象。(在S语言里面,整数值或实数值向量都是numeric模式,因此它们的存储模式需要区分。)x-1:3typeof(x)[1]integermode(x)[1]numericstorage.mode(x)[1]integerR在计算过程中,对象常常需要强制转换成不同的类型(type)。有许多函数可用于显式的强制转换。在仅仅用R语言编程的时候,一个对象的类型通常不会影响计算结果,但是当混合使用外部编程语言或不同的操作系统时,常常需要保证对象类型的正确。Basictypes:基本类型Attributes:属性Specialcompoundobjects:特殊的混合对象2.1基本类型Vectorobjects:向量对象Listobjects:列表对象Languageobjects:语言对象Expressionobjects:表达式对象Functionobjects:函数对象NULLobject:空对象Built-inobjectsandspecialforms:内置对象和特别形态Promiseobjects:允诺对象Dot-dot-dot:...对象Environmentobjects:环境对象Pairlistobjects:成对列表对象Any-type:任意类型2.1.1向量向量可以看着是由一系列包含数据的紧密联结的单元格子构成。这些单元格通过类似x[5]的索引操作来访问。更细节的内容可以参考Indexing。R有六个基本(`原子性')向量类型:逻辑型,整数型,实数型,复数型,字符串(字符)型和原味型(raw)。这些不同向量类型的模式和存储模式如下表所示。typeofmodestorage.modelogicallogicallogicalintegernumericintegerdoublenumericdoublecomplexcomplexcomplexcharactercharactercharacterrawrawraw单个的数字,如4.2,以及字符串,如fourpointtwo,仍然是长度为1的向量,因为没有更基本的数据类型了。零长度向量是允许的(也是非常有用的)。字符串向量的模式和存储模式都是character。字符向量的单个元素常常是字符串。2.1.2列表列表(“广义向量”)是另外一种数据存储方式。列表含有元素,每一个元素可以是任意R对象类型,也就是说,列表的各个元素可以是不同的数据类型。列表元素的访问可以通过三个不同索引操作实现。这些在Indexing部分将会详细介绍。列表是向量,并且在不能使用列表时,基本的向量类型可以转换为原子向量。2.1.3语言对象三种对象类型构成了R语言的全部。它们分别是调用类型(calls),表达式类型(expressions)和命名类型(names)。既然R有expression类型的对象,所以我们应该尽量避免在其它地方使用“表达式”这个词。需要注意的是,语法上正确的表达式会被看作是程序语句(statements)。这些对象分别有call,expression,和name三种模式。这些对象可以利用quote机制从表达式直接创建,并且可以通过函数as.list和as.call与列表相互转换。解析树的分量可以通过标准的索引操作析取。Symbolobjects:符号对象2.1.4表达式对象在R里面,我们可以创建类型为expression的对象。一个表达式(expression)含有一个或多个程序语句。其中,程序语句(statement)指的是语法上正确的一群标记的聚集。表达式对象是一种特殊语言对象,它包含一些解析过但还未求值的R语句。相比其它语言对象,它的主要差别在于一个表达式对象可以包含多个同类型的表达式。另外一个更细微的差别是,expression类型的对象仅仅当它显式地传递给函数eval时才求值,而其它语言对象可在一些意想不到的情况下求值。表达式对象的操作行为非常像列表,它的元素访问方式和列表元素的访问方式一样。2.1.5函数对象在R里面,函数是对象并且可以有许多和其它对象类似的操作方法。函数(更准确地说是函数闭包(functionclosure))有三个基本的组成部分:形式化的参数列表,功能实现的主体和环境。参数列表是一个以逗号分割的参数的列表。参数可以是符号,或者是symbol=default的形式,或者是特殊参数...。第二种参数形式常常用于设置参数的默认值。如果函数调用时参数缺省,该值会被采用。...参数比较特殊,而且可以包含任意多的参数。它通常在参数个数未知或者某些参数会传递给其它函数的情况下使用。功能实现的主体是解析过的R语句。它常常是大括弧里面的一系列程序语句。当然,它也有可能是一个单独的语句,一个符号,甚至是一个常量。函数的环境指的是当一个函数被创建时所激活的环境。任何被该环境绑定的符号都可以被函数调用和访问。函数代码及其对应环境中绑定的东西构成的组合体称为`函数闭包'(functionclosure)。该术语源自函数化编程理论(functionalprogrammingtheory)。在本文档中,我们主要使用术语`函数',但使用`闭包'(closure)来强调一个函数相关环境的重要性。可以通过formals,body,和environment三个构造(这三个构造也可用在赋值语句的左边)来析取和操作闭包的三个部分。最后一个构造可以用来去掉不想要的环境捕获物(environmentcapture)。当一个函数被调用时,一个新的环境(称为求值环境(evaluationenvironment))将会被创建。该环境的外围(enclosure,见Environmentobjects)来自函数闭包的环境。这个新的环境最初由函数的未被求值的参数构成;当求值过程进行时,局部变量将会在该环境中创建。可以方便地用as.list和as.function将函数和列表结构相互转换。这些方法可以用来实现和S兼容,但我们不推崇这样使用。2.1.6空对象NULL是一种非常特殊的对象。它用于表明一个对象不存在。注意不能混淆空对象与零长度的向量/列表。NULL对象没有类型也没有可以更改的特性。在R里面,只用NULL对象允许被所有的实例对象引用(唯一的一个)。为
本文标题:R语言定义
链接地址:https://www.777doc.com/doc-2856412 .html