R 语言定义.docx

上传人:b****4 文档编号:2964288 上传时间:2022-11-16 格式:DOCX 页数:70 大小:78.68KB
下载 相关 举报
R 语言定义.docx_第1页
第1页 / 共70页
R 语言定义.docx_第2页
第2页 / 共70页
R 语言定义.docx_第3页
第3页 / 共70页
R 语言定义.docx_第4页
第4页 / 共70页
R 语言定义.docx_第5页
第5页 / 共70页
点击查看更多>>
下载资源
资源描述

R 语言定义.docx

《R 语言定义.docx》由会员分享,可在线阅读,更多相关《R 语言定义.docx(70页珍藏版)》请在冰豆网上搜索。

R 语言定义.docx

R语言定义

Next:

 Notes,Previous:

 (dir),Up:

 (dir)

 

R语言定义

乔呼和整理上传

本册主要对R语言,赋值解释(explainingevaluation),解析,面向对象编程,语言上的计算等方面进行一个介绍。

本文档的当前版本为0.01β草稿。

该文档译自R-2.3.1文档(2006年6月1日)。

丁国徽(ghding@)译。

本文档的一些发布信息放置在http:

//www.biosino.org/R/R-doc/。

ISBN3-900051-13-5

∙Notes:

说明

∙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:

3

>typeof(x)

[1]"integer"

>mode(x)

[1]"numeric"

>storage.mode(x)

[1]"integer"

R在计算过程中,对象常常需要强制转换成不同的类型(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)。

这些不同向量类型的模式和存储模式如下表所示。

typeof

mode

storage.mode

logical

logical

logical

integer

numeric

integer

double

numeric

double

complex

complex

complex

character

character

character

raw

raw

raw

单个的数字,如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的形式,或者是特殊参数...。

第二种参数形式常常用于设置参数的默认值。

如果函数调用时参数缺省,该值会被采用。

...参数比较特殊,而且可以包含任意多的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1