最常见的数据类型为数值型,包括定距和定序两种,在R语言中创建数值型变量非常简单,直接将数值赋值给对象即可,如下所示。
● 数值型
1 a <-3
2 b <-3/2
3 mode(a)
# "numeric"
上面的对象a和b都是数值型对象,使用mode函数可以查看对象的数据类型,但是不要认为使用数字赋值给对象,对象的数据类型就一定是数值型,如下所示。
● 字符型
1 a <-"3"
2 is.character(a)
# TRUE
3 a/2
# Error in a/2: non-numeric argument to binary operator
4 b <-"这是字符型"
5 mode(b)
6 nchar(b)
在R里使用英文双引号""或者英文单引号标定字符数据,比如上述代码中,第1行代码将3用英文双引号括起来,a的数据类型就变成字符型,使用is.character函数判断对象a是否是字符型,如果是,则返回真,否则返回非;a对象除以2会报错,因为字符数据没办法进行数学运算(见第3行代码);将"这是字符型"赋值给对象b,对象b就存储了这个字符串(见第4行代码);函数nchar返回字符串对象的长度(见第6行代码)。
除了数值型和字符型外,还有逻辑型,逻辑型就包括两个状态:是或非,如下所示。
● 逻辑型
1 a <-TRUE
2 b <-FALSE
3 mode(a)
4 is.logical(b)
5 d <-T
“是”使用全部大写的TRUE表示,“非”用全部大写的FALSE表示,且不能用引号,否则就变成字符型了,当然写大量代码时为了节省敲击键盘的次数有时候是和非也可以缩写为首字母T和F,但必须大写。其实理解数据类型很简单,但是在实战中经常用到的是数据类型之间的转化,例如你读入一个全是数值型的数据集,却不能进行算术运算,可以肯定你的数据里有些因素导致全部的数据变成字符型或者逻辑型了,这里就需要进行数据类型之间的转化,如下所示。
● 数据类型之间的转化
1 a <-"3"
2 b <-T
3 c <-3
4 a <-as.numeric(a)# 将a从字符型转化为数值型
5 mode(a)
6 b <-as.numeric(b)# 将b从逻辑型转化为数值型
7 mode(b)
8 c <-as.character(c)# 将c从数值型转化为字符型
9 mode(c)
10 mode(a)
11 a <-as.logical(a)# 将a从数值型转化为逻辑型
12 a <-0
13 a <-as.logical(a)# 将a从数值型转化为逻辑型
14 a
15 a <--3
16 a <-as.logical(a)# 将a从数值型转化为逻辑型
17 a
18 a <-NA
19 a <-as.logical(a)
20 a
21 is.na(a)
上述代码中,使用as.character函数将其他数据类型的对象转化为字符型;as.numeric函数将其他数据类型的对象转化为数值型;as.logical函数将其他数据类型的对象转化为逻辑型,请注意当非零数值型对象转化为逻辑型时都是TRUE,只有0会被转化为FALSE;另外NA(不带引号,带引号的是字符)在R中表示缺失值,这里的空值指not available,使用is.na函数判断一个对象是否是缺失值,其实R里的函数是很有规律的,比如做判断的函数常见的类型包括:is.xx、==、which、while、if等,比如行使转化功能的函数经常以as(作为)开头,形如as.xx。