附录A 变量的属性
R有四种不同的函数能告诉你变量的类型是什么,即class
、typeof
、mode
和storage.mode
。对于某些变量类型,这些函数给出的答案都相同,但对于其他的函数则有点不同,这让事情变得有点复杂。
对于绝大部分你所编写的代码,你只需关心其class
类型。class
唯一不能帮你的是在检查矩阵或数组时,变量是否包含数字或字符(或其他类型)。在这种情况下,你可以使用其他三种类型的函数之一,或只调用is.*
函数(例如is.numeric
)中的一个。
表A-1显示了class
、typeof
、mode
和storage.mode
对各种变量类型返回的值。
表A-1:不同类、类型、模式和存储模式之间的比较
class | typeof | mode | storage.mode | |
---|---|---|---|---|
Logical |
logical
|
logical
|
logical
|
logical
|
Integer |
integer
|
integer
|
numeric
|
intege
|
Floating |
Point
|
numeric
|
double
|
numeric double
|
Complex |
complex
|
complex
|
complex
|
complex
|
String |
character
|
character
|
character
|
character
|
Raw byte |
raw
|
raw
|
raw
|
raw
|
Categorical |
factor
|
integer
|
numeric
|
integer
|
Null |
NULL
|
NULL
|
NULL
|
NULL
|
Logical Matrix |
matrix
|
logical
|
logical
|
logical
|
Numeric Matrix |
matrix
|
double
|
numeric
|
double
|
Character Matrix |
matrix
|
character
|
character
|
character
|
Logical Array |
array
|
logical
|
logical
|
logical
|
Numeric Array |
array
|
double
|
numeric
|
double
|
Character Array |
array
|
character
|
character
|
character
|
List |
list
|
list
|
list
|
list
|
Data Frame |
data.frame
|
list
|
list
|
list
|
Function |
function
|
closure
|
function
|
function
|
Environment |
environment
|
environment
|
environment
|
environment
|
Expression |
expression
|
expression
|
expression
|
expression
|
Call |
call
|
language
|
call
|
language
|
Formula |
formula
|
language
|
call
|
language
|
在R中,向量是具有长度但没有维度的(即dim
会返回NULL
),以及除了名字以外没有属性的变量类型。向量类型包括了数值、逻辑和字符类型,而且还包括列表和表达式。无属性的规则意味着因子不是向量。
提示
列表是向量。因子不是向量。
与向量相关的是原子(atomic)类型。原子表示此类型不可以把相同类型的其他实例包含在内。与原子相反的类型是递归(recursive):列表就是典型的例子,因为它可以把其他列表包含在内。一个对象永远只能是原子或递归的,不可能兼顾。
提示
矩阵和数组都是原子的。
有些对象被称为语言对象(language objects)。这些变量类型可被解析为R程序运行。
表A-2显示了is.vector
,is.atomic
,is.recursive
和is.language
对各种变量类型的返回值。
表A-2:矢量、原子、递归或语言对象变量类型的比较
is.vector
|
is.atomic
|
is.recursive
|
is.language
| |
---|---|---|---|---|
Logical |
TRUE
|
TRUE
|
FALSE
|
FALSE
|
Integer |
TRUE
|
TRUE
|
FALSE
|
FALSE
|
Floating Point |
TRUE
|
TRUE
|
FALSE
|
FALSE
|
Complex |
TRUE
|
TRUE
|
FALSE
|
FALSE
|
String |
TRUE
|
TRUE
|
FALSE
|
FALSE
|
Raw Byte |
TRUE
|
TRUE
|
FALSE
|
FALSE
|
Categorical |
FALSE
|
TRUE
|
FALSE
|
FALSE
|
Null |
FALSE
|
TRUE
|
FALSE
|
FALSE
|
Logical Matrix |
FALSE
|
TRUE
|
FALSE
|
FALSE
|
Numeric Matrix |
FALSE
|
TRUE
|
FALSE
|
FALSE
|
Character Matrix |
FALSE
|
TRUE
|
FALSE
|
FALSE
|
Logical Array |
FALSE
|
TRUE
|
FALSE
|
FALSE
|
Numeric Array |
FALSE
|
TRUE
|
FALSE
|
FALSE
|
Character Array |
FALSE
|
TRUE
|
FALSE
|
FALSE
|
List |
TRUE
|
FALSE
|
TRUE
|
FALSE
|
Data Frame |
FALSE
|
FALSE
|
TRUE
|
FALSE
|
Function |
FALSE
|
FALSE
|
TRUE
|
FALSE
|
Environment |
FALSE
|
FALSE
|
TRUE
|
FALSE
|
Expression |
TRUE
|
FALSE
|
TRUE
|
TRUE
|
Call |
FALSE
|
FALSE
|
TRUE
|
TRUE
|
Formula |
FALSE
|
FALSE
|
TRUE
|
TRUE
|