资源预览内容
第1页 / 共57页
第2页 / 共57页
第3页 / 共57页
第4页 / 共57页
第5页 / 共57页
第6页 / 共57页
第7页 / 共57页
第8页 / 共57页
第9页 / 共57页
第10页 / 共57页
亲,该文档总共57页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Next:Notes, Previous:(dir), Up:(dir) R 语言定义本册主要对 R 语言,赋值解释(explaining evaluation),解析,面向对象编程,语言上的计算等方面进行一个介绍。 本文档的当前版本为0.01 草稿。该文档译自 R-2.3.1 文档(2006年6月1日)。 丁国徽(ghdinggmail.com) 译。 本文档的一些发布信息放置在http:/www.biosino.org/R/R-doc/。 ISBN 3-900051-13-5 Notes: 说明 Introduction: 绪论 Objects: 对象 Evaluation of expressions: 表达式求值 Functions: 函数 Object-oriented programming: 面向对象编程 Computing on the language: 语言上的计算 System and foreign language interfaces: 系统和其它语言的接口 Exception handling: 异常处理 Debugging: 调试 Parser: 解析器 Function and Variable Index: 函数和变量索引 Concept Index: 概念索引 References: 参考文献 1 绪论R 是为统计计算和图形展示而设计的一个系统。它包括一种编程语言,高级别图形展示函数,和其它语言的接口以及调试工具。本手册将会详细描述和定义R语言。 R 是统计领域广泛使用的诞生于 1980年左右的 S 语言的一个分支。 S的主要设计者John M. Chambers 因为S语言方面的工作获得了1998年 ACM 软件系统奖(ACM Software Systems Award)。 该语言的语法表面上类似 C,但在语义上是函数设计语言的(functional programming language)的变种并且和Lisp 以及 APL有很强的兼容性。特别的是,它允许在“语言上计算”(computing on the language)。这使得它可以把表达式作为函数的输入参数,而这种做法对统计模拟和绘图非常有用。 通过命令行运行简单的表达式可以充分地交互使用 R 的功能。 一些用户可能这样做就能满足要求了,但还有一些用户想编写他们自己的函数。编写函数的用户要么用以一种特别的方式,系统化一些常常重复的工作或者为新的功能编写扩展包。 本手册的目的是想记录R语言的本质。也就是它所工作的对象,表达式赋值过程的细节。这些内容的了解对编写R函数非常有用。另外一些针对特定任务的主题,如绘图,在本册里面只是简单描述,而在其它手册里面有专门的论述。 尽管手册中的大部分内容同样适用于S,但S和R还是有一些实质上的差异。为了不至于混淆,我们集中描述R。 R 语言的设计包含了一系列亮点,当然也有让用户惊讶的公共缺陷。许多设计是基于底层的连贯性考虑,我们会在后面的行文中解释。它还包括很多有用的快捷方式和特殊用法,使得用户可以很简洁的表述复杂的操作。一旦用户熟悉底层的概念,这些用法将会变得非常的自然。在某些情况下,有多种方法完成同一件事情,但是其中有些技术依赖于语言的实现,另外一些技术则是一个更高层次上的抽象。在这种情况下,我们会指出首选的用法。 读本册前,我们假定用户对R已经有一定的了解。这不是一本R的入门读物,而是一本程序员的参考手册。其它文档给出了互补的信息:特别 Preface (R Introduction) 给出 R 语言的入门介绍和 System and foreign language interfaces (Writing R Extensions) 详细介绍如何用编译好的代码扩充 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 一个弱引用对象(a weak reference object) raw 一个字节元素向量 我认为用户不用深入以*标记的条目,至少没有想象的那么容易;但是可以多看一些例子。 根据 Becker,Chambers & Wilks (1988)中的说明,函数 mode 返回对象的 模式信息,并且和其它S语言的变种完全兼容。 最后,同样基于Becker et al. (1988)的考虑,函数storage.mode返回其参数的存储模式(storage mode)。该函数常常用于,在外部语言(如C或FORTRAN)中调用函数时确保R对象有被调用的程序所期望的数据对象。(在S语言里面,整数值或实数值向量都是 numeric模式,因此它们的存储模式需要区分。) x typeof(x) 1 integer mode(x) 1 numeric storage.mode(x) 1 integerR 在计算过程中,对象常常需要强制转换成 不同的类型(type)。有许多函数可用于显式的强制转换。 在仅仅用 R 语言编程的时候,一个对象的类型通常不会影响计算结果,但是当混合使用外部编程语言或不同的操作系统时,常常需要保证对象类型的正确。 Basic types: 基本类型 Attributes: 属性 Special compound objects: 特殊的混合对象 2.1 基本类型 Vector objects: 向量对象 List objects: 列表对象 Language objects: 语言对象 Expression objects: 表达式对象 Function objects: 函数对象 NULL object: 空对象 Built-in objects and special forms: 内置对象和特别形态 Promise objects: 允诺对象 Dot-dot-dot: .对象 Environment objects: 环境对象 Pairlist objects: 成对列表对象 Any-type: 任意类型 2.1.1 向量向量可以看着是由一系列包含数据的紧密联结的单元格子构成。这些单元格通过 类似x5的索引操作来访问。更细节的内容可以参考Indexing。 R 有六个基本(原子性)向量类型:逻辑型,整数型,实数型,复数型,字符串(字符)型和原味型(raw)。这些不同向量类型的模式和存储模式如下表所示。 typeof mode storage.mode logical logical logical integer numeric integer double numeric double complex complex complex character character character raw raw raw 单个的数字,如 4.2,以及字符串,如four point two,仍然是长度为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 与列表相互转换。 解析树的分量可以通过标准的索引操作析取。 Symbol objects: 符号对象 2.1.4 表达式对象在 R 里面,我们可以创建类型为 expression 的对象。一个 表达式(expression)含有一个或多个程序语句。其中,程序语句(statement)指的是语法上正确的一群标记的聚集。 表达式对象是一种特殊语言对象,它包含一些解析过但还未求值的R语句。相比其它语言对象,它的主要差别在于一个表达式对象可以包含多个同类型的表达式。另外一个更细微的差别是,expression类型的对象仅仅当它显式地传递给函数eval时才求值, 而其它语言对象可在一些意想不到的情况下求值。 表达式对象的操作行为非常像列表,它的元素访问方式和列表元素的访问方式一样。 2.1.5 函数对象在 R 里面,函数是对象并且可以有许多和其它对象类似的操作方法。函数(更准确地说是函数闭包(function closure)有三个基本的组成部分:形式化的参数列表,功能实现的主体和 环境。参数列表是一个以逗号分割的参数的列表。 参数可以是符号,或者是symbol = default 的形式,或者是特殊参数 .。第二种参数形式常常用于设置参数的默认值。如果函数调用时参数缺省,该值会被采用。 .参数比较特殊,而且可以包含任意
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号