Next: , Previous: Introduction, Up: Top



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 <- 1:3
     > typeof(x)
     [1] "integer"
     > mode(x)
     [1] "numeric"
     > storage.mode(x)
     [1] "integer"

R 在计算过程中,对象常常需要强制转换成 不同的类型(type)。 有许多函数可用于显式的强制转换。 在仅仅用 R 语言编程的时候,一个对象的类型通常不会影响计算结果, 但是当混合使用外部编程语言或不同的操作系统时, 常常需要保证对象类型的正确。