目录 1.存储模式与基本类型R语言中根据类型可以将数据划分为:
R
的变量可以存储多种不同的数据类型,可以用
使用以下函数查看数据的类型,但返回结果有差别
:
比如
整数型:
返回 : double 型:
返回: 逻辑型:
返回: 字符串型:
返回: 注:因子返回类型是 integer
返回: 复数型:
返回: 原始型(raw):
返回:
为了判断某个向量
x
保存的基本类型,可以用 is.xxx()
类函数,如
is.integer(x), is.double(x),
is.numeric(x)
, is.logical(x), is.character(x), is.complex(x), is.raw(x)。其中
is.numeric(x)
对
integer
和
double
内容都返回真值。
在
R
语言中数值一般看作
double,
如果需要明确表明某些数值是整数,可以在数值后面附加字母 L
,如
返回:
返回:
整数型的缺失值是
NA
,而
double
型的特殊值除了
NA
外,还包括
Inf, -Inf 和 NaN
,其中
NaN
也算是缺失值
,
Inf
和
-Inf
不算是缺失值。
对
double
类型,可以用
is.finite()
判断是否有限值,
NA
、
Inf
,
-Inf
和 NaN 都不是有限值;用
is.infinite()
判断是否
Inf
或
-Inf
;
is.na()
判断是否 NA
或
NaN
;
is.nan()
判断是否
NaN。
如:
返回: 我们来判断一下结果是否为缺失值:
返回:
严格说来,
NA
表示逻辑型缺失值,但是当作其它类型缺失值时一般能自动识别。NA_integer_
是整数型缺失值,
NA_real_
是
double
型缺失值,NA_character_ 是字符型缺失值。
在
R
的向量类型中,
integer
类型、
double
类型、
logical
类型、
character
类型、还有 complex
类型和
raw
类型称为原子类型
(atomic types)
,原子类型的向量中元素都是同一基本类型的。比如,double
型向量的元素都是
double
或者缺失值。除了原子类型的向量,在 R
语言的定义中,向量还包括后面要讲到的列表(list
),列表的元素不需要属于相同的基本类型,而且列表的元素可以
不是单一基本类型元素。
用
typeof()
函数可以返回向量的类型,列表返回结果为"list",如
返回: 原子类型的各个元素除了基本类型相同,还不包含任何嵌套结构,如:
返回: 2.类属
R
具有一定的面向对象语言特征,其数据类型有一个
class
属性,函数 class() 可以返回变量类型的类属,可以用
使用以下函数查看数据的
类属,但返回结果有差别
:
比如
返回:
返回:
返回:
返回:
返回:
R
有一个特殊的
NULL
类型,这个类型只有唯一的一个
NULL
值,表示不存在。要把 NULL
与
NA
区分开来,
NA
是有类型的(
integer
、
double
、
logical
、character 等
),
NA
表示存在但是未知。用
is.null()
函数判断某个变量是否取 NULL
。
3.类型转换
可以用
as.xxx()
类的函数在不同类型之间进行强制转换。如
转换为数值型
返回: 转换为字符型
返回: 类型转换也可能是隐含的,比如,四则运算中数值会被统一转换为 double 类 型,逻辑运算中运算元素会被统一转换为 logical 类型。逻辑值转换成数值时,TRUE 转换成 1,FALSE 转换成 0。
在用
c()
函数合并若干元素时,如果元素基本类型不同,将统一转换成最复杂的 一个,复杂程度从简单到复杂依次为:logical<integer<double<character
。
如
返回: 不同类型参与要求类型相同的运算时,也会统一转换为最复杂的类型,如:
返回:
返回: 4.属性
除了
NULL
以外,
R
的变量都可以看成是对象,都可以有属性。
在
R
语言中, 属性是把变量看成对象后,除了其存储内容(如元素)之外的其它附加信息,如 维数、类属等。对象 x
的所有属性可以用
attributes()
读取,如
定义x
返回: 读取x的属性
返回:
table()
函数用了输出其自变量中每个不同值的出现次数,称为频数。从上例可以看出,table()
函数的结果有三个属性,前两个是
dim
和
dimnames,
这是数组 (array)
具有的属性;另一个是
class
属性,值为
"table"
。因为
x
是数组,可以访问如
返回:
返回: 也可以用 attributes() 函数修改属性,如
返回: 如上修改后 x 不再是数组,也不是 table。
class
属性是特殊的。如果一个对象具有
class
属性,某些所谓
“
通用函数
(generic functions)” 会针对这样的对象进行专门的操作,比如,
print()
函数在显示向量和回归结果时采用完全不同的格式。这在其它程序设计语言中称为 “
重载”(overloading)
。
可以用
attr(对象, " 属性名")
读取和修改单个属性。向量的元素名是 names 属性,例如
返回:
返回:
返回: 还可以用 unname() 函数返回一个去掉了 names 属性的副本。 5.str() 函数
用
print()
函数可以显示对象内容。如果内容很多,显示行数可能也很多。用 str() 函数可以显示对象的类型和主要结构及典型内容。例如
返回: 6.关于赋值
要注意的是,在
R
中赋值本质上是把一个存储的对象与一个变量名联系在一起 (binding),多个变量名可以指向同一个对象。对于基本的数据类型如数值型向量,两个指向相同对象的变量当一个变量被修改时自动制作副本,如
返回:
返回:
这里如果
y
没有与其它变量指向同一对象,则修改时直接修改该对象而不制作副本。
但是对于有些比较复杂的类型,两个指向同一对象的变量是同步修改的。这样的类型的典型代表是闭包 (closure)
,它带有一个环境,环境的内容是不自动制作副本的。
|
|